1. Log4j ์ค์
Log4j๋ ์๋ฐ๊ธฐ๋ฐ์ ๋ก๊น ์ ํธ๋ฆฌํฐ๋ก, Apache์์ ๋ง๋ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
๊ฐ์๊ธฐ ๋ก๊ทธ๋ผ๊ณ ํ๋ฉด ์ด๊ฒ ๋ฌด์์ธ๊ฐ, ๊ทธ๊ฑธ ๋์ฒด ์ด๋ฐ ์จ๋จน๋๊ฒ์ธ๊ฐ!!!! ๋ผ๊ณ ์๊ฐํ ์ ์์ง๋ง, ๋ก๊ทธ๋ ์ฐ๋ฆฌ๊ฐ ๊ต์ฅํ ๋ง์ด ์ฐ๊ณ ์๋ค. ์๋ฅผ ๋ค์ด์, ๊ฐ๋ฐ์ ํ๋ค๊ฐ ์ด๋ค ๋ณ์์ ๊ฐ์ ํ์ธํ๊ณ ์ถ์ผ๋ฉด ์์ฐ์ค๋ฝ๊ฒ
System.out.println()์ผ๋ก ์ถ๋ ฅ์ ํ๋๋ฐ, ์ด๋ฐ๊ฒ๋ค์ด ๋ชจ๋ ๋ก๊ทธ์ ํ ์ข ๋ฅ๋ผ๊ณ ์๊ฐํ ์ ์๋ค. ๊ทธ๋ฌ๋ฉด ๊ทธ๋ฅ System.out.println()์ผ๋ก ์ถ๋ ฅํ๋ฉด ๋๋๋ฐ ์ ๊ท์ฐฎ๊ฒ ๋ค๋ฅธ๊ฑธ ์ฌ์ฉํ๋๋ ์๋ฌธ์ด ๋ค ์ ์๋ค.
์ฌ์ค ์ฐ๋ฆฌ๊ฐ ํผ์์ ๊ทธ๋ฅ ์ฐ์ต์ผ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ฑฐ๋ ํ๋ฉด System.out.println()์ ํฐ ๋ฌธ์ ๊ฐ ์์ง๋ง, ์ค์ ํ๋ก์ ํธ๋ ํผ์์ ํ๋๊ฒ๋ ์๋๊ณ , ๋ ์์คํ ์ด์์์๋ ํฐ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ๋ค.
๊ฐ๋จํ๊ฒ ์ดํด๋ณด๋ฉด
1) ์ด์์์ ๋ถํ์ํ ๋ก๊ทธ๊ฐ ๊ณ์ ์ถ๋ ฅ๋๋ค. - ์์คํ ์ ๊ฐ๋ฐํ๊ณ ์ด์ํ ๋, System.out.println()์ ๋ชจ๋ ์ฐพ์ ์ ์ง์์ค๋ค๋ฉด ๋ชฐ๋ผ๋, ๊ฑฐ์ ๋๋ถ๋ถ์ ๊ทธ๋ฅ ํ๋ค....ใ ก_ใ ก; ๊ทธ๋ฌ๋ฉด ์ธ๋ชจ์๋ ๋ก๊ทธ๋ก ์๊น์ด ๋ฆฌ์์ค๊ฐ ๋ญ๋น๋ ๋ค.
2) ๋ชจ๋ ๋ก๊ทธ๋ฅผ ์ง์๋ฒ๋ฆฌ๋ฉด, ์๋ฌ๊ฐ ๋ฌ์๊ฒฝ์ฐ, ๊ทธ ์๋ฌ ์์ธ์ ์ฐพ๊ธฐ๊ฐ ์ด๋ ค์ธ ์๋ ์๋ค. - ์๋ฅผ ๋ค์ด, ์์คํ ์
์ค๋ํ ์๋ฌ๊ฐ ๋ ๊ฒฝ์ฐ, ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํด๋๋๋ก ํด๋จ๋๋ฐ, ์์์ System.out.println์ ๋ชจ๋ ์ง์๋ฒ๋ ธ๋ค๋ฉด, ๋ก
๊ทธ๊ฐ ์๋จ์ ์๋ ์๋ค.
3) ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น๋ค. - ์ฌ์ค ๊ฐ์ฅ ์ค์ํ ๋ฌธ์ ๋ค. ์ฐ๋ฆฌ๊ฐ ํ๋ก๊ทธ๋จ์ ์คํํ๋ค๊ฐ System.out.println()
์ ๊ต์ฅํ ๋ง์ด ํธ์ถํ๋ฉด ํ๋ก๊ทธ๋จ์ ์ ์ฒด์ ์ธ ์ฑ๋ฅ์ด ๋จ์ด์ง๋๊ฒ์ ํ์ธํ ์ ์๋ค. ์๋ฅผ ๋ค์ด 1๋ถํฐ 100๊น
์ง๋ฅผ ๋ชจ๋ ๋ํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์์๋, ๋ก๊ทธ๋ฅผ ํ๋๋ ์์ฐ์ผ๋ฉด ์ ๋ง 0.01์ด๋ ์๊ฑธ๋ ค์ ๋๋์ง๋ง, ๊ทธ ๊ณ
์ฐ๊ณผ์ ์ ๋ชจ๋ System.out.println()์ผ๋ก ํ๋ฉด์ ์ฐ์ด๋ณด๋ฉด....ํ์ฐธ ๊ฑธ๋ฆฐ๋ค... ํนํ ๋ค์ค์ฌ์ฉ์๋ฅผ ์ฒ๋ฆฌํด์ผ ํ
๋ ์น์์ System.out.println()์ ์ ๋ง ํฐ ๋ฌธ์ ๋ฅผ ๋ง๋ค์ด๋ฒ๋ฆฐ๋ค.
Log4j๋ ์์์ ๊ฐ๋จํ ์ด์ผ๊ธฐ ํ ๋ฌธ์ ์ ์๋ค ์์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
Logj4๋ ์์คํ ์ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น์ง ์์ผ๋ฉด์๋, ์ต์ ์ค์ ์ ํตํด์ ๋ค์ํ ๋ก๊น ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
ํ๊ฒฝ์ค์ ์ ํตํด์ ์ ํ์ ์ธ ๋ก๊ทธ๋ฅผ ๋จ๊ธด๋ค๊ฑฐ๋, ํน์ ํ์ผ๋ฑ์ ๋ก๊ทธ๋ฅผ ์์ฑํ๋ ๋ฑ ๋ค์ํ ์ด์ ์ ๊ฐ์ง๊ณ ์๋ค.
Log4j์ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์์ |
์ค๋ช |
Logger |
์ถ๋ ฅํ ๋ฉ์์ง๋ฅผ Appender์ ์ ๋ฌํ๋ค. |
Appender |
์ ๋ฌ๋ ๋ก๊ทธ๋ฅผ ์ด๋์ ์ถ๋ ฅํ ์ง ๊ฒฐ์ ํ๋ค. (์ฝ์ ์ถ๋ ฅ, ํ์ผ ๊ธฐ๋ก, DB ์ ์ฅ ๋ฑ) |
Layout |
๋ก๊ทธ๋ฅผ ์ด๋ค ํ์์ผ๋ก ์ถ๋ ฅํ ์ง ๊ฒฐ์ ํ๋ค. |
Log4j๋ ๋ค์๊ณผ ๊ฐ์ ๋ก๊ทธ ๋ ๋ฒจ์ ๊ฐ์ง๋ค.
๋ก๊ทธ ๋ ๋ฒจ |
์ค๋ช |
FATAL |
์์ฃผ ์ฌ๊ฐํ ์๋ฌ๊ฐ ๋ฐ์ํ ์ํ๋ฅผ ๋ํ๋ธ๋ค. |
ERROR |
์ด๋ ํ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ํ๋ฅผ ๋ํ๋ธ๋ค. |
WARN |
ํ๋ก๊ทธ๋จ์ ์คํ์๋ ๋ฌธ์ ๊ฐ ์์ง๋ง, ํฅํ ์์คํ ์๋ฌ์ ์์ธ์ด ๋ ์ ์๋ ๊ฒฝ๊ณ ์ฑ ๋ฉ์ ์ง๋ฅผ ๋ํ๋ธ๋ค. |
INFO |
์ด๋ ํ ์ํ๋ณ๊ฒฝ๊ณผ ๊ฐ์ ์ ๋ณด์ฑ ๋ฉ์์ง๋ฅผ ๋ํ๋ธ๋ค. |
DEBUG |
๊ฐ๋ฐ์ ๋๋ฒ๊ทธ ์ฉ๋๋ก ์ฌ์ฉํ๋ ๋ฉ์์ง๋ฅผ ๋ํ๋ธ๋ค. |
TRACE |
๋๋ฒ๊ทธ ๋ ๋ฒจ์ด ๋๋ฌด ๊ด๋ฒ์ํ๊ฒ์ ํด๊ฒฐํ๊ธฐ ์ํด์ ์ข ๋ ์์ธํ ์ด๋ฒคํธ๋ฅผ ๋ํ๋ธ๋ค. |
Log4j์ ๋ํ ๊ฐ๋จํ ์ค๋ช ์ ์ด์ ๋๋ก๋ง ํ๊ณ , ์์ธํ ๋ด์ฉ์ ์ถํ ์ด์ผ๊ธฐ ํ๊ฒ ๋ค.
์ผ๋จ ์ฌ๊ธฐ์๋ Log4j์ ๊ฐ๋จํ ์ค์ ๋ง ์ด์ผ๊ธฐ ํ๊ฒ ๋ค.
1. pom.xml์ Log4j๋ฅผ ์ถ๊ฐํ๋ค.
์ฐ๋ฆฌ๊ฐ ์์ฑํ ํ๋ก์ ํธ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก Log4j ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ถ๊ฐ๋์ด์๊ณ ๊ธฐ๋ณธ์ค์ ๋ ๋์ด์๊ธฐ ๋๋ฌธ์, ๋์ด๊ฐ๋๋ก ํ๋ค.
2. Log4j ์ค์
์ธํฐ๋ท์์ Log4j์ ๋ํด์ ์ฐพ์๋ณด๋ฉด ์ฌ๋ฌ๊ฐ์ง ๊ธ์ด ๋์ค๋๋ฐ, ์๋นํ ๋ง์ ๊ธ๋ค์ด .properties ํ์ผ์ ์ด์ฉํ ์ค์ ๋ฐฉ๋ฒ์ด๋ค.
Log4j์ .properties๋ฅผ ์ฌ์ฉํ๋ ๊ฑด ์ต์ ์ด๋ค. ์ ๋๋ก ํ์ง๋ง์. (์ง์งํ ๊ถ์์ฒด๋ค.)
์ด์ .properties๋ ๊ต์ฅํ ์๋ ๋ฐฉ์์ด๊ณ ์ ๋๋ก ์ฌ์ฉํด์๋ ์๋๋ ๋ฐฉ์์ธ๋ฐ, ์ต๊ทผ์ ์์ฑ๋ ๊ธ๋ค๋ .properties๋ฅผ ๊ฐ์ง๊ณ ์ด์ผ๊ธฐํ๊ณ ์๋ค. (ํนํ ๋คE๋ - ์์ฒด์ฌ์)
์ต์ Log4j์์๋ xml๊ณผ json์ ์ด์ฉํ ์ค์ ๋ง ์ง์ํ๊ณ ์๋ค.
src/main/resources ํด๋ ๋ฐ์ ์๋ log4j.xml ํ์ผ์ ์ด์.
log4j.xml์ด Log4j์ ์ค์ ํ์ผ๋ก, ์ฌ๊ธฐ์ ๋ก๊ทธ ์ถ๋ ฅ ํ์๊ณผ ๋ ๋ฒจ ๋ฑ์ ๋ชจ๋ ์ง์ ํ ์ ์๋ค.
๊ธฐ์กด์ http://addio3305.tistory.com/36 ์์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ ์คํ์์ผฐ์ ๋, ์ฝ์์์ ์ด๊ฒ์ ๊ฒ ์ถ๋ ฅ๋์๋ ๊ฒ๋ ์ฌ๊ธฐ์ ์ค์ ๋ ๊ฒ์ ์ด์ฉํด์ ์ถ๋ ฅ์ด ๋๊ฒ์ด๋ค.
๋น์ ์ฌ์ฉํ๋ ์ด๋ฏธ์ง๋ฅผ ๋ค์ ๊ฐ์ ธ์๋๋ฐ, ๋นจ๊ฐ์ ์ ์ ์ผ๋ก ํ์๋ ๋ถ๋ถ์ด Log4j๋ฅผ ํตํด์ ์ถ๋ ฅ๋ ๋ก๊ทธ๋ค์ด๋ค. " INFO : " ๋ผ๊ณ ๋์ด์๋๊ฒ ์์์ ์ค๋ช ํ INFO ๋ ๋ฒจ์ ๋ก๊ทธ์ด๋ค.
์ฐ๋ฆฌ๋ ์์ผ๋ก ์ฌ๋ฌ๊ฐ์ง ๋ก๊ทธ๋ฅผ ์ฐ๊ณ , ๊ฐ ๋ก๊ทธ ์ข ๋ฅ์ ๋ฐ๋ผ์ ํ๋ฉด์ ๋ณด์ด๋๊ฒ ๋ค๋ฅด๊ฒ ํ๊ธฐ ์ํด์ ๋ค์๊ณผ ๊ฐ์ด log4j.xml์ ๋ณ๊ฒฝํ๋ค.
์ฌ๊ธฐ์ 2๊ฐ์ appender์ 3๊ฐ์ logger๋ฅผ ๋ณผ ์ ์๋ค.
์ผ๋ฐ์ ์ธ debug ๋ ๋ฒจ์ ๊ธฐ์กด์ appender๋ฅผ ์ด์ฉํ๊ณ , ๊ทธ ์ธ ํ์ํ ์ฌ๋ฌ๊ฐ์ง ์ ๋ณด๋ info ๋ ๋ฒจ๋ก ์ฝ๊ฐ ๋ค๋ฅธํ์์ผ๋ก ์ถ๋ ฅํ๋ ค๊ณ ํ๋ค. ์ด๊ฑด ์ถํ ์์ค์์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ค.
2. ์ธํฐ์ ํฐ (Interceptor) ์ค์
์ธํฐ์ ํฐ๋ ์ค๊ฐ์ ๋ฌด์์ธ๊ฐ๋ฅผ ๊ฐ๋ก์ฑ๋ค๋ ์๋ฏธ์ด๋ค. ์คํ๋ง์์๋ ๋ง ๊ทธ๋๋ก ์ค๊ฐ์ ์์ฒญ์ ๊ฐ๋ก์ฑ์ ์ด๋ ํ ์ผ์ ํ๋๊ฒ์ ์๋ฏธํ๋ค. ์๋ธ๋ฆฟ(Servlet)์ ์ฌ์ฉํด๋ณธ ์ฌ๋์ด๋ผ๋ฉด ํํฐ(Filter)๋ฅผ ๋ค์ด๋ดค์ํ ๋ฐ, ๋น์ทํ ์๋ฏธ๋ก ์ฌ์ฉ๋๋ค. ๊ทธ๋ผ ์ด๋ ์ค๊ฐ์์ ์์ฒญ์ ๊ฐ๋ก์ฑ์ ๋ฌด์์ ํ๋์ง๋ฅผ ๊ฐ๋จํ ์ดํด๋ณด์.
์ฌ์ง ์ถ์ฒ : http://blog.daum.net/gunsu0j/165
์ธํฐ์ ํฐ๋ ์ ์ด๋ฏธ์ง์ ๋นจ๊ฐ์ ๋ฐ์ค ๋ถ๋ถ์์ ๋์ํ๋ค. ์ธํฐ์ ํฐ์ ์ ํํ ๋ช ์นญ์ ํธ๋ค๋ฌ ์ธํฐ์ ํฐ (Handler Interceptor)์ด๋ค. ์ธํฐ์ ํฐ๋ DispatcherServlet์ด ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํ๊ธฐ ์ ,ํ์ ์์ฒญ๊ณผ ์๋ต์ ๊ฐ๋ก์ฑ์ ๊ฐ๊ณตํ ์ ์๋๋ก ํด์ค๋ค.
์๋ฅผ ๋ค์ด, ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค๊ณ ํ์๋, ์ด๋ ํ ํ์ด์ง๋ฅผ ์ ์ํ๋ ค๊ณ ํ ๋, ๋ก๊ทธ์ธ๋ ์ฌ์ฉ์๋ง ๋ณด์ฌ์ฃผ๊ณ , ๋ก๊ทธ์ธ์ด ๋์ด์์ง ์๋ค๋ฉด ๋ฉ์ธํ๋ฉด์ผ๋ก ์ด๋์ํค๋ ค๊ณ ํด๋ณด์. ๊ธฐ์กด์๋ ๋ก๊ทธ์ธ ์ฒดํฌ ๋ก์ง์ ๋ง๋ค์ด์ ๊ฐ ํ๋ฉด๋ง๋ค ์ผ์ผ์ด Ctrl + C,V๋ก ๋ง๋ค๊ธฐ๋ ํ๋ค. ์๋ง ๋๊ฐ ๊ทธ๋ ๊ฒ ํ๊ฒ ์ด~? ๋ผ๊ณ ์๊ฐํ ์๋ ์๊ฒ ์ง๋ง ์ค์ ๋ก ํ์๋ ํ์๋ ์น ํ๋ก์ ํธ๋ฅผ ํ ๋ ๊ทธ๋ ๊ฒ ๋ง๋ค์์๋ค.
์คํ๋ง์์๋ ์ธํฐ์ ํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๊ธฐ๋ฅ์ ๊ฐ๋จํ ๋ง๋ค ์ ์๋ค.
์ธํฐ์ ํฐ์์ ์ด๋ ํ ์์ฒญ์ด ๋ค์ด์ฌ ๋, ๊ทธ ์ฌ๋์ ๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ํ๋จํด์ ๋ก๊ทธ์ธ์ด ๋์ด์์ผ๋ฉด ์์ฒญํ ํ์ด์ง๋ก ์ด๋์ํค๊ณ , ๋ก๊ทธ์ธ์ด ๋์ด์์ง ์์๊ฒฝ์ฐ ๋ฐ๋ก ๋ฉ์ธ ํ์ด์ง๋ก ์ด๋์ํค๋ฉด ๋์ด๋ค.
์ฆ, ๋จ ํ๋์ ์ธํฐ์ ํฐ๋ก ํ๋ก์ ํธ๋ด์ ๋ชจ๋ ์์ฒญ์์ ๋ก๊ทธ์ธ์ฌ๋ถ๋ฅผ ๊ด๋ฆฌํ ์ ์๋๊ฒ์ด๋ค.
์ค๋ช ์ ๊ฐ๋จํ ํ๊ณ , ์ค์ ๋ก ์ด๋ป๊ฒ ๋ง๋ค๊ณ , ๋์ํ๋์ง๋ฅผ ์์ค๋ฅผ ํตํด์ ์ดํด๋ณด์.
1. ๋จผ์ src/main/java/first ํจํค์ง ๋ด์ common ํจํค์ง๋ฅผ ์์ฑํ๊ณ ๊ทธ ๋ฐ์ logger ํจํค์ง๋ฅผ ์์ฑํ๋ค.
๊ธฐ์กด์ ์์ฑ๋์ด์๋ com.company.first ํจํค์ง๋ฅผ ์ญ์ ํ๊ณ , first.common.logger ํจํค์ง๋ฅผ ์์ฑํ๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก HomeController.java๋ ์ญ์ ํ๋ค.
2. logger ํจํค์ง ๋ฐ์ LoggerInterceptor.java๋ฅผ ์์ฑํ๋ค.
์ด์ ์์์ ์ค๋ช ํ ์ธํฐ์ ํฐ๋ฅผ ๋ง๋ค ์ฐจ๋ก๋ค. ์ธํฐ์ ํฐ๋ HandlerInterceptorAdapter ํด๋์ค๋ฅผ ์์๋ฐ์์ ๋ง๋ ๋ค.
HandlerInterceptorAdapter์์๋ ์ฌ์ฉํ ์ ์๋ ๋ช๊ฐ์ง ๋ฉ์๋๋ค์ด ์๋๋ฐ ์ฐ๋ฆฌ๋ ์ผ๋จ ๋๊ฐ์ง๋ง ๊ตฌํํ๋ ค๊ณ ํ๋ค. ์ ์ฒ๋ฆฌ๊ธฐ์ ํ์ฒ๋ฆฌ๊ธฐ๊ฐ ๋ฐ๋ก ๊ทธ๊ฒ์ธ๋ฐ, ์์์ client -> controller ๋ก ์์ฒญํ ๋, ๊ทธ ์์ฒญ์ ์ฒ๋ฆฌํ ๋ฉ์๋ ํ๋(์ ์ฒ๋ฆฌ๊ธฐ)์ controller -> client ๋ก ์๋ตํ ๋, ๊ทธ ์์ฒญ์ ์ฒ๋ฆฌํ ๋ฉ์๋ ํ๋(ํ์ฒ๋ฆฌ๊ธฐ)๋ฅผ ๋ง๋ค ์์ ์ด๋ค.
public class LoggerInterceptor extends HandlerInterceptorAdapter { protected Log log = LogFactory.getLog(LoggerInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (log.isDebugEnabled()) { log.debug("====================================== START ======================================"); log.debug(" Request URI \t: " + request.getRequestURI()); } return super.preHandle(request, response, handler); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { if (log.isDebugEnabled()) { log.debug("====================================== END ======================================\n"); } } }
์ด ์์ค์์ ์ฐ๋ฆฌ๊ฐ ์ดํด๋ด์ผ ํ ๊ฒ ๋ช๊ฐ์ง ์๋ค.
1) ์์์ ์ฐ๋ฆฌ๋ Log4j ๋ฅผ ์ฌ์ฉํด์ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๊ธฐ๋ก ํ์๋ค. ์ด์ ํ๋ฉด์ ๋ฌด์์ธ๊ฐ๋ฅผ ์ถ๋ ฅํ ๋๋ ๋ชจ๋ Log4j๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ด๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ค.
protected Log log = LogFactory.getLog(LoggerInterceptor.class); ๋ Log4j์ Log ๊ฐ์ฒด๋ฅผ log๋ผ๋ ์ด๋ฆ์ผ๋ก ์์ฑํ๋ค.
Log ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋ ๋ช๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋๋ฐ ์ฌ๊ธฐ์๋ ์์ฑ์์ ํ์ฌ ํด๋์ค๋ฅผ ์ ๋ ฅํ์๋ค.
2) ์ ์ฒ๋ฆฌ๊ธฐ์ ํ์ฒ๋ฆฌ๊ธฐ์ ๋ฉ์๋๋ฅผ ๋ฑ๋กํ๋ค.
preHandler()๊ณผ postHandle() ๋ฉ์๋๊ฐ ์ ์ฒ๋ฆฌ๊ธฐ์ ํ์ฒ๋ฆฌ๊ธฐ์ ํด๋น๋๋ค. preHandler()์ ์ปจํธ๋กค๋ฌ๊ฐ ํธ์ถ๋๊ธฐ ์ ์ ์คํ๋๊ณ , postHandle()์ ์ปจํธ๋กค๋ฌ๊ฐ ์คํ๋๊ณ ๋ ํ์ ํธ์ถ๋๋ค.
์ฌ๊ธฐ์๋ ๋จ์ํ START์ END์ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํจ์ผ๋ก์จ, ํ๋์ ์์ฒญ์ ์ฝ๊ฒ ๋ณผ ์ ์๋๋ก ๊ฒฝ๊ณ์ ์ ๊ทธ์ด์ฃผ๋ ์ญํ ์ ํ๋ค.
3) preHandle()์์ ํ์ฌ ํธ์ถ๋ URI๊ฐ ๋ฌด์์ธ์ง ๋ณด์ฌ์ฃผ๋๋ก ํ๋ค.
3. ๋ฐฉ๊ธ ๋ง๋ ์ธํฐ์ ํฐ๋ฅผ ๋ฑ๋กํ๋ค.
1) src/main/resources ํด๋ ๋ฐ์ first/spring ํด๋๋ฅผ ์์ฑํ๋ค.
ํด๋๋ฅผ ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํจํค์ง๋ก ๋ณด์ด๋ ๊ฒฝ์ฐ๊ฐ ์์์ ์๋ค.
์ด๋ ๊ฒ ๋์ค๋ ๊ฒฝ์ฐ, ๋ณด๊ธฐ์ข์ง ์๊ธฐ๋๋ฌธ์ http://addio3305.tistory.com/44 ํฌ์คํ ์ ๋ฐ๋ผํ๋๋ก ํ๋ค.
2) action-servlet.xml์ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ค.
๋ค์์ ์์ค๋ฅผ ๋ถ์ฌ๋ฃ์.
์ด ์์ค๋ฅผ ๊ฐ๋จํ ์ดํด๋ณด์.
์คํ๋ง 3.2 ์ด์์์๋ mvc๋ฅผ ์ค์ ํ๋๊ฒ ๋ง์ด ๋ฐ๋์๋ค.
<mvc:mapping path/>๋ฅผ ํตํด์ ์ธํฐ์ ํฐ๊ฐ ๋์ํ URL์ ์ง์ ํ ์ ์๋ค. ์ง๊ธ ์์ฑํ๋ ๋ก๊ฑฐ๋ ๋ชจ๋ ์์ฒญ์์ ๋์์ ํ๊ธฐ๋๋ฌธ์ ์ ์ฒด ํจ์ค๋ฅผ ์๋ฏธํ๋ "/**" ๋ก ์ค์ ํ์๋ค.
๊ทธ ํ, bean์ ์๋์ผ๋ก ๋ฑ๋กํ๋ค.
์ค์!!! ์์์ ์ด์ผ๊ธฐ ํ๋ฏ์ด, Interceptor๋ Controller๊ฐ ์์ฒญ๋๊ธฐ ์ ์ ์ํ๋๋ค. ์ฆ, Interceptor๋ DispatcherServlet๊ณผ ๊ฐ์ ์์น์ ๋ฑ๋ก์ด ๋์ด์์ด์ผ์ง ์ ์์ ์ผ๋ก ์ํ์ด ๋๋ค.
์ฌ์ง์ถ์ฒ : http://egloos.zum.com/springmvc/v/504151
DispatcherServlet์ ์ฌ์ฉ์(ํด๋ผ์ด์ธํธ)์ ์์ฒญ์ ๋ฐ์์ ํด๋น ์์ฒญ์ ๋งคํ๋๋ ์ปจํธ๋กค๋ฌ์ ์ฐ๊ฒฐํ ํ, ์ปจํธ๋กค๋ฌ์์ ์ ์๋ view๋ฅผ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์ ์ถ๋ ฅํ๋ ์ญํ ์ ์ํํ๋ค. DispatcherServlet์ ๊ด๋ จ๋ ๋ด์ฉ์ ์ ์ฌ์ง ์ถ์ฒ์ธ http://egloos.zum.com/springmvc/v/504151 ์์ ์ ์ค๋ช ์ด ๋์ด์๊ธฐ ๋๋ฌธ์ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค.
web.xml์ ๋ค์ํ๋ฒ ์ดํด๋ณด์.
<servlet> <servlet-name>action</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/config/*-servlet.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
์ฐ๋ฆฌ๋ ์ฌ๊ธฐ์ ์ด๋ฏธ DispatcherServlet์ ์ ์ํ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ DispatcherServlet์ ์ค์ ํ์ผ์ ์์น๋ /WEB-INF/config/ ํด๋ ๋ฐ์ -servlet.xml ๋ก ๋๋๋ ๋ชจ๋ xml ํ์ผ์ด๋ผ๊ณ ๋ช ์ํ ๊ฒ์ด๋ค.
์ฆ, action-servlet.xml์ interceptor๋ฅผ ์ค์ ํจ์ผ๋ก์จ, ์ฐ๋ฆฌ๋ DispatcherServlet๊ณผ Interceptor๋ฅผ ๊ฐ์ ์์น์ ๋ฑ๋ก์ ํ๊ฒ์ด๋ค.
๋ง์ฝ, action-servlet์์ Interceptor์ ์ค์ ์ ๋ถ๋ฆฌํ์ฌ ๋ค๋ฅธ ํ์ผ๋ก ๋ง๋ค๊ณ ์ถ์ผ๋ฉด, action-servlet.xml์ด ์๋ ํด๋์ *-servlet.xml์ ์ด๋ฆ ํ์ (์๋ฅผ ๋ค์ด interceptor-servlet.xml )์ผ๋ก ๋ง๋ค๋ฉด ๋๋ค.
4. ์ด์ ์ธํฐ์ ํฐ๊ฐ ์ ๋๋ก ๋์ํ๋์ง ํ์ธํ์.
์์์ ์ด์ผ๊ธฐํ๊ฒ์ ์ ๊ธฐ์ตํ๊ณ ์๋ค๋ฉด, ์ธํฐ์ ํฐ๋ ์ปจํธ๋กค๋ฌ์ ์์ฒญ๊ณผ ์๋ต ์์ ํธ์ถ๋๋ค. ํ์ฌ ์ฐ๋ฆฌ๋ ์ปจํธ๋กค๋ฌ๊ฐ ์๋ฌด๊ฒ๋ ์์ผ๋, ๋น์ฐํ ์๋ฌด๊ฒ๋ ๋ณด์ด์ง ์๋๋ค.
๋ฐ๋ผ์ ๊ฐ๋จํ ์ปจํธ๋กค๋ฌ๋ฅผ ํ๋ ๋ง๋ค๊ณ ํ ์คํธ๋ฅผ ํด๋ณด์.
1) src/main/java/first ๋ฐ์ sample.controller ํจํค์ง๋ฅผ ๋ง๋ ๋ค.
2) controller ํจํค์ง์ SampleController ํด๋์ค๋ฅผ ์์ฑํ๋ค.
์ฌ๊ธฐ์ ๋์๋ฌธ์์ ๊ผญ ์ฃผ์ํ๋๋ก ํ๋ค. ์๋ฐ์์๋ ๋์๋ฌธ์๊ฐ ๋ค๋ฅธ ๋ฌธ์์ด๊ธฐ๋๋ฌธ์, ๋์๋ฌธ์๋ฅผ ํํ ํ์ธํ๊ณ ๋ง์ถฐ์ผํ๋ค.
3) ๋ค์์ ์์ค๋ฅผ ๋ถ์ฌ๋ฃ์.
@Controller public class SampleController { Logger log = Logger.getLogger(this.getClass()); @RequestMapping(value="/sample/openSampleList.do") public ModelAndView openSampleList(Map<String,Object> commandMap) throws Exception{ ModelAndView mv = new ModelAndView(""); log.debug("์ธํฐ์ ํฐ ํ ์คํธ"); return mv; } }
์ ์์ค๋ฅผ ๊ฐ๋จํ ์ค๋ช ํ๋ฉด,
1๋ฒ์งธ ์ค์ @Controller ๋ ์ด๋ ธํ ์ด์ (Annotation)์ผ๋ก, ์คํ๋ง ํ๋ ์์ํฌ์ ํ์ฌ ํด๋์ค๊ฐ ์ปจํธ๋กค๋ฌ ๋ผ๋๊ฒ์ ๋ช ์ํด์ค๋ค. ์ด๋ ธํ ์ด์ ์ ์์ผ๋ก ์ด๊ฒ์ ๊ฒ ๋์ฌํ ๋, ๊ทธ๋ ๋ค์ ์ค๋ช ํ๋๋ก ํ๋ค.
3๋ฒ์งธ ์ค์์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ Log4j ๋ก๊ทธ๋ฅผ ์ ์ธํด๋จ๋ค.
5๋ฒ์งธ ์ค์์ @Requestmapping ์ญ์ ์ด๋ ธํ ์ด์ ์ผ๋ก, DisptacherServlet์ ์ด ์ด๋ ธํ ์ด์ ์ ๊ธฐ์ค์ผ๋ก ์ด๋ค ์ปจํธ๋กค๋ฌ์ ๋ฉ์๋๊ฐ ํธ์ถ๋์ด์ผ ํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ค.
๊ทธ ๋ค์ (value="/sample/openSampleList.do")๋ ํ๋ก์ ํธ๊ฐ ์คํ๋ ์ฃผ์๋ฅผ ์๋ฏธํ๋ค.
7๋ฒ์งธ ์ค์์ ModelAndView ํด๋์คํ์์ mv ์ธ์คํด์ค๋ฅผ ์์ฑํ์๋ค.
์ฌ๊ธฐ์ new ModelAndView("")๋ฅผ ํ ๋ ์์ฑ์ ๋ถ๋ถ์๋ ์ด ์ปจํธ๋กค๋ฌ๊ฐ ์คํ๋๊ณ ๋์ ๋ณด์ฌ์ค view (์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค ํ๋ฉด)๋ฅผ ์ค์ ํ ์ ์๋ค.
์ฌ๊ธฐ์๋ ์ธํฐ์ ํฐ๊ฐ ๋์ํ๋์ง ํ์ธํ๊ธฐ ํ ์คํธ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก view๋ฅผ ์ค์ ํ์ง ์๊ฒ ๋ค.
8๋ฒ์งธ ์ค์ log.debug("์ธํฐ์ ํฐ ํ ์คํธ"); ๋ฅผ ํตํด์ ์ปจํธ๋กค๋ฌ๊ฐ ์คํ๋๊ณ log4j์ ๋ก๊ฑฐ๋ ๋์ํ๋๊ฒ์ ๋ณด๋ ค๊ณ ํ๋ค.
4) ์์์ ์ ์ธํ ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํ์.
์ฐ๋ฆฌ๋ ๊ทธ๋์ ํ๋ก์ ํธ๊ฐ ์คํ๋๋ฉด ์๋์ผ๋ก index.jsp๊ฐ ์คํ๋๋๋ก ํ์๋ค. index.jsp๋ฅผ ์ด์ฉํด์ ํ๋ก์ ํธ๊ฐ ์คํ๋๋ฉด ๋ฐ๋ก ๋ฐฉ๊ธ ๋ง๋ /sample/openSampleList.do๋ฅผ ํธ์ถํ๋๋ก ๋ณ๊ฒฝํ์.
index.jsp๋ฅผ ์ด๊ณ ๋ชจ๋ ๋ด์ฉ์ ์ญ์ ํ๊ณ , ๋ค์์ ์ฝ๋๋ฅผ ๋ถ์ฌ๋ฃ๋๋ค.
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <jsp:forward page="/sample/openSampleList.do"/>
index.jsp๊ฐ ํธ์ถ๋๋ฉด ์๋์ผ๋ก /sample/openSampleList.do ์ URL๋ก forward ์ํค๋๋ก ํ์๋ค.
๋ค์๋งํด์, ํ๋ก์ ํธ๋ฅผ ์์ํ๋ฉด index.jsp๋ฅผ ํธ์ถํ๊ฒ ๋๊ณ , index.jsp์์๋ ๋ค์ ๋ฐฉ๊ธ ์์์ ์์ฑํ /sample/openSampleList.do ๋ผ๋ ์ฃผ์๋ฅผ ํธ์ถํ๋ค.
๊ทธ๋ผ ์คํ์์ผ ๋ณด์. ์ดํด๋ฆฝ์ค์์ first ์๋ฒ๋ฅผ ์คํ์ํจ๋ค.
๊ทธ๋ผ ์์ ๊ฐ์ด ์๋ฌ๊ฐ ์์ด ์๋ฒ๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๋ค.
๊ทธ ๋ค์์๋ ์ธํฐ๋ท์ ์ผ๊ณ ์ฃผ์์ฐฝ์ localhost:8080/first๋ฅผ ์ ๋ ฅํ์.
๋ญ๊ฐ ์๋ชป๋์๋ค!!!!!!!
๋ ์๋๊ณ , ์์์ ModelAndView์์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค ํ๋ฉด (view)๋ฅผ ์ง์ ํ์ง ์์๋ค๋ ๊ฒ์ ๊ธฐ์ตํด๋ณด์.
์ฃผ์๋ ์ ํํ ํธ์ถ๋์์ง๋ง, ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค ํ๋ฉด์ด ์๊ธฐ๋๋ฌธ์ 404์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ์ธํฐ๋ท์ ํ๋ค๋ณด๋ฉด ๊ฐ๋ 404 Page Not Found์ ๊ฐ์ ์๋ฌ๋ฅผ ๋ณผ ์ ์๋๋ฐ, ์ง๊ธ๊ณผ ๋น์ทํ ์ํฉ์ด๋ผ๊ณ ์๊ฐํ์.
์ฐ๋ฆฌ๊ฐ ์ ๋ง๋ก ํ์ธํด์ผ ํ๋๊ฒ์ ์ดํด๋ฆฝ์ค์ ์ฝ์์ฐฝ์ด๋ค.
์์ ๊ฐ์ ํ๋ฉด์ด ๋ณด์ด๋ฉด ์ ์์ ์ผ๋ก ์ธํฐ์ ํฐ์ Log4j๊ฐ ์ค์ ๋ ๊ฒ์ด๋ค.
๋ก๊ทธ๋ฅผ ์ดํด๋ณด์.
์ฐ๋ฆฌ๋ ์๊น LoggerInterceptor๋ฅผ ์์ฑํด์ ์ ์ฒ๋ฆฌ๊ธฐ์ ํ์ฒ๋ฆฌ๊ธฐ์ธ preHandle()๊ณผ postHandle()์ ๋ง๋ค๊ณ , ๊ฑฐ๊ธฐ์ ๋ก๊ทธ๋ฅผ ์์ฑํ๋ค.
ํ๋์ ์์ฒญ์ ์์๊ณผ ๋์ ๊ตฌ๋ถ์ง๋๋ค๊ณ ํ๋๋ฐ START๋ ์์ฒญ์ ์์, END๋ ๋ชจ๋ ๋ก์ง์ด ์๋ฃ๋ ๊ฒ์ ์๋ฏธํ๋ค.
START ๋ฐ์๋ Request URI : /first/sample/openSampleList.do ๋ผ๋ ๋ก๊ทธ๊ฐ ์ฐํ์๋ค.
์ด๊ฒ์ ํ์ฌ ์ด๋ค ์ฃผ์๋ฅผ ํธ์ถํ๋์ง๋ฅผ ๋ณด์ฌ์ค๋ค.
index.jsp์์ /sample/openSampleList.do ๋ผ๋ ์ฃผ์๋ฅผ ํธ์ถํ์๊ณ , ๊ทธ ์ฃผ์๊ฐ ์คํ๋์์์ ์ ์ ์๋ค.
๋ง์ง๋ง์ผ๋ก log.debug("์ธํฐ์ ํฐ ํ ์คํธ");๋ผ๋ ๊ฒ์ ํตํด์ ์ฌ์ฉ์์ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋๋ก ํ๋๋ฐ, ๊ทธ ๋ก๊ทธ ์ญ์ ์ ์์ ์ผ๋ก ์ถ๋ ฅ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฌ๊ธฐ์, ๋ก๊ทธ๋ฅผ ์์ธํ ์ดํด๋ณด์.
๋ก๊ทธ๋ฅผ ์์ธํ ์ดํด๋ณด๋ฉด ์ฝ๊ฐ ๋ค๋ฅธ๊ฒ์ ๋ฐ๊ฒฌํ ์ ์๋ค.
DEBUG [first.common.logger.LoggerInterceptor] ์
DEBUG [first.sample.controller.SampleController] ์ ๋์ข ๋ฅ์ ๋ก๊ทธ๊ฐ ์๋๊ฒ์ ํ์ธํด๋ณด์.
์ด๋์ ๋ง์ด ๋ณธ ์ด๋ฆ์ธ๊ฒ ๊ฐ์๋ฐ??????? ๋ผ๊ณ ์๊ฐํ๋ฉด ๊ทธ ์๊ฐ์ด ๋ง๋ค ใ ใ ;
์ฐ๋ฆฌ๋ Logger ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋, ์ฐ๋ฆฌ๋ ํด๋น ํด๋์ค๋ฅผ Logger ํด๋์ค์ ์์ฑ์์ ๋ณ์๋ก ๋ฃ์ด์ฃผ์๋ค.
์ด๋ฅผ ์ด์ฉํ์ฌ Log4j๊ฐ ์์์ ์ด๋ค ํด๋์ค์์ ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋ ๊ฒ์ธ์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด๋ค.
๋ง์ฝ ์ฐ๋ฆฌ๊ฐ System.out.println()์ ์ฌ์ฉํ์ผ๋ฉด ์ด๋ค ํด๋์ค์์ ์ถ๋ ฅ๋ ๋ก๊ทธ์ธ์ง๋ฅผ ์๊ธฐ๊ฐ ์ฝ์ง ์์๋ฐ, Log4j๋ฅผ ์ฌ์ฉํด์ ์ด๋์ ์ถ๋ ฅ๋ ๋ก๊ทธ์ธ์ง๋ฅผ ์์ ์๋๋ก ํ์๋ค.
------------------------------------------------------------------------------------
์ต๊ทผ ๋ช๊ฐ์ ํฌ์คํ ์ ์ง๊ธ๊น์ง์๋ ๋ค๋ฅด๊ฒ ๋ณต์กํ๊ฒ ๋๊ปด์ก์ ๊ฒ์ ๋๋ค.
ํ์ผ์ ์ด๊ฒ์ ๊ฒ ๊ฑด๋๋ฆฌ๊ณ ์ด๋ฆ๋ ๋ฐ๊พธ๊ณ ํ๋ค๋ณด๋ ๋์ฑ ๊ทธ๋ ๊ฒ ๋๋ผ์ จ์ํ ๋ฐ, ์ฒ์์๋ ๋ณต์กํ๊ฒ ๋๊ปด์ง ์ ์
์ต๋๋ค.
์ฌํ๊น์ง ํ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์์ผ๋ก ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๋๋ฐ ํ์ํ ๊ธฐ๋ณธ์ค์ ๋ช๊ฐ์ง๋ฅผ ํ ๊ฒ์ ๋๋ค.
์ด๋ฅผ ํตํด์ ์ฐ๋ฆฌ๋ ๊ฐ๋ฐ์ ํ์ํ ๋ค์ํ ์ ๋ณด๋ฅผ ์ข ๋ ์ฝ๊ณ ๋ณด๊ธฐ ํธํ๊ฒ ์์ ์์ต๋๋ค.
์์ผ๋ก๋ ์ฌํ๊น์ง ์ค์ ํด๋์๊ฒ์ ๋ฐํ์ผ๋ก ๊ฒ์ํ์ ๋ง๋ค์ด ๋ณด๋ ค๊ณ ํฉ๋๋ค.
๊ฐ์๊ธฐ ๋ฌด์จ ๊ฒ์ํ???? ์ด๋ผ๊ณ ์๊ฐํ์ค ์๋ ์์ํ ๋ฐ์.
๊ฐ๋จํ ๊ฒ์ํ์ ํ๋ ๋ง๋ค๋ฉด์ ์คํ๋ง์ MVC ๊ตฌ์กฐ์ DB, ํธ๋์ญ์ , ํ์ผ ์ ๋ก๋, jQuery๋ฑ ๋ค์ํ ์ด์ผ๊ธฐ๋ฅผ
ํ๋ ค๊ณ ํฉ๋๋ค.
์ถ์ฒ: https://addio3305.tistory.com/43 [ํํ ๊ฐ๋ฐ์์ ๊ฐ๋ฐ ๋
ธํธ]
'์คํ๋ง Spring > ๐งถ ์คํ๋ง ํ๋ ์์ํฌ Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง ๊ธฐ๋ณธ๊ตฌ์กฐ / ์๋์๋ฆฌ (0) | 2021.06.22 |
---|---|
Spring MVC ํ๋ก์ ํธ์ ๊ธฐ๋ณธ๊ตฌ์กฐ (0) | 2021.04.27 |
์คํ๋ง ํ๋ ์์ํฌ - ๊ฐ ๋๊ธฐ๊ธฐ ๊ธฐ๋ณธ (0) | 2021.04.19 |
์คํ๋ง ํ๋ ์์ํฌ - Model ๊ฐ์ฒด (0) | 2021.04.19 |
์คํ๋ง ํ๋ ์์ํฌ - ์ด๊ธฐ ์ธํ , ๊ฐ๋ฐ ํ๊ฒฝ์ค์ (0) | 2021.04.19 |
๋๊ธ