๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์Šคํ”„๋ง Spring/๐Ÿงถ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ Spring

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ - ๋กœ๊ทธ (Log4j) ๋ฐ ์ธํ„ฐ์…‰ํ„ฐ (Interceptor) ์„ค์ •๋ฒ•

by Meteora_ 2021. 4. 27.
728x90

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 [ํ”ํ•œ ๊ฐœ๋ฐœ์ž์˜ ๊ฐœ๋ฐœ ๋…ธํŠธ]

๋Œ“๊ธ€