Skip to content

Latest commit

ย 

History

History
316 lines (271 loc) ยท 22.3 KB

spring.md

File metadata and controls

316 lines (271 loc) ยท 22.3 KB

9. Spring

๐Ÿ“– Contents


์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋ž€

  • ์ž๋ฐ” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ฐœ๋ฐœ์„ ํŽธํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒฝ๋Ÿ‰๊ธ‰ ์˜คํ”ˆ์†Œ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ
  • Lightweight Java Applicaion Framework
    • ๋ชฉํ‘œ: POJO ๊ธฐ๋ฐ˜์˜ Enterprise Application ๊ฐœ๋ฐœ์„ ์‰ฝ๊ณ  ํŽธํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
    • Java Application์„ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ํ•˜๋ถ€๊ตฌ์กฐ(Infrastructure)๋ฅผ ํฌ๊ด„์ ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.
    • Spring์ด ํ•˜๋ถ€๊ตฌ์กฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋Š” Application ๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ„๋‹จํžˆ ์Šคํ”„๋ง(Spring)์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.
  • ๋™์ ์ธ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  • ๋Œ€ํ•œ๋ฏผ๊ตญ ๊ณต๊ณต๊ธฐ๊ด€์˜ ์›น ์„œ๋น„์Šค ๊ฐœ๋ฐœ ์‹œ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๋Š” ์ „์ž ์ •๋ถ€ ํ‘œ์ค€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ 

โซTop โ†ฉ๏ธBack โ„น๏ธHome

Spring Spring MVC Spring Boot์˜ ์ฐจ์ด

  • Spring *
  • Spring MVC
  • Spring Boot

โซTop โ†ฉ๏ธBack โ„น๏ธHome

Bean์ด๋ž€

  • ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ๊ฐ์ฒด
  • ์ปจํ…Œ์ด๋„ˆ์— ๋‹ด๊ฒจ์žˆ์œผ๋ฉฐ, ํ•„์š”ํ•  ๋•Œ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉ
  • @Bean ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ xml ์„ค์ •์„ ํ†ตํ•ด ์ผ๋ฐ˜ ๊ฐ์ฒด๋ฅผ Bean์œผ๋กœ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๊ณ , Bean์œผ๋กœ ๋“ฑ๋ก๋œ ๊ฐ์ฒด๋Š” ์‰ฝ๊ฒŒ ์ฃผ์ž…ํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

Bean ์ƒ๋ช…์ฃผ๊ธฐ

  • ๊ฐ์ฒด ์ƒ์„ฑ -> ์˜์กด ์„ค์ • -> ์ดˆ๊ธฐํ™” -> ์‚ฌ์šฉ -> ์†Œ๋ฉธ
  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ
  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™” ์‹œ ๋นˆ ๊ฐ์ฒด ์ƒ์„ฑ, ์˜์กด ๊ฐ์ฒด ์ฃผ์ž… ๋ฐ ์ดˆ๊ธฐํ™”
  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ ์‹œ ๋นˆ ๊ฐ์ฒด ์†Œ๋ฉธ

Bean ์ดˆ๊ธฐํ™” ๋ฐฉ๋ฒ• 3๊ฐ€์ง€

  1. ๋นˆ ์ดˆ๊ธฐํ™” ๋ฉ”์†Œ๋“œ์— @PostConstruct ์‚ฌ์šฉ
  • ๋นˆ ์ •์˜ xml์— <context:annotation-config></context:annotation-config> ์ถ”๊ฐ€
  1. InitializingBean ์ธํ„ฐํŽ˜์ด์Šค์˜ afterPropertiesSet() ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋“œ
  2. ์ปค์Šคํ…€ init() ๋ฉ”์†Œ๋“œ ์ •์˜
  • ๋นˆ ์ •์˜ xml์— init-method ์†์„ฑ์œผ๋กœ ๋ฉ”์†Œ๋“œ ์ด๋ฆ„ ์ง€์ •
  • ๋˜๋Š” ๋นˆ ์ดˆ๊ธฐํ™” ๋ฉ”์†Œ๋“œ์— @Bean(init-method="init") ์ง€์ •

Bean ์†Œ๋ฉธ ๋ฐฉ๋ฒ• 3๊ฐ€์ง€

  1. ๋นˆ ์†Œ๋ฉธ ๋ฉ”์†Œ๋“œ์— @PreDestroy ์‚ฌ์šฉ
  • ๋นˆ ์ •์˜ xml์— <context:annotation-config></context:annotation-config> ์ถ”๊ฐ€
  1. DisposableBean ์ธํ„ฐํŽ˜์ด์Šค์˜ destroy() ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋“œ
  2. ์ปค์Šคํ…€ destroy() ๋ฉ”์†Œ๋“œ ์ •์˜
  • ๋นˆ ์ •์˜ xml์— destroy-method ์†์„ฑ์œผ๋กœ ๋ฉ”์†Œ๋“œ ์ด๋ฆ„ ์ง€์ •
๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•
  • 1๋ฒˆ ๋ฐฉ๋ฒ• (๊ถŒ์žฅ)
    • ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์ด ๊ฐ„๊ฒฐํ•˜๋ฉฐ ์ฝ”๋“œ์—์„œ ์ดˆ๊ธฐํ™” ๋ฉ”์†Œ๋“œ๊ฐ€ ์กด์žฌํ•จ์„ ์‰ฝ๊ฒŒ ํŒŒ์•… ๊ฐ€๋Šฅํ•˜์—ฌ xml ์„ค์ • ๋ฐฉ๋ฒ•๋ณด๋‹ค ์ง๊ด€์ 
  • 2๋ฒˆ ๋ฐฉ๋ฒ• (์ง€์–‘)
    • ๋นˆ ์ฝ”๋“œ์— ์Šคํ”„๋ง ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋…ธ์ถœ๋˜์–ด ๊ถŒ์žฅํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ฐ„๊ฒฐํ•˜์ง€ ์•Š์€ ๋ฐฉ๋ฒ•
  • 3๋ฒˆ ๋ฐฉ๋ฒ•
    • ๋นˆ ์ฝ”๋“œ์— ์Šคํ”„๋ง ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋…ธ์ถœ๋˜์ง€ ์•Š์ง€๋งŒ, ์ฝ”๋“œ๋งŒ์œผ๋กœ ์ดˆ๊ธฐํ™” ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์—ฌ๋ถ€๋ฅผ ์•Œ ์ˆ˜ ์—†๋Š” ๋‹จ์ 

Bean Scope

  • singleton (default)
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Bean ๋“ฑ๋ก ์‹œ singleton scope๋กœ ๋“ฑ๋ก
    • Spring IoC ์ปจํ…Œ์ด๋„ˆ ๋‹น ํ•œ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์ƒ์„ฑ
    • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ Bean ๊ฐ€์ ธ๋‹ค ์ฃผ์ž…ํ•  ๋•Œ ํ•ญ์ƒ ๊ฐ™์€ ๊ฐ์ฒด ์‚ฌ์šฉ
    • ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ์œ ๋ฆฌ
  • prototype
    • ์ปจํ…Œ์ด๋„ˆ์—์„œ Bean ๊ฐ€์ ธ๋‹ค ์“ธ ๋•Œ ํ•ญ์ƒ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค ์‚ฌ์šฉ
    • ๋ชจ๋“  ์š”์ฒญ์—์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด ์ƒ์„ฑ
    • gc์— ์˜ํ•ด Bean ์ œ๊ฑฐ
  • request
    • Bean ๋“ฑ๋ก ์‹œ ํ•˜๋‚˜์˜ HTTP request ์ƒ๋ช…์ฃผ๊ธฐ ์•ˆ์— ๋‹จ ํ•˜๋‚˜์˜ Bean๋งŒ ์กด์žฌ
    • ๊ฐ๊ฐ์˜ HTTP ์š”์ฒญ์€ ๊ณ ์œ  Bean ๊ฐ์ฒด ๋ณด์œ 
    • Spring MVC Web Application์—์„œ ์‚ฌ์šฉ
  • session
    • ํ•˜๋‚˜์˜ HTTP Session ์ƒ๋ช…์ฃผ๊ธฐ ์•ˆ์— ๋‹จ ํ•˜๋‚˜์˜ Bean๋งŒ ์กด์žฌ
    • Spring MVC Web Application์—์„œ ์‚ฌ์šฉ
  • global session
    • ํ•˜๋‚˜์˜ global HTTP Session ์ƒ๋ช…์ฃผ๊ธฐ ์•ˆ์— ํ•œ ๊ฐœ์˜ Bean ์ง€์ •
    • Spring MVC Web Application์—์„œ ์‚ฌ์šฉ
  • application
    • ServletContext ์ƒ๋ช…์ฃผ๊ธฐ ์•ˆ์— ํ•œ ๊ฐœ์˜ Bean ์ง€์ •
    • Spring MVC Web Application์—์„œ ์‚ฌ์šฉ

โซTop โ†ฉ๏ธBack โ„น๏ธHome

Container๋ž€

  • ์ปจํ…Œ์ด๋„ˆ(Container)๋Š” ๋ณดํ†ต ์ธ์Šคํ„ด์Šค์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋“ค์—๊ฒŒ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋„๋กํ•˜๋Š” ๊ฒƒ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์‹œ๋งํ•ด, ์ปจํ…Œ์ด๋„ˆ๋ž€ ๋‹น์‹ ์ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ์˜ ์ฒ˜๋ฆฌ๊ณผ์ •์„ ์œ„์ž„๋ฐ›์€ ๋…๋ฆฝ์ ์ธ ์กด์žฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” ์ ์ ˆํ•œ ์„ค์ •๋งŒ ๋˜์–ด์žˆ๋‹ค๋ฉด ๋ˆ„๊ตฌ์˜ ๋„์›€์—†์ด๋„ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์Šค์Šค๋กœ ์ฐธ์กฐํ•œ ๋’ค ์•Œ์•„์„œ ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ์„ ์ปจํŠธ๋กคํ•ด์ค€๋‹ค.

  • Spring ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค๊ณผ ๋‹ฌ๋ฆฌ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด IoC ํŒจํ„ด์ด๋‹ค.

โซTop โ†ฉ๏ธBack โ„น๏ธHome

IoC๋ž€

  • IoC(Inversion of Control, ์ œ์–ด์˜ ์—ญ์ „)๋ž€
    • ๊ฐ์ฒด์˜ ์ƒ์„ฑ์—์„œ๋ถ€ํ„ฐ ์ƒ๋ช…์ฃผ๊ธฐ์˜ ๊ด€๋ฆฌ๊นŒ์ง€ ๋ชจ๋“  ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ œ์–ด๊ถŒ์ด ๋ฐ”๋€ ๊ฒƒ์„ ์˜๋ฏธ, ๋˜๋Š” ์ œ์–ด ๊ถŒํ•œ์„ ์ž์‹ ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋Œ€์ƒ์—๊ฒŒ ์œ„์ž„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
    • ์ด ๋ฐฉ์‹์€ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ๊ฐœ๋ฐœ์ž๋Š” ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ๊ฐœ๋ฐœํ•ด์„œ ๋ผ์›Œ ๋„ฃ๊ธฐ์˜ ํ˜•ํƒœ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์— ํ•„์š”ํ•œ ๋ถ€ํ’ˆ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์กฐ๋ฆฝํ•˜๋Š” ๋ฐฉ์‹์˜ ๊ฐœ๋ฐœ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.
    • ์ด๋ ‡๊ฒŒ ์กฐ๋ฆฝ๋œ ์ฝ”๋“œ์˜ ์ตœ์ข… ํ˜ธ์ถœ์€ ๊ฐœ๋ฐœ์ž์— ์˜ํ•ด์„œ ์ œ์–ด๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋‚ด๋ถ€์—์„œ ๊ฒฐ์ •๋œ ๋Œ€๋กœ ์ด๋ค„์ง€๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ํ˜„์ƒ์„ "์ œ์–ด์˜ ์—ญ์ „"์ด๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.
  • Spring์—์„œ์˜ IoC
    • Spring ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ง€์›ํ•˜๋Š” Ioc Container๋Š” ์šฐ๋ฆฌ๋“ค์ด ํ”ํžˆ ๊ฐœ๋ฐœํ•˜๊ณ  ์‚ฌ์šฉํ•ด์™”๋˜ ์ผ๋ฐ˜ POJO(Plain Old Java Object)์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋“ค์—๊ฒŒ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค.
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ฐจ์ด
    • IoC์˜ ๊ฐœ๋…์ด ์ ์šฉ๋˜์—ˆ๋‚˜์˜ ์ฐจ์ด
    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ๋ฆ„์„ ์ง์ ‘ ์ œ์–ดํ•œ๋‹ค. ๋‹จ์ง€ ๋™์ž‘ํžˆ๋Š” ์ค‘์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์„ ๋•Œ ๋Šฅ๋™์ ์œผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‹œ์šฉํ•  ๋ฟ์ด๋‹ค.
    • ๋ฐ˜๋ฉด์— ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ฑฐ๊พธ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. ๋ณดํ†ต ํ”„๋ ˆ์ž„์›Œํฌ ์œ„์— ๊ฐœ๋ฐœํ•œ ํด๋ž˜์Šค๋ฅผ ๋“ฑ๋กํ•ด๋‘๊ณ , ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํ๋ฆ„์„ ์ฃผ๋„ํžˆ๋Š” ์ค‘์— ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ์‹œ์šฉํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์ด๋‹ค.

โซTop โ†ฉ๏ธBack โ„น๏ธHome

MVC ํŒจํ„ด์ด๋ž€

โซTop โ†ฉ๏ธBack โ„น๏ธHome

