๐Ÿ“˜ spring DI

์ปดํฌ๋„ŒํŠธ(Component)๋ž€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์žˆ์–ด ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ๊ฐ๊ฐ์˜ ๋…๋ฆฝ๋œ ๋ชจ๋“ˆ์„ ๋œปํ•œ๋‹ค.

์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ†ตํ•ฉํ•  ๋•Œ ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž… ๋””์ž์ธ ํŒจํ„ด์ด ๋งค์šฐ ํšจ๊ณผ์ 

DI

  • ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž…
  • ์˜ค๋ธŒ์ ํŠธ ๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ
  • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋Ÿฐํƒ€์ž„์‹œ ์‚ฌ์šฉํ•  ๊ฐ์ œ๋“ค์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ๋ถ€์—ฌํ•จ
  • ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ˜๋‹ค.

IoC

  • ์—ญ์ „ ์ œ์–ด , ์ฆ‰ ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ์–ดํ•˜๋Š” ์ฃผ๋„๊ถŒ์ด ์—ญ์ „๋œ๋‹ค๋Š” ์˜๋ฏธ
  • ์ปจํฌ๋„ŒํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ๊ณผ ์˜์กด ๊ด€๊ณ„ ์—ฐ๊ฒฐ์„ ๊ฐœ๋ฐœ์ž์˜ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ DI ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋Œ€์‹ ํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ œ์–ด๊ฐ€ ์—ญ์ „๋˜์—ˆ๋‹ค๊ณ  ์ •์˜ํ•จ

IOC ์ปจํ…Œ์ด๋„ˆ

  • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์ด ์ œ๊ณตํ•˜๋Š” IoC์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ ๋ฐ ์˜์กด ๊ด€๊ณ„๋ฅผ ์ฃผ์ž…์„ ์ฒ˜๋ฆฌํ•จ

DI ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ™œ์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ : new ์—ฐ์‚ฐ์ž ์ œ๊ฑฐ

membersamplemain ์ด ์ด์šฉํ•˜๋Š” memberservice ์ธ์Šคํ„ด์Šค, ๊ทธ๋ฆฌ๊ณ  memberservice๊ฐ€ ์ด์šฉํ•˜๋Š” memberdao์ธ์Šคํ„ด์Šค๋Š” di ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ memberdao ์ธ์Šคํ„ด์Šค๋ฅผ memberservice ์— ์ธ์ ์…˜

DI ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ™œ์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…” : ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜์˜ ์ปดํฌ๋„ŒํŠธํ™”

์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜์˜ ์ปดํฌ๋„ŒํŠธํ™”๋ฅผ ์‹คํ˜„ํ•˜๋ ค๋ฉด productservice์™€ productdao(๋ผ๋Š” ์ด๋ฆ„)

์Šคํ”„๋ง ๋นˆ

  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด

ioc ์ปจํ…Œ์ด๋„ˆ

  • ์Šคํ”„๋ง ๋นˆ์˜ ์ƒ์„ฑ , ๊ด€๊ณ„, ์กฐ๋ฆฝ, ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์Šคํ”„๋ง ํ”„๋ ˆ์ž„ ์›Œํฌ์˜ ํ•ต์‹ฌ
  • ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž…์„ ์ด์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๊ด€๋ฆฌํ•œ๋‹ค.

BeanFactory

  • ๋นˆ์˜ ์ƒ์„ฑ, ๋นˆ์˜ ์˜์กด๊ด€๊ณ„ ๊ด€๋ฆฌ๋“ฑ์˜ DI์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ์ œ๊ณต
  • ๋นˆ์ด ๋งŽ์ง€ ์•Š๊ณ  ๊ฒฝ๋Ÿ‰ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ž‘์—…ํ•  ๋•Œ ํ™œ์šฉ

ApplicationContext

  • ์ผ๋ฐ˜์ ์ธ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์˜๋ฏธ
  • BeanFactory ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ํ•˜์œ„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ™•์žฅ๋œ ๊ธฐ๋Šฅ ์ œ๊ณต

WebApplicationContext

  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ApplicationContext
  • 2๊ฐ€์ง€ ์ข…๋ฅ˜
    1. ContextLoaderListener์— ์˜ํ•ด ์ƒ์„ฑ๋˜๋Š” WAC
      • DAP,Service๊ด€๋ จ ์Šคํ”„๋ง ๋นˆ๋“ค์„ ๋“ฑ๋ก
      • root-context.xmlํŒŒ์ผ์— ์„ค์ •
    2. DispatcherServlet์— ์˜ํ•ด ์ƒ์„ฑ๋˜๋Š” WAC
      • ์ปจํŠธ๋กค๋Ÿฌ์™€ ๊ฐ™์€ ์„œ๋ธ”๋ฆฟ ๊ด€๋ จ ๋นˆ ๋“ฑ๋ก
      • ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ ๋ฐ”๋‹ค ์‚ฌ์šฉํ•  wac๊ฐ์ฒด ์ƒ์„ฑ
      • servlet-context.xmlํŒŒ์ผ์— ์„ค์ •

