[Spring]DI

DevelopHeoยท2024๋…„ 10์›” 15์ผ
0

๐Ÿ“™ 1. Sprint? & ๊ฐœ๋ฐœํ™˜๊ฒฝ

Framework VS Library

ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ท€์ฐฎ์€ ์ž‘์—…์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง

SpringFramework ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ 2

EJB - ํ˜„์‹ค์—์„œ์˜ ๋ฐ˜์˜์ด ์–ด๋ ต๋‹ค.

  • ์ฝ”๋“œ ์ˆ˜์ • ํ›„ ๋ฐ˜์˜ํ•˜๋Š” ๊ณผ์ • ์ž์ฒด๊ฐ€ ๊ฑฐ์ฐฝํ•ด ๊ธฐ๋Šฅ์€ ์ข‹์ง€๋งŒ ๋ณต์žกํ•œ ์ŠคํŽ™์œผ๋กœ ์ธํ•œ ๊ฐœ๋ฐœ์˜ ํšจ์œจ์„ฑ์ด ๋–จ์–ด์ง

EJB๋ž€?

  • EJB๋Š” ๊ธฐ์—…ํ™˜๊ฒฝ์˜ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋ฒ„์ธก ์ปดํฌ๋„ŒํŠธ ๋ชจ๋ธ์ด๋‹ค. ์ฆ‰, EJB๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์—…๋ฌด ๋กœ์ง์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‹ค.
  • EJB ์‚ฌ์–‘์€ Java EE์˜ ์ž๋ฐ” API ์ค‘ ํ•˜๋‚˜๋กœ, ์ฃผ๋กœ ์›น ์‹œ์Šคํ…œ์—์„œ JSP๋Š” ํ™”๋ฉด ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ณ  EJB๋Š” ์—…๋ฌด ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

SpringFramework ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ3

  • ์›น ์‚ฌ์ดํŠธ๊ฐ€ ์ ์  ์ปค์ง€๋ฉด์„œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰์˜ ์„œ๋น„์Šค๊ฐ€ ํ•„์š”ํ•˜๊ฒŒ ๋จ
  • ์ž๋ฐ” ์ง„์˜์—์„œ๋Š” EJB๊ฐ€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์„œ๋น„์Šค๋กœ ๊ฐ๊ด‘์„ ๋ฐ›๊ฒŒ ๋จ
    • EJB ์ŠคํŽ™์— ์ •์˜๋œ ์ธํ„ฐํŽ˜์ด์Šค์— ๋”ฐ๋ผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฏ€๋กœ ๊ธฐ์กด์— ์ž‘์„ฑ๋œ POJO๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•จ
    • ์ปจํ…Œ์ด๋„ˆ์— ๋ฐฐํฌ๋ฅผ ํ•ด์•ผ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•ด ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ์ €ํ•˜๋จ
    • ๋ฐฐ์šฐ๊ธฐ ์–ด๋ ต๊ณ , ์„ค์ •ํ•ด์•ผ ํ•  ๋ถ€๋ถ„์ด ๋งŽ์Œ

Rod Johnson์ด EJB๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•จ( ์Šคํ”„๋ง์˜ ๋ชจํƒœ )

  • AOP๋‚˜ DI๊ฐ™์€ ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ ๊ฐ€๋Šฅ
  • POJO๋กœ ์„ ์–ธ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ด ๊ฐ€๋Šฅํ•ด ์ง

SpringFramework ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ 4

POJO (Plain Old Java Object) - ์˜›๋‚  ์ž๋ฐ”์˜ ๊ฐ์ฒด๋ฅผ ์œ ์ง€

  • ํŠน์ • ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๊ธฐ์ˆ ์— ์˜์กด์ ์ด์ง€ ์•Š์€ ์ž๋ฐ” ๊ฐ์ฒด
  • ํŠน์ • ๊ธฐ์ˆ ์— ์ข…์†์ ์ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์‚ฐ์„ฑ, ์ด์‹์„ฑ ํ–ฅ์ƒ
  • Plain : component interface๋ฅผ ์ƒ์†๋ฐ›์ง€ ์•Š๋Š” ํŠน์ง• (ํŠน์ • framework์— ์ข…์†๋˜์ง€ ์•Š๋Š”)
  • Old : EJB ์ด์ „์˜ java class๋ฅผ ์˜๋ฏธ

๊ฒฝ๋Ÿ‰ ํ”„๋ ˆ์ž„์›Œํฌ

  • EJB๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ด ์ค„ ์ˆ˜ ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ์žฅ
  • Hibernate(JPA), JDO, myBatis, Spring

๋“ฑ์žฅ ๋ฐฐ๊ฒฝ 5

POJO + Framework

  • EJB์„œ๋ฒ„์™€ ๊ฐ™์€ ๊ฑฐ์ฐฝํ•œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•„์š” ์—†๋‹ค.
  • ์˜คํ”ˆ ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ๋ผ ์‚ฌ์šฉ์ด ๋ฌด๋ฃŒ
  • ๊ฐ์ข… ๊ธฐ์—…์šฉ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ์ƒ๋‹นํžˆ ๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ง€์›
  • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์Šคํ”„๋ง์€ ์›น ๋ถ„์•ผ ๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ ๋ชจ๋“  ๋ถ„์•ผ์— ์ ์šฉ์ด ๊ฐ€๋Šฅํ•œ ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

Spring Framework? = ๊ฒฝ๋Ÿ‰ํ™” ๋œ ์†”๋ฃจ์…˜์ด๋‹ค.

  • ๊ธฐ์กด์˜ ์ž๋ฐ”์˜ ๋ฌด๊ฑฐ์› ๋˜ ๋ถ€๋ถ„์„ ์ตœ์†Œํ™”ํ•จ
  • JEE๋ฅผ ๋Œ€์ฒดํ•˜๋Š” Framework์ด๋‹ค.
  • DI(Dependency Injection) ๋‚˜ AOP(Aspect Oriented Programming)์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ๋„ ์ง€์› ํ•œ๋‹ค.

StringFramework์˜ ๊ตฌ์กฐ

  • Spring ์‚ผ๊ฐํ˜•
    1. POJO
    2. PSA
      1. ํ™˜๊ฒฝ์˜ ๋ณ€ํ™”์™€ ๊ด€๊ณ„์—†์ด ์ผ๊ด€๋œ ๋ฐฉ์‹์˜ ๊ธฐ์ˆ ๋กœ์˜ ์ ‘๊ทผ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” ์ถ”์ƒํ™” ๊ตฌ์กฐ๋ฅผ ๋งํ•จ
      2. ํŠน์ • ํด๋ž˜์Šค๊ฐ€ ์ถ”์ƒํ™”๋œ ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ๋ฐ”๋ผ๋ณด๋ฉฐ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ PSA์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์ด๋‹ค.
      3. ์ฆ‰ ๊ธฐ์กด ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ํ™•์žฅ ๊ฐ€๋Šฅ, ์–ด๋Š ํŠน์ • ๊ธฐ์ˆ ์— ํŠนํ™”๋˜์–ด ์žˆ์ง€ ์•Š๋Š” ์ฝ”๋“œ์ด๋‹ค.
    3. IoC/DI
      1. ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด ๋งŒ๋“ค์–ด์„œ ์ค€๊ฑธ ๋‚ด๊ฐ€ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์“ฐ๋Š”๊ฑฐ
      2. DI๋Š” ์œ ์—ฐํ•˜๊ฒŒ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋‘๊ณ  ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด๊ด€๊ณ„๋Š” ์™ธ๋ถ€์—์„œ ๋‹ค์ด๋‚˜๋ฏนํ•˜๊ฒŒ ์„ค์ •
    4. AOP
      1. ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      2. ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด์„œ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ชจ๋“ˆ์„ฑ์„ ํ–ฅ์ƒ
      3. ๊ณตํ†ต ๋ชจ๋“ˆ์„ ์—ฌ๋Ÿฌ ์ฝ”๋“œ์— ์‰ฝ๊ฒŒ ์ ์šฉ๊ฐ€๋Šฅ

image.png

2. IoC & Container

3. ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection, DI)

4. DI - XML

5. DI - Annotation

0๊ฐœ์˜ ๋Œ“๊ธ€