DI๋ž€

  • DI?
    • Dependency Injection, ์˜์กด์„ฑ ์ฃผ์ž…
    • Dependency Injection์€ Spring ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ง€์›ํ•˜๋Š” IoC์˜ ํ˜•ํƒœ์ด๋‹ค.
    • DI๋Š” ํด๋ž˜์Šค ์‚ฌ์ด์˜ ์˜์กด๊ด€๊ณ„๋ฅผ ๋นˆ ์„ค์ • ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ž๋™์ ์œผ๋กœ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ๊ฐœ๋ฐœ์ž๋“ค์€ ์ œ์–ด๋ฅผ ๋‹ด๋‹นํ•  ํ•„์š”์—†์ด ๋นˆ ์„ค์ • ํŒŒ์ผ์— ์˜์กด๊ด€๊ณ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ์ •๋ณด๋งŒ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
      • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ํ๋ฆ„์˜ ์ฃผ์ฒด๊ฐ€ ๋˜์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์— ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๊ฒƒ.
  • ์˜์กด์„ฑ(Dependency)
    • ํ˜„์žฌ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์™€ ์ƒํ˜ธ์ž‘์šฉ(์ฐธ์กฐ)ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์„ ํ˜„์žฌ ๊ฐ์ฒด์˜ ์˜์กด์ด๋ผ ํ•œ๋‹ค.
  • ์˜์กด์„ฑ์ด ์œ„ํ—˜ํ•œ ์ด์œ 
    • ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์ด ๋ฐ”๋€Œ๋ฉด ์˜์กดํ•œ ๋‹ค๋ฅธ ๋ชจ๋“ˆ๊นŒ์ง€ ๋ณ€๊ฒฝ๋˜์•ผ ํ•œ๋‹ค.
    • ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ์–ดํ”Œ์„ ๋งŒ๋“ค ๋•Œ ์˜์กด์„ฑ์ด ์žˆ์œผ๋ฉด ์œ ๋‹›ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์ด ์–ด๋ ต๋‹ค.
    • ์œ ๋‹›ํ…Œ์ŠคํŠธ์˜ ๋ชฉ์  ์ž์ฒด๊ฐ€ ๋‹ค๋ฅธ ๋ชจ๋“ˆ๋กœ๋ถ€ํ„ฐ ๋…๋ฆฝ์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์„ ์š”๊ตฌํ•œ๋‹ค.
  • DI์˜ ํŠน์ง•
    • โ€˜newโ€™๋ฅผ ์‚ฌ์šฉํ•ด ๋ชจ๋“ˆ ๋‚ด์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์„ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ๊ฐ์ฒด ์ƒ์„ฑ์€ ๋‹ค๋ฅธ ๊ณณ์—์„œ ํ•˜๊ณ , ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ๋œ๋‹ค.
    • ์˜์กด์„ฑ ์ฃผ์ž…์€ Inversion of Control ๊ฐœ๋…์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ๋‹ค. ํด๋ž˜์Šค๊ฐ€ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์˜์กด์„ฑ์„ ๊ฐ€์ ธ์•ผํ•œ๋‹ค.
  • DI๊ฐ€ ํ•„์š”ํ•œ ์ด์œ (DI์˜ ์žฅ์ )
    • ํด๋ž˜์Šค๋ฅผ ์žฌ์‚ฌ์šฉ ํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ด๊ณ , ๋‹ค๋ฅธ ํด๋ž˜์Šค์™€ ๋…๋ฆฝ์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ํŠน์ • ๊ตฌํ˜„์ด ์•„๋‹Œ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ๋งค์šฐ ํšจ๊ณผ์ 
  • DI์˜ ์„ธ๊ฐ€์ง€ ๋ฐฉ๋ฒ•
    • Contructor Injection : ์ƒ์„ฑ์ž ์‚ฝ์ž…
    • Method(Setter) Injection : ๋ฉ”์†Œ๋“œ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์‚ฝ์ž…
    • Field Injection : ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์‚ฝ์ž…

โซTop โ†ฉ๏ธBack โ„น๏ธHome

AOP๋ž€

  • AOP(Aspect Oriented Programming)๋ž€

    • Aspect Oriented Programming, ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
    • ์–ด๋–ค ๋กœ์ง์„ ๊ธฐ์ค€์œผ๋กœ ํ•ต์‹ฌ ๊ด€์ ๊ณผ ๋ถ€๊ฐ€ ๊ด€์ ์„ ๋‚˜๋ˆ„๊ณ , ๊ด€์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋ชจ๋“ˆํ™”ํ•˜๋Š” ๊ฒƒ
    • ํ•ต์‹ฌ ๊ด€์ ์€ ์ฃผ๋กœ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
    • ๋ถ€๊ฐ€ ๊ด€์ ์€ ํ•ต์‹ฌ ๋กœ์ง์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ, ๋กœ๊น…, ํŒŒ์ผ ์ž…์ถœ๋ ฅ ๋“ฑ
  • AOP ๋ชฉ์ 

    • ์†Œ์Šค ์ฝ”๋“œ์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ์“ฐ๋Š” ์ฝ”๋“œ(= ํฉ์–ด์ง„ ๊ด€์‹ฌ์‚ฌ, Concern)๋ฅผ Aspect๋กœ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ํ•ต์‹ฌ ๋กœ์ง์—์„œ ๋ถ„๋ฆฌ ๋ฐ ์žฌ์‚ฌ์šฉ
    • ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ต์‹ฌ ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ
    • ์ฃผ๋กœ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ๋ชจ๋“ˆํ™”
  • AOP ์ฃผ์š” ์šฉ์–ด

    • Aspect
      • ํฉ์–ด์ง„ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ชจ๋“ˆํ™” ํ•œ ๊ฒƒ
      • Advice + PointCut
    • Target
      • Aspect๋ฅผ ์ ์šฉํ•˜๋Š” ๊ณณ(ํด๋ž˜์Šค, ๋ฉ”์†Œ๋“œ ๋“ฑ)
    • Advice
      • ์‹ค์งˆ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋‹ด์€ ๊ตฌํ˜„์ฒด
    • JoinPoint
      • Advice๊ฐ€ ์ ์šฉ๋  ์œ„์น˜
      • ๋ผ์–ด๋“ค ์ˆ˜ ์žˆ๋Š” ์ง€์ 
      • ex. ๋ฉ”์†Œ๋“œ ์ง„์ž… ์‹œ, ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์‹œ, ํ•„๋“œ์—์„œ ๊ฐ’ ๊บผ๋‚ผ ๋•Œ ๋“ฑ
    • PointCut
      • JoinPoint์˜ ์ƒ์„ธ ์ŠคํŽ™ ์ •์˜
      • ๋”์šฑ ๊ตฌ์ฒด์ ์œผ๋กœ Advice๊ฐ€ ์‹คํ–‰๋  ์ง€์  ์ง€์ •
    • Weaving
      • PointCut์— ์˜ํ•ด ๊ฒฐ์ •๋œ Target์˜ JoinPoint์— Advice๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ณผ์ •
  • AOP ์ ์šฉ ๋ฐฉ๋ฒ•

    1. ์ปดํŒŒ์ผ ์‹œ ์ ์šฉ
      • AspectJ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
      • ์ž๋ฐ” ํŒŒ์ผ์„ ํด๋ž˜์Šค ํŒŒ์ผ๋กœ ๋งŒ๋“ค ๋•Œ Advice ์†Œ์Šค๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์กฐ์ž‘๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•
    2. ๋กœ๋“œ ์‹œ ์ ์šฉ
      • AspectJ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
      • ์ปดํŒŒ์ผ ํ›„ ์ปดํŒŒ์ผ ๋œ ํด๋ž˜์Šค๋ฅผ ๋กœ๋”ฉํ•˜๋Š” ์‹œ์ ์— Advice ์†Œ์Šค๋ฅผ ๋ผ์›Œ๋„ฃ๋Š” ๋ฐฉ๋ฒ•
    3. ๋Ÿฐํƒ€์ž„ ์‹œ ์ ์šฉ
      • Spring AOP๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
      • ์Šคํ”„๋ง์€ ๋Ÿฐํƒ€์ž„ ์‹œ Bean ์ƒ์„ฑ
      • A๋ผ๋Š” Bean ๋งŒ๋“ค ๋•Œ A๋ผ๋Š” ํƒ€์ž…์˜ ํ”„๋ก์‹œ Bean๋„ ์ƒ์„ฑํ•˜๊ณ , ํ”„๋ก์‹œ Bean์ด A์˜ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์ง์ „์— Advice ์†Œ์Šค๋ฅผ ํ˜ธ์ถœํ•œ ํ›„ A์˜ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
  • Spring AOP ํŠน์ง•

    • ํ”„๋ก์‹œ ํŒจํ„ด ๊ธฐ๋ฐ˜์˜ AOP ๊ตฌํ˜„์ฒด
      • Target ๊ฐ์ฒด์— ๋Œ€ํ•œ ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ค์–ด ์ œ๊ณต
      • Target์„ ๊ฐ์‹ธ๋Š” ํ”„๋ก์‹œ๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ ์ƒ์„ฑ
      • ์ ‘๊ทผ ์ œ์–ด ๋ฐ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋ฅผ ์œ„ํ•ด ํ”„๋ก์‹œ ๊ฐ์ฒด ์‚ฌ์šฉ
    • ํ”„๋ก์‹œ๊ฐ€ Target ๊ฐ์ฒด์˜ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„ Advice ์ˆ˜ํ–‰ ์ „/ํ›„ ํ•ต์‹ฌ ๋กœ์ง ํ˜ธ์ถœ
    • ์Šคํ”„๋ง Bean์—๋งŒ AOP ์ ์šฉ ๊ฐ€๋Šฅ
      • ๋ฉ”์†Œ๋“œ ์กฐ์ธ ํฌ์ธํŠธ๋งŒ ์ง€์›ํ•˜์—ฌ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ์ ์—๋งŒ Advice ์ ์šฉ ๊ฐ€๋Šฅ
    • ๋ชจ๋“  AOP๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋Š” ์•Š์œผ๋ฉฐ ์Šคํ”„๋ง IoC์™€ ์—ฐ๋™ํ•˜์—ฌ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐ์ข… ๋ฌธ์ œ(์ค‘๋ณต ์ฝ”๋“œ, ํ”„๋ก์‹œ ํด๋ž˜์Šค ์ž‘์„ฑ์˜ ๋ฒˆ๊ฑฐ๋กœ์›€, ๊ฐ์ฒด ๊ฐ„ ๊ด€๊ณ„ ๋ณต์žก๋„ ์ฆ๊ฐ€)์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ… ์ง€์› ๋ชฉ์ 