xml ์„ค์ •๋ฐฉ์‹

  • ์ƒ์„ฑ์ž ๊ธฐ๋ฐ˜ ์˜์กด์„ฑ์ฃผ์ž…
    • ์ƒ์„ฑ์ž์˜ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์˜์กด์„ฑ์„ ์ฃผ์ž…
    • ์„ค์ •ํŒŒ์ผ xml์— constructor-org ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์ž…ํ•  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ค์ •
  • ์„ค์ •์ž ๊ธฐ๋ฐ˜ ์˜์กด์„ฑ ์ฃผ์ž…
    • ๋ฉ”์†Œ๋“œ์˜ ์ธ์ˆ˜๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์ฃผ์ž…
    • ์„ค์ •ํŒŒ์ผ xml์— property์š”์†Œ์˜ name ์†์„ฑ์— ์ฃผ์ž…ํ•  ์ปดํฌ๋„ŒํŠธ์˜ ์ด๋ฆ„์„ ์„ค์ •

Annotation ์„ค์ •๋ฐฉ์‹

  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ xml๋“ฑ์˜ ๋ฌธ์„œ์— ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์†Œ์Šค์ฝ”๋“œ์— @์• ๋…ธํ…Œ์ด์…˜์ด ํ˜•ํƒœ๋กœ ํ‘œํ˜„
  • ํด๋ž˜์Šค , ๋ฉ”์†Œ๋“œ, ํ•„๋“œ์˜ ์„ ์–ธ๋ถ€์— ํ‘œํ˜„ํ•˜์—ฌ ํŠน์ • ๊ธฐ๋Šฅ์ด ์ ์šฉ๋˜์—ˆ์Œ์„ ์•Œ๋ ค์คŒ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก xml์„œ๋ ‚ใ…‡์ด ๋ณต์žกํ•˜์—ฌ ์• ๋…ธํ…Œ์ด์…˜ ์ ์šฉ์œผ๋กœ ๊ฐœ์„ 

@Autowired

  • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋นˆ๊ณผ ๋‹ค๋ฅธ๋นˆ๊ณผ์˜ ์˜์กด์„ฑ์„ ์ž๋™์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋„๋ก ํ•˜๋Š” ์ˆ˜๋‹จ
  • ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜(๋นˆ) ์•ž์— @Autowired์• ๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ด๋ฉด ํ•ด๋‹น ํƒ€์ž…์˜ Component๋ฅผ ์ฐพ์•„ ๊ทธ ๋นˆ์„ ์ฃผ์ž…์‹œ์ผœ์ค€๋‹ค.
  • @autowired ์„ค์ •์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” annotation์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค ๋‹จ component-scan์ด ์„ค์ •๋˜์–ด์žˆ์œผ๋ฉด ์ƒ๋žต ๊ฐ€๋Šฅ
  • ๋นˆ๋“ฑ๋ก์„ ApplicationContext.xml์— ์„ค์ •ํ•œ๋‹ค (context:annotation-config๋ฅผ ํ†ตํ•ด)

@Component

  • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ธ์ ์…˜์„ ์œ„ํ•œ ์ธ์Šคํ„ด์Šค(๋นˆ)์„ ์„ค์ •ํ•˜๋Š” ์ˆ˜๋‹จ
  • ํด๋ž˜์Šค ์„ ์–ธ ์•ž์— @Component๋ฅผ ๋ถ™์ด๋ฉด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฐพ์•„์„œ ๊ด€๋ฆฌํ•˜๊ณ  @Autowired๊ฐ€ ๋ถ™์€ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์— ์ฃผ์ž…์‹œ์ผœ์ค€๋‹ค.
  • @Component ์• ๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ ์ž๋™์œผ๋กœ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
  • (context:component-scan)์„ ApplicationContext.xml์— ์„ค์ •ํ•˜๊ณ  ๊ฐ ํด๋ž˜์Šค ์•ž์— component๋ฅผ ๋ถ™์ด๊ณ  ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์•ž์— Autowired๋ฅผ ๋ถ™์ธ๋‹ค

java๋กœ DI ์„ค์ •

  • xml๋ฌธ๋ฒ• ๋Œ€์‹  ์ž๋ฐ” ์ฝ”๋“œ๋กœ ๋นˆ์„ ์„ค์ •ํ•œ๋‹ค
  • ํƒ€์‚ฌ์˜ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DIํ•˜๊ณ ์ž ํ•  ๊ฒฝ์šฐ์—๋Š” ์†Œ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๊ณ  ์žˆ๊ธฐ ๋•Œ ๋ฌธ์— ์• ๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. -> XML ๋กœ ์„ค์ • โ€ข XML ๊ธฐ๋ฐ˜ + ์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜, ์ž๋ฐ” ๊ธฐ๋ฐ˜ + ์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜

@Configuration

  • ๋นˆ ์„ค์ • ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค๋ฅผ ์„ ์–ธ
  • ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์Šคํ”„๋ง ์„ค์ •์œผ๋กœ ์‚ฌ์šฉ๋จ

@Bean

  • ํด๋ž˜์Šค ๋‚ด์˜ ๋งค์„œ๋“œ๋ฅผ ์ •์˜ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋นˆ ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉ
  • name ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋นˆ ์ด๋ฆ„ ์ ์šฉ ๊ฐ€๋Šฅ

ํƒœ๊ทธ:

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: