04.Login

Login

์ƒํƒœ ์œ ์ง€

  • HTTP ์‘๋‹ต์— ์ฟ ํ‚ค๋ฅผ ๋‹ด์•„์„œ ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌ

  • ์ดํ›„ ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น ์ฟ ํ‚ค๋ฅผ ์ง€์†ํ•ด์„œ ์ „์†ก

์ฟ ํ‚ค ์ƒ์„ฑ

์ฟ ํ‚ค ์ƒ์„ฑ

Result

์ฟ ํ‚ค ์ „๋‹ฌ

Result

์˜์† ์ฟ ํ‚ค์™€ ์„ธ์…˜ ์ฟ ํ‚ค

  • ์˜์† ์ฟ ํ‚ค: ๋งŒ๋ฃŒ ๋‚ ์งœ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ๋‚ ์งœ๊นŒ์ง€ ์œ ์ง€

  • ์„ธ์…˜ ์ฟ ํ‚ค: ๋งŒ๋ฃŒ ๋‚ ์งœ๋ฅผ ์ƒ๋žตํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ์‹œ ๊นŒ์ง€๋งŒ ์œ ์ง€

  • ์š”์ฒญ์ด์— ์„ฑ๊ณตํ•˜๋ฉด ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  HttpServletResponse ์— ๋‹ด๊ธฐ

  • ๋งŒ๋ฃŒ ๋‚ ์งœ๋ฅผ ์ƒ๋žต(์„ธ์…˜ ์ฟ ํ‚ค)ํ•˜์˜€์œผ๋ฏ€๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์ข…๋ฃŒ ์ „๊นŒ์ง€ ํšŒ์›์˜ id ๋ฅผ ์„œ๋ฒ„์— ๊ณ„์† ์ „๋‹ฌ

์ฟ ํ‚ค ์กฐํšŒ

  • @CookieValue ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•˜๊ฒŒ ์ฟ ํ‚ค ์กฐํšŒ

  • ์ฟ ํ‚ค๊ฐ€ ์—†๋Š” ์š”์ฒญ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, required = false ์ ์šฉ

์ฟ ํ‚ค ์ œ๊ฑฐ

  • ์‘๋‹ต ์ฟ ํ‚ค ์ƒ์„ฑ ์‹œ Max-Age: 0 ์œผ๋กœ ์„ค์ •ํ•ด ์ฃผ๋ฉด ํ•ด๋‹น ์ฟ ํ‚ค๋Š” ์ฆ‰์‹œ ์ข…๋ฃŒ

๋ณด์•ˆ ๋ฌธ์ œ

์ฟ ํ‚ค ๊ฐ’์€ ์ž„์˜๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฟ ํ‚ค๋ฅผ ๊ฐ•์ œ๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ.

์ฟ ํ‚ค์— ๋ณด๊ด€๋œ ์ •๋ณด๋Š” ๋„๋‚œ ๊ฐ€๋Šฅ

  • ์ฟ ํ‚ค์— ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ด ์ •๋ณด๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์—๋„ ๋ณด๊ด€๋˜๊ณ , ๋„คํŠธ์›Œํฌ ์š”์ฒญ๋งˆ๋‹ค ๊ณ„์† ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋˜์–ด ๋„๋‚œ ๊ฐ€๋Šฅ์„ฑ ์กด์žฌ.

ํ•ด์ปค๊ฐ€ ์ฟ ํ‚ค๋ฅผ ํ•œ๋ฒˆ ํ›”์ณ๊ฐ€๋ฉด ํ‰์ƒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • ํ•ด์ปค๊ฐ€ ์ฟ ํ‚ค๋ฅผ ํ›”์ณ๊ฐ€์„œ ๊ทธ ์ฟ ํ‚ค๋กœ ์•…์˜์ ์ธ ์š”์ฒญ์„ ๊ณ„์† ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Œ.


๋Œ€์•ˆ

  • ์‚ฌ์šฉ์ž ๋ณ„๋กœ ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•œ ์ž„์˜์˜ ํ† ํฐ์„ ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌ

    • ์„œ๋ฒ„์—์„œ ํ† ํฐ๊ณผ ์‚ฌ์šฉ์ž id๋ฅผ ๋งคํ•‘ํ•ด์„œ ์ธ์‹

  • ํ•ด์ปค๊ฐ€ ์ž„์˜์˜ ๊ฐ’์„ ๋„ฃ์–ด๋„ ์ฐพ์„ ์ˆ˜ ์—†๋„๋ก ํ† ํฐ์€ ์˜ˆ์ƒ ๋ถˆ๊ฐ€๋Šฅ ํ•ด์•ผ ํ•จ

    • UUID ์‚ฌ์šฉ

  • ํ•ด์ปค๊ฐ€ ํ† ํฐ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ๊ฐ€๋„ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋„๋ก ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ํ† ํฐ์˜ ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ์งง๊ฒŒ ์œ ์ง€

    • ํ•ดํ‚น์ด ์˜์‹ฌ๋˜๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ํ† ํฐ์„ ๊ฐ•์ œ๋กœ ์ œ๊ฑฐ

Session

์„œ๋ฒ„์— ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ์„œ๋ฒ„์˜ ์„ธ์…˜ ์ €์žฅ์†Œ์— ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ํ•ด๋‹น ์ •๋ณด๋ฅผ ํ† ํฐ์œผ๋กœ ๋ณ€ํ™˜ ํ›„ ์ฟ ํ‚ค๋กœ ์—ฐ๊ฒฐ์„ ์œ ์ง€

๋กœ๊ทธ์ธ ์š”์ฒญ

  • ์‚ฌ์šฉ์ž ์ •๋ณด๊ฐ€ ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋˜๋ฉด ์˜ฌ๋ฐ”๋ฅธ ์ •๋ณด์ธ์ง€ ํ™•์ธ

Result

์„ธ์…˜ ์ƒ์„ฑ

  • ์ถ”์ • ๋ถˆ๊ฐ€๋Šฅํ•œ UUID ๋กœ session ID ์ƒ์„ฑ

  • ์„ธ์…˜ ์ €์žฅ์†Œ์— ์ƒ์„ฑ๋œ session ID ์™€ ๋ณด๊ด€ํ•  ๊ฐ’(์‚ฌ์šฉ์ž ๊ธฐ๋ณธ ์ •๋ณด) ์ €์žฅ

Result

์„œ๋ฒ„์˜ ์„ธ์…˜ ID ์ฟ ํ‚ค ์‘๋‹ต

  • ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์— UUID Session ID ๋กœ ์‘๋‹ต ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ „๋‹ฌ

    • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ๊ฒฐ๊ตญ ์ฟ ํ‚ค๋กœ ์—ฐ๊ฒฐ

  • ํด๋ผ์ด์–ธํŠธ๋Š” ์ฟ ํ‚ค ์ €์žฅ์†Œ์— UUID Session ID ์ฟ ํ‚ค ๋ณด๊ด€

Result

ํด๋ผ์ด์–ธํŠธ์˜ ์„ธ์…˜ ID ์ฟ ํ‚ค ์ „๋‹ฌ

  • ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ ์‹œ ํ•ญ์ƒ Session ID ์ฟ ํ‚ค๋ฅผ ํ•จ๊ป˜ ์ „๋‹ฌ

  • ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „๋‹ฌํ•œ Session ID ์ฟ ํ‚ค ์ •๋ณด๋กœ ์„ธ์…˜ ์ €์žฅ์†Œ๋ฅผ ์กฐํšŒํ•ด์„œ ๋กœ๊ทธ์ธ ์‹œ ๋ณด๊ด€ํ•œ ์„ธ์…˜ ์ •๋ณด๋ฅผ ์‚ฌ์šฉ

Result

URL์— jsessionid ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๊ณ  ์ฟ ํ‚ค๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์„ธ์…˜์„ ์œ ์ง€ํ•  ๊ฒฝ์šฐ ์•„๋ž˜ ์˜ต์…˜์ถ”๊ฐ€

HttpSession

์„œ๋ธ”๋ฆฟ์€ ์„ธ์…˜์„ ์œ„ํ•ด HttpSession ๊ธฐ๋Šฅ ์ œ๊ณต

  • ์„œ๋ธ”๋ฆฟ์„ ํ†ตํ•ด HttpSession ์ƒ์„ฑ ์‹œ ์•„๋ž˜์™€ ๊ฐ™์€ ์ฟ ํ‚ค ์ƒ์„ฑ

์„ธ์…˜ ์ƒ์„ฑ

Session ์ •๋ณด๋Š” ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ

  • request.getSession(true) : default

    • ์„ธ์…˜์ด ์žˆ์œผ๋ฉด ๊ธฐ์กด ์„ธ์…˜ ๋ฐ˜ํ™˜

    • ์„ธ์…˜์ด ์—†์œผ๋ฉด ์ƒˆ๋กœ์šด ์„ธ์…˜์„ ์ƒ์„ฑํ•ด์„œ ๋ฐ˜ํ™˜

  • request.getSession(false)

    • ์„ธ์…˜์ด ์žˆ์œผ๋ฉด ๊ธฐ์กด ์„ธ์…˜ ๋ฐ˜ํ™˜

    • ์„ธ์…˜์ด ์—†์œผ๋ฉด ์ƒˆ๋กœ์šด ์„ธ์…˜์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , null ๋ฐ˜ํ™˜

์„ธ์…˜ ์กฐํšŒ

์Šคํ”„๋ง์€ ์„ธ์…˜์„ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก @SessionAttribute ์ง€์›

  • ์„ธ์…˜๊ณผ ์„ธ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๋ฒˆ๊ฑฐ๋กœ์šด ๊ณผ์ •์„ ์Šคํ”„๋ง์ด ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌ

์„ธ์…˜ ์ œ๊ฑฐ

์„ธ์…˜ ์ •๋ณด

์„ธ์…˜ ํƒ€์ž„์•„์›ƒ

์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์•„์›ƒ์„ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ข…๋ฃŒํ•  ๊ฒฝ์šฐ ์„ธ์…˜์ด ๋ฌดํ•œ์ • ๋‚จ์•„์žˆ๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ

  • ์„ธ์…˜๊ณผ ๊ด€๋ จ๋œ ์ฟ ํ‚ค(JSESSIONID)๋ฅผ ํƒˆ์ทจ ๋‹นํ–ˆ์„ ๊ฒฝ์šฐ ์˜ค๋žœ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ํ•ด๋‹น ์ฟ ํ‚ค๋กœ ์•…์˜์ ์ธ ์š”์ฒญ์„ ํ•  ์ˆ˜ ์žˆ์Œ.

  • ์„ธ์…˜์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ

    • ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ€ ๋ฌดํ•œํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์„ธ์…˜์—๋Š” ์ตœ์†Œํ•œ์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋ณด๊ด€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”

    • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰(๋ณด๊ด€ํ•œ ๋ฐ์ดํ„ฐ ์šฉ๋Ÿ‰ * ์‚ฌ์šฉ์ž ์ˆ˜)์ด ๊ธ‰๊ฒฉํ•˜๊ฒŒ ๋Š˜์–ด๋‚˜ ์žฅ์•  ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ ์กด์žฌ

    • ์„ธ์…˜ ์‹œ๊ฐ„์„ ๋„ˆ๋ฌด ๊ธธ๊ฒŒ ๊ฐ€์ ธ๊ฐ€๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ๊ณ„์† ๋ˆ„์  ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ ๋‹นํ•œ ์‹œ๊ฐ„์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”

์„ธ์…˜ ์ข…๋ฃŒ ์‹œ์ 

  • ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„์— ์ตœ๊ทผ์— ์š”์ฒญํ•œ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ 30๋ถ„ ์ •๋„๋ฅผ ์œ ์ง€

  • ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉด, ์„ธ์…˜์˜ ์ƒ์กด ์‹œ๊ฐ„์ด 30๋ถ„์œผ๋กœ ๊ณ„์† ์ฆ๊ฐ€

  • HttpSession ์€ ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉ

์„ธ์…˜ ํƒ€์ž„์•„์›ƒ ์„ค์ •

  • ๊ธ€๋กœ๋ฒŒ ์„ค์ •

  • ํŠน์ • ์„ธ์…˜ ๋‹จ์œ„ ์„ค์ •

์„ธ์…˜ ํƒ€์ž„์•„์›ƒ ๋ฐœ์ƒ

  • ์„ธ์…˜์˜ ํƒ€์ž„์•„์›ƒ ์‹œ๊ฐ„์€ ํ•ด๋‹น ์„ธ์…˜๊ณผ ๊ด€๋ จ๋œ JSESSIONID ๋ฅผ ์ „๋‹ฌํ•˜๋Š” HTTP ์š”์ฒญ์ด ์žˆ์œผ๋ฉด ํ˜„์žฌ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์‹œ ์ดˆ๊ธฐํ™”

  • ์ด๋ ‡๊ฒŒ ์ดˆ๊ธฐํ™”๋˜๋ฉด ์„ธ์…˜ ํƒ€์ž„์•„์›ƒ์œผ๋กœ ์„ค์ •ํ•œ ์‹œ๊ฐ„๋™์•ˆ ์„ธ์…˜์„ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

    • session.getLastAccessedTime(): ์ตœ๊ทผ ์„ธ์…˜ ์ ‘๊ทผ ์‹œ๊ฐ„

    • LastAccessedTime ์ดํ›„๋กœ timeout ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด, WAS ๊ฐ€ ๋‚ด๋ถ€์—์„œ ํ•ด๋‹น ์„ธ์…˜ ์ œ๊ฑฐ

Filter, Interceptor

  • ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ(cross-cutting concern): ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์—ฌ๋Ÿฌ ๋กœ์ง์—์„œ ๊ณตํ†ต์œผ๋กœ ๊ด€์‹ฌ์„ ๊ฐ–๋Š” ๊ฒƒ

    • ex. ์—ฌ๋Ÿฌ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€ ํ™•์ธ

  • ์›น๊ณผ ๊ด€๋ จ๋œ ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ๋Š” ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ ๋˜๋Š” ์Šคํ”„๋ง ์ธํ„ฐ์…‰ํ„ฐ ์‚ฌ์šฉ ๊ถŒ์žฅ

    • HttpServletRequest ์ œ๊ณต (HTTP header, URL ์ •๋ณด ๋“ฑ..)

Servlet Filter

ํ•„ํ„ฐ๋Š” ์„œ๋ธ”๋ฆฟ์ด ์ง€์›ํ•˜๋Š” ์ˆ˜๋ฌธ์žฅ.

.

ํ•„ํ„ฐ ํ๋ฆ„

HTTP Request โž” WAS โž” filter โž” (dispatcher)Servlet โž” Controller

  • ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•˜๋ฉด ํ•„ํ„ฐ ํ˜ธ์ถœ ์ดํ›„ ์„œ๋ธ”๋ฆฟ ํ˜ธ์ถœ

    • ํ•„ํ„ฐ์—์„œ ์ ์ ˆํ•˜์ง€ ์•Š์€ ์š”์ฒญ์œผ๋กœ ํŒ๋‹จ๋˜๋ฉด ์„œ๋ธ”๋ฆฟ์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Œ

  • ๋ชจ๋“  ๊ณ ๊ฐ์˜ ์š”์ฒญ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๋ ค๋ฉด ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์ž

  • ํ•„ํ„ฐ๋Š” ํŠน์ • URL ํŒจํ„ด์— ์ ์šฉ ๊ฐ€๋Šฅ โž” /* ์„ค์ • ์‹œ ๋ชจ๋“  ์š”์ฒญ์— ํ•„ํ„ฐ ์ ์šฉ

  • ํ•„ํ„ฐ๋Š” ์ฒด์ธ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์—ฌ๋Ÿฌ ํ•„ํ„ฐ๋กœ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ

.

Filter Interface

  • ํ•„ํ„ฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„/๋“ฑ๋กํ•˜๋ฉด ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•„ํ„ฐ๋ฅผ ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๋กœ ์ƒ์„ฑ/๊ด€๋ฆฌ

    • init() : ํ•„ํ„ฐ ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ โž” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ํ˜ธ์ถœ

    • doFilter() : ๊ณ ๊ฐ์˜ ์š”์ฒญ์ด ์˜ฌ ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ(ํ•„ํ„ฐ ๋กœ์ง ๊ตฌํ˜„)

    • destroy() : ํ•„ํ„ฐ ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ โž” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ํ˜ธ์ถœ

์š”์ฒญ ๋กœ๊ทธ

๋กœ๊ทธ ํ•„ํ„ฐ ๊ตฌํ˜„

  • ํ•„ํ„ฐ ์‚ฌ์šฉ์„ ์œ„ํ•ด ํ•„ํ„ฐ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

ํ•„ํ„ฐ ์„ค์ •

์‹คํ–‰ ๋กœ๊ทธ

์ฐธ๊ณ 

Spring logback mdc (HTTP ์š”์ฒญ ๋กœ๊ทธ์— ๊ฐ ์š”์ฒญ์ž๋ณ„ ์‹๋ณ„์ž๋ฅผ ์ž๋™์œผ๋กœ ๋‚จ๊ธฐ๊ธฐ)

spring logback mdc test

์ธ์ฆ ์ฒดํฌ

๋กœ๊ทธ์ธ ์ฒดํฌ ํ•„ํ„ฐ ๊ตฌํ˜„

ํ•„ํ„ฐ ์„ค์ •

๋กœ๊ทธ์ธ ์„ฑ๊ณต ์‹œ ์ฒ˜๋ฆฌ

.

์ฐธ๊ณ .

์Šคํ”„๋ง ์ธํ„ฐ์…‰ํ„ฐ์—์„œ๋Š” ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ํ•„ํ„ฐ์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ

chain.doFilter(request, response); ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๋‹ค์Œ ํ•„ํ„ฐ ๋˜๋Š” ์„œ๋ธ”๋ฆฟ์„ ํ˜ธ์ถœํ•  ๋•Œ request, response ๋ฅผ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

ServletRequest, ServletResponse ๋ฅผ ๊ตฌํ˜„ํ•œ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋„˜๊ธฐ๋ฉด ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ๋‹ค์Œ ํ•„ํ„ฐ ๋˜๋Š” ์„œ๋ธ”๋ฆฟ์—์„œ ์‚ฌ์šฉ

์Šคํ”„๋ง ์ธํ„ฐ์…‰ํ„ฐ ๐ŸŒž

์„œ๋ธ”๋ฆฟ๊ณผ ๋™์ผํ•˜๊ฒŒ ์›น ๊ด€๋ จ ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ธฐ์ˆ 

  • Spring MVC ๊ตฌ์กฐ์— ํŠนํ™”๋œ ํ•„ํ„ฐ ๊ธฐ๋Šฅ์„ ์ œ๊ณต

    • ํŠน๋ณ„ํžˆ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด ์Šคํ”„๋ง ์ธํ„ฐ์…‰ํ„ฐ ์‚ฌ์šฉ ๊ถŒ์žฅ

  • ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ๋ณด๋‹ค ํŽธ๋ฆฌํ•˜๊ณ , ๋” ์ •๊ตํ•˜๊ณ , ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ง€์›

    • ํ•„ํ„ฐ์™€ ์ ์šฉ ์ˆœ์„œ์™€ ๋ฒ”์œ„, ์‚ฌ์šฉ๋ฒ•์— ์ฐจ์ด

.

์ธํ„ฐ์…‰ํ„ฐ ํ๋ฆ„

HTTP Request โž” WAS โž” Filter โž” Dispatcher Servlet โž” Spring Interceptor โž” Controller

  • Dispatcher Servlet ๊ณผ Controller ์‚ฌ์ด์— ํ˜ธ์ถœ

  • ์Šคํ”„๋ง ์ธํ„ฐ์…‰ํ„ฐ์—์„œ ์ ์ ˆํ•˜์ง€ ์•Š์€ ์š”์ฒญ์œผ๋กœ ํŒ๋‹จ๋˜๋ฉด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Œ

  • ์ •๋ฐ€ํ•œ URL ํŒจํ„ด ์ ์šฉ ๊ฐ€๋Šฅ

Result

.

์ธํ„ฐ์…‰ํ„ฐ ์ธํ„ฐํŽ˜์ด์Šค

  • preHandle(): Controller ํ˜ธ์ถœ ์ „ ํ˜ธ์ถœ(Handler Adapter ํ˜ธ์ถœ ์ „)

    • return true โž” ๋‹ค์Œ์œผ๋กœ ์ง„ํ–‰

    • return false โž” ์ง„ํ–‰ ์ค‘๋‹จ(๋‚˜๋จธ์ง€ ์ธํ„ฐ์…‰ํ„ฐ, ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ ํ˜ธ์ถœ X)

  • postHandle(): Controller ํ˜ธ์ถœ ํ›„ ํ˜ธ์ถœ(Handler Adapter ํ˜ธ์ถœ ํ›„)

    • Controller ์—์„œ ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ postHandle ํ˜ธ์ถœ X

  • afterCompletion(): HTTP ์š”์ฒญ ์ข…๋ฃŒ ํ›„ ํ˜ธ์ถœ(View rendering ํ›„)

    • ์˜ˆ์™ธ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ํ•ญ์ƒ ํ˜ธ์ถœ

    • ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ์˜ˆ์™ธ ์ •๋ณด๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„์„œ ๋กœ๊ทธ ์ถœ๋ ฅ ๊ฐ€๋Šฅ

์š”์ฒญ ๋กœ๊ทธ

์š”์ฒญ ๋กœ๊ทธ ์ธํ„ฐ์…‰ํ„ฐ ๊ตฌํ˜„

HandlerMethod:

  • ํ•ธ๋“ค๋Ÿฌ ์ •๋ณด๋Š” ์–ด๋–ค ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘์„ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€์— ๋”ฐ๋ผ ๋‹ค๋ฆ„

  • ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ @Controller, @RequestMapping ์„ ํ™œ์šฉํ•œ ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘์„ ์‚ฌ์šฉ

    • ์ด ๊ฒฝ์šฐ ํ•ธ๋“ค๋Ÿฌ ์ •๋ณด๋กœ HandlerMethod ๊ฐ€ ๋„˜์–ด์˜จ๋‹ค.

ResourceHttpRequestHandler

  • @Controller ๊ฐ€ ์•„๋‹ˆ๋ผ ์ •์  ๋ฆฌ์†Œ์Šค(/resources/static)๊ฐ€ ํ˜ธ์ถœ ๋˜๋Š” ๊ฒฝ์šฐ

  • ResourceHttpRequestHandler ๊ฐ€ ํ•ธ๋“ค๋Ÿฌ ์ •๋ณด๋กœ ๋„˜์–ด์˜ค๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ž…์— ๋”ฐ๋ผ์„œ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”

postHandle, afterCompletion

  • ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ postHandle ๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ข…๋ฃŒ ๋กœ๊ทธ๋ฅผ afterCompletion ์—์„œ ์‹คํ–‰

.

์ธํ„ฐ์…‰ํ„ฐ ๋“ฑ๋ก

์‹คํ–‰ ๋กœ๊ทธ

์ฐธ๊ณ 

์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” URL ๊ฒฝ๋กœ๋Š” ์„œ๋ธ”๋ฆฟ ๊ธฐ์ˆ ์ด ์ œ๊ณตํ•˜๋Š” URL ๊ฒฝ๋กœ์™€ ์™„์ „ํžˆ ๋‹ค๋ฅด๋‹ค. ๋”์šฑ ์ž์„ธํ•˜๊ณ , ์„ธ๋ฐ€ํ•˜๊ฒŒ ์„ค์ • ๊ฐ€๋Šฅํ•˜๋‹ค.

PathPattern Docs

์ธ์ฆ ์ฒดํฌ

๋กœ๊ทธ์ธ ์ฒดํฌ ์ธํ„ฐ์…‰ํ„ฐ

๋กœ๊ทธ์ธ ์ฒดํฌ ์ธํ„ฐ์…‰ํ„ฐ ๋“ฑ๋ก

์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ์— ๋น„ํ•ด ์Šคํ”„๋ง ์ธํ„ฐ์…‰ํ„ฐ๊ฐ€ ๋”์šฑ ์‚ฌ์šฉ๋ฒ•์ด ํŽธ๋ฆฌ

ํŠน๋ณ„ํ•œ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋ฉด ์ธํ„ฐ์…‰ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์ž.

ArgumentResolver ํ™œ์šฉ ๐ŸŒž

Controller Method ์˜ ์ธ์ž๋กœ ์ž„์˜์˜ ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์ œ๊ณต

Login Annotation ์ƒ์„ฑ

  • @Target : annotation ๋Œ€์ƒ ์ง€์ •

  • @Retention : ์–ด๋А ์‹œ์ ๊นŒ์ง€ ์–ด๋…ธํ…Œ์ด์…˜์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ ธ๊ฐˆ์ง€ ์„ค์ •

.

@Login ์ ์šฉ

.

HandlerMethodArgumentResolver ๊ตฌํ˜„

.

ArgumentResolver ์„ค์ •

ArgumentResolver ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๊ณตํ†ต ์ž‘์—…์ด ํ•„์š”ํ•  ๋•Œ ์• ๋…ธํ…Œ์ด์…˜์œผ๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋”์šฑ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

Last updated