โซTop โ†ฉ๏ธBack โ„น๏ธHome

POJO

๋ฒˆ์—ญํ•˜๋ฉด 'ํ‰๋ฒ”ํ•œ ๊ตฌ์‹ ์ž๋ฐ” ๊ฐ์ฒด'. ์ฆ‰ ํ”„๋ ˆ์ž„์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ํ™•์žฅํ•˜์ง€ ์•Š๋Š” ๋‹จ์ˆœํ•œ ํด๋ž˜์Šค.

  • EJB์™€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์„œ๋น„์Šค
    • EJB(Enterprise JavaBean)
    • ๊ธฐ์—…์—…๋ฌด์ฒ˜๋ฆฌ์˜ IT์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์˜์กด๋„๊ฐ€ ๋†’์•„์ง€๋ฉด์„œ ์‹œ์Šคํ…œ์ด ๋‹ค๋ค„์•ผ ํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ž์ฒด๊ฐ€ ์ ์ฐจ ๋ณต์žกํ•ด์ง€๊ณ , ๋งŽ์€ ์‚ฌ์šฉ์ž์˜ ์ฒ˜๋ฆฌ์š”๊ตฌ๋ฅผ ๋น ๋ฅด๊ฒŒ ์•ˆ์ •์ ์ด๋ฉด์„œ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ์œ ์ง€ํ•˜๊ธฐ์œ„ํ•ด ํ•„์š”ํ•œ ๋กœ์šฐ๋ ˆ๋ฒจ์˜ ๊ธฐ์ˆ ์ ์ธ(ํŠธ๋žœ์ ์…˜ ์ฒ˜๋ฆฌ, ์ƒํƒœ๊ด€๋ฆฌ, ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ, ๋ฆฌ์†Œ์Šคํ’€๋ง, ๋ณด์•ˆ๋“ฑ) ์ฒ˜๋ฆฌ๊ฐ€ ์š”๊ตฌ๋๋‹ค.
    • EJB์˜ ๋น„์ „์€ 'EJB๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž๋Š” ๋กœ์šฐ๋ ˆ๋ฒจ์˜ ๊ธฐ์ˆ ๋“ค์— ๊ด€์‹ฌ์„ ๊ฐ€์งˆ ํ•„์š”๋„ ์—†๋‹ค.' ์˜€์ง€๋งŒ, ๊ฒฐ๋ก ์ ์œผ๋ก  ๋ถˆํ•„์š”ํ• ๋งŒํผ ๊ณผ๋„ํ•œ ์—”์ง€๋‹ˆ์–ด๋ง์œผ๋กœ ์‹คํŒจํ•œ ๋Œ€ํ‘œ์ ์ธ ์ผ€์ด์Šค๊ฐ€ ๋˜์—ˆ๋‹ค.
      • ๊ฐ€์žฅ ์ตœ์•…์˜ ๋ฌธ์ œ์ ์€ EJB ์ŠคํŽ™์„ ๋”ฐ๋ฅด๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ์˜ค๋ธŒ์ ํŠธ๋“ค์€ ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ํŠน์ง•๊ณผ ์žฅ์ ์„ ํฌ๊ธฐํ•ด์•ผํ–ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. EJB ๋นˆ์€ ์ƒ์†๊ณผ ๋‹คํ˜•์„ฑ๋“ฑ์˜ ํ˜œํƒ์„ ์ œ๋Œ€๋กœ ๋ˆ„๋ฆด ์ˆ˜ ์—†์—ˆ๋‹ค.
    • ๋งˆํ‹ด ํŒŒ์šธ๋Ÿฌ๋Š” EJB์™€ ๊ฐ™์€ ์ž˜๋ชป ์„ค๊ณ„๋œ ๊ณผ๋„ํ•œ ๊ธฐ์ˆ ์„ ํ”ผํ•˜๊ณ , ๊ฐ์ฒด์ง€ํ–ฅ ์›๋ฆฌ์— ๋”ฐ๋ผ ๋งŒ๋“ค์–ด์ง„ ์ž๋ฐ” ์–ธ์–ด์˜ ๊ธฐ๋ณธ์— ์ถฉ์‹คํ•˜๊ฒŒ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” ์ผ๋ช… POJO ๋ฐฉ์‹์œผ๋กœ ๋Œ์•„์„œ์•ผ ํ•œ๋‹ค๊ณ  ์ง€์ ํ–ˆ๋‹ค.
  • ํŠน์ง•
    • Java์—์„œ ์ œ๊ณตํ•˜๋Š” API ์™ธ์— ์ข…์†๋˜์ง€ ์•Š์Œ
    • ํŠน์ • ๊ทœ์•ฝ, ํ™˜๊ฒฝ์— ์ข…์†๋˜์ง€ ์•Š์Œ
  • ํ™˜๊ฒฝ์— ์ข…์†๋˜์ง€ ์•Š๋Š” ๊ฒƒ์˜ ์žฅ์ 
    • ์ฝ”๋“œ์˜ ๊ฐ„๊ฒฐํ•จ (๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ํŠน์ • ํ™˜๊ฒฝ/low ๋ ˆ๋ฒจ ์ข…์†์ ์ธ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฏ€๋กœ ๋‹จ์ˆœ)
    • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ํŠน์ • ํ™˜๊ฒฝ์ด ๋ถ„๋ฆฌ๋˜๋ฏ€๋กœ ๋‹จ์ˆœํ•จ
    • ์ž๋™ํ™” ํ…Œ์ŠคํŠธ์— ์œ ๋ฆฌ (ํ™˜๊ฒฝ ์ข…์†์ ์ธ ์ฝ”๋“œ๋Š” ์ž๋™ํ™” ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ต์ง€๋งŒ, POJO๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ๋งค์šฐ ์œ ์—ฐ)
    • ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ ์ž์œ ๋กœ์šด ์‚ฌ์šฉ

โซTop โ†ฉ๏ธBack โ„น๏ธHome

DAO์™€ DTO์˜ ์ฐจ์ด

  • DAO(Data Access Object)
    • DB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ „๋‹ดํ•˜๋„๋ก ๋งŒ๋“  ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค.
    • DB์— ์ ‘๊ทผ์„ ํ•˜๊ธฐ์œ„ํ•œ ๋กœ์ง๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ ํ•œ๋‹ค.
  • DTO(Data Transfer Object)
    • ๊ณ„์ธต๊ฐ„ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•œ ์ž๋ฐ”๋นˆ์ฆˆ๋ฅผ ๋งํ•œ๋‹ค.
      • ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ๊ณ„์ธต์€ Controller, View, Business Layer, Persistent Layer ์ด๋‹ค.
    • ์ผ๋ฐ˜์ ์ธ DTO๋Š” ๋กœ์ง์„ ๊ฐ–๊ณ  ์žˆ์ง€ ์•Š๋Š” ์ˆœ์ˆ˜ํ•œ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด์ด๋ฉฐ, ์†์„ฑ๊ณผ ๊ทธ ์†์„ฑ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ getter, setter ๋ฉ”์†Œ๋“œ๋งŒ ๊ฐ€์ง„ ํด๋ž˜์Šค์ด๋‹ค.
    • VO(Value Object) ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.
      • DTO์™€ ๋™์ผํ•œ ๊ฐœ๋…์ด์ง€๋งŒ read only ์†์„ฑ์„ ๊ฐ€์ง„๋‹ค.

โซTop โ†ฉ๏ธBack โ„น๏ธHome

Spring JDBC๋ฅผ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ

โซTop โ†ฉ๏ธBack โ„น๏ธHome

Filter์™€ Interceptor ์ฐจ์ด

Filter, Interceptor

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ(๊ณตํ†ต ๋ถ€๋ถ„)์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก Spring์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ

Filter, Interceptor ํ๋ฆ„

filterInterceptor

  1. ์„œ๋ฒ„ ์‹คํ–‰ ์‹œ Servlet์ด ์˜ฌ๋ผ์˜ค๋Š” ๋™์•ˆ init ํ›„ doFilter ์‹คํ–‰
  2. Dispatcher Servlet์„ ์ง€๋‚˜์ณ Interceptor์˜ preHandler ์‹คํ–‰
  3. ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ฑฐ์ณ ๋‚ด๋ถ€ ๋กœ์ง ์ˆ˜ํ–‰ ํ›„, Interceptor์˜ postHandler ์‹คํ–‰
  4. doFilter ์‹คํ–‰
  5. Servlet ์ข…๋ฃŒ ์‹œ destroy

Filter ํŠน์ง•

  • Dispatcher Servlet ์ด์ „์— ์ˆ˜ํ–‰๋˜๊ณ , ์‘๋‹ต ์ฒ˜๋ฆฌ์— ๋Œ€ํ•ด์„œ๋„ ๋ณ€๊ฒฝ ๋ฐ ์กฐ์ž‘ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ
    • WAS ๋‚ด์˜ ApplicationContext์—์„œ ๋“ฑ๋ก๋œ ํ•„ํ„ฐ๊ฐ€ ์‹คํ–‰
  • WAS ๊ตฌ๋™ ์‹œ FilterMap์ด๋ผ๋Š” ๋ฐฐ์—ด์— ๋“ฑ๋ก๋˜๊ณ , ์‹คํ–‰ ์‹œ Filter chain์„ ๊ตฌ์„ฑํ•˜์—ฌ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰
  • Spring Context ์™ธ๋ถ€์— ์กด์žฌํ•˜์—ฌ Spring๊ณผ ๋ฌด๊ด€ํ•œ ์ž์›์— ๋Œ€ํ•ด ๋™์ž‘
  • ์ผ๋ฐ˜์ ์œผ๋กœ web.xml์— ์„ค์ •
  • ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ Web Application์—์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
  • ex. ์ธ์ฝ”๋”ฉ ๋ณ€ํ™˜, XSS ๋ฐฉ์–ด ๋“ฑ
  • ์‹คํ–‰ ๋ฉ”์†Œ๋“œ
    • init() : ํ•„ํ„ฐ ์ธ์Šคํ„ด์Šค ์ดˆ๊ธฐํ™”
    • doFilter() : ์‹ค์ œ ์ฒ˜๋ฆฌ ๋กœ์ง
    • destroy() : ํ•„ํ„ฐ ์ธ์Šคํ„ด์Šค ์ข…๋ฃŒ

Interceptor ํŠน์ง•

  • Dispatcher Servlet ์ดํ›„ Controller ํ˜ธ์ถœ ์ „, ํ›„์— ๋ผ์–ด๋“ค์–ด ๊ธฐ๋Šฅ ์ˆ˜ํ–‰
  • Spring Context ๋‚ด๋ถ€์—์„œ Controller์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€์—ฌํ•˜๋ฉฐ ๋ชจ๋“  Bean์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ์ผ๋ฐ˜์ ์œผ๋กœ servlet-context.xml์— ์„ค์ •
  • ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ @ControllerAdvice์—์„œ @ExceptionHandler๋ฅผ ์‚ฌ์šฉํ•ด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
  • ex. ๋กœ๊ทธ์ธ ์ฒดํฌ, ๊ถŒํ•œ ์ฒดํฌ, ๋กœ๊ทธ ํ™•์ธ ๋“ฑ
  • ์‹คํ–‰ ๋ฉ”์†Œ๋“œ
    • preHandler() : Controller ์‹คํ–‰ ์ „
    • postHandler() : Controller ์‹คํ–‰ ํ›„
    • afterCompletion() : view Rendering ํ›„
Filter, Interceptor ์ฐจ์ด์  ์š”์•ฝ
  • Filter๋Š” WAS๋‹จ์— ์„ค์ •๋˜์–ด Spring๊ณผ ๋ฌด๊ด€ํ•œ ์ž์›์— ๋Œ€ํ•ด ๋™์ž‘ํ•˜๊ณ , Interceptor๋Š” Spring Context ๋‚ด๋ถ€์— ์„ค์ •๋˜์–ด ์ปจํŠธ๋กค๋Ÿฌ ์ ‘๊ทผ ์ „, ํ›„์— ๊ฐ€๋กœ์ฑ„์„œ ๊ธฐ๋Šฅ ๋™์ž‘
  • Filter๋Š” doFilter() ๋ฉ”์†Œ๋“œ๋งŒ ์žˆ์ง€๋งŒ, Interceptor๋Š” pre์™€ post๋กœ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌ
  • Interceptor์˜ ๊ฒฝ์šฐ AOP ํ‰๋‚ด ๊ฐ€๋Šฅ
    • handlerMethod(@RequestMapping์„ ์‚ฌ์šฉํ•ด ๋งคํ•‘ ๋œ @Controller์˜ ๋ฉ”์†Œ๋“œ)๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ œ๊ณตํ•˜์—ฌ ๋ฉ”์†Œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ๋“ฑ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ํŒŒ์•…ํ•ด ๋กœ์ง ์‹คํ–‰ ์—ฌ๋ถ€ ํŒ๋‹จ ๊ฐ€๋Šฅ

โซTop โ†ฉ๏ธBack โ„น๏ธHome


Reference

๐Ÿ  Home