TIL

59์ผ์ฐจ_Bean, IoC, DI

haedal-uni 2021. 11. 10. 23:57
728x90

 

๐Ÿ‘‰๐Ÿป Spring์€ Bean, IoC, DI ์ด 3๊ฐœ๋งŒ ํŒŒ์•…ํ•˜๊ณ  ์‹ค์Šต ์ง„ํ–‰ํ•˜๊ธฐ! (+ JPA)  

๐Ÿ‘‰๐Ÿป ์ฝ”๋“œ ํ•ด์„์€ ๋Œ€๋žต์ ์œผ๋กœ! (์šฉ์–ด์™€ ์ฝ”๋“œ๋“ค์€ ๋‹ค ์•Œ๊ณ  ์“ธ ์ˆ˜๋Š” ์—†๋‹ค!)

๐Ÿ‘‰๐Ÿป CRUD ๊ตฌํ˜„์„ ๋ชฉํ‘œ๋กœ!

 

 

 

๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๊ฒƒ์„ ํ† ๋Œ€๋กœ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค๋ดค๋‹ค. ๋‘๋‘ฅ!!

 

๊ทธ๋ฆผ์œผ๋กœ ๋ณด๋Š” DI๋ž€?

 

์˜์กด์„ฑ์ด ํ•„์š”ํ•œ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋Š” ๋ฐ˜์ง€

 

ํ”„๋กœํฌ์ฆˆ๋ฅผ ํ•˜๊ธฐ์œ„ํ•ด ๋ฐ˜์ง€๊ฐ€ ํ•„์š”ํ•˜๋‹ค

์˜์กด์„ฑ์ด ๊ฑธ๋ ค์žˆ๋‹ค.

 

IoC๋ฅผ ํ†ตํ•ด ๋ฐ˜์ง€์™€ ํ”„๋กœํฌ์ฆˆ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

→ bean

 

Spring(IoC)์ด ๋งŒ๋“  bean(๋ฐ˜์ง€์™€ ํ”„๋กœํฌ์ฆˆ)์„ ๋‚ด๋ถ€์— ์ „๋‹ฌํ•œ๋‹ค.

→ Di

 

๋”๋ณด๊ธฐ

 

ํ”„๋กœํฌ์ฆˆ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” -> IoC๋ฅผ ํ†ตํ•œ ๊ฐ์ฒด์ƒ์„ฑ


๋‚ด๋ถ€์— ์žˆ๋Š” ๋ฐ˜์ง€๋ฅผ ์ค˜์•ผ ํ•˜๋Š”๋ฐ ์ด ๋ฐ˜์ง€๋Š” ์˜์กด์„ฑ์ด ๊ฑธ๋ ค์žˆ๋‹ค.

-> ์ƒ์„ฑํ•˜๋ ค๋Š” ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜์— ์˜์กด์„ฑ์ด ๊ฑธ๋ ค์žˆ์Œ


๊ทธ๋ž˜์„œ ์™ธ๋ถ€์— ์žˆ๋Š” bean์„ ์Šคํ”„๋ง์ด ์ƒ์„ฑ์‹œ์ผœ์ค˜์„œ -> ์™ธ๋ถ€์—์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„
์ง‘ ๋‚ด๋ถ€์— ์žˆ๋Š” ๋ฐ˜์ง€์— ํ• ๋‹นํ•ด์„œ ์ฃผ๋Š” ์ƒํ™ฉ์ด๋‹ค. -> ๋‚ด๋ถ€์— ์˜์กด์„ฑ์ด ๊ฑธ๋ฆฐ ๊ฐ์ฒด์— ์™ธ๋ถ€์—์„œ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…

 

 


 

Bean : ์Šคํ”„๋ง์—์„œ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ฐ์ฒด (Bean์€ ์Šคํ”„๋ง init ํ•  ๋•Œ ์ƒ์„ฑ)

* ์Šคํ”„๋ง ๋Œ€์‹  ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•˜๋Š”๋ฐ

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์Šคํ”„๋ง ์„œ๋ฒ„์— ์˜ฌ๋ผ๊ฐ„ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ์ ํŠธ ๋‹จ์œ„๋กœ์จ

์ปจํ…Œ์ด๋„ˆ๊ฐ€ 2๊ฐœ ๋Œ์•„๊ฐ€๊ณ  ์žˆ๋‹ค๋ผ๋Š” ๋ง์€ ์„œ๋ฒ„๊ฐ€ 2๊ฐœ ๋Œ์•„๊ฐ„๋‹ค๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.

 

Bean์„ ์“ฐ์ง€ ์•Š์œผ๋ฉด new๋กœ ๊ณ„์† ์ƒ์„ฑํ•ด์ค˜์•ผํ•œ๋‹ค.

 

 

 

 

IoC (์ œ์–ด์˜ ์—ญ์ „) : Bean์ด ๋“ค์–ด์žˆ๋Š” ํ†ต  

์ œ์–ด์˜ ์—ญ์ „์„ ์‹œํ‚ค์ง€ ์•Š์œผ๋ฉด? ์ฐธ์กฐํ•˜๋Š” ์ฝ”๋“œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ์—์„œ๋„ ๋ณ€๊ฒฝ๋œ๋‹ค.

 

IoC๋ฅผ ์ ์šฉํ•˜๋ฉด Spring์—์„œ Bean์„ ์ฃผ์ž…ํ•˜์—ฌ Controller, Service ๋‹จ์—์„œ ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ์ด ์—†๋‹ค.

๐Ÿ‘‰๐Ÿป new๋ฅผ ์ƒ์„ฑํ•ด์„œ ๊ฐ์ฒด ์ƒ์„ฑ ํ•˜๋Š” ๋ถ€๋ถ„์ด ์—†๋‹ค.

(IoC๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค.)

 

* IOC์—์„œ DI๋กœ BEAN์„ ๋งŒ๋“ค์–ด์ฃผ๋Š”๋ฐ IOC๊ฐ€ ์—†์œผ๋ฉด BEAN์„ ์“ฐ์ง€ ๋ชปํ•œ๋‹ค.

* IoC๊ฐ€ ๋งŒ๋“  ๊ฐ์ฒด? Spring์ด ๋งŒ๋“  ๊ฐ์ฒด?

  ๐Ÿ‘‰๐Ÿป ๋ฉด์ ‘์—์„œ๋Š” ๊ตฌ์ฒด์ ์œผ๋กœ IoC๋ผ ํ•˜๊ณ  ํ˜„์—…์—์„œ๋Š” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ Spring์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

 

 

DI

ex1) Repository๊ฐ€ ์ง์ ‘ new๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ๊ฐ€์ •. 

๋งŒ์•ฝ db๊ฐ€ ์ผ๋ถ€ ๋ฐ”๋€Œ๊ฒŒ ๋˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.

์ด๋Ÿด๊ฒฝ์šฐ ์ „์ฒด db๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•ด์„œ Spring์—์„œ ๋งŒ๋“  ๊ฐ์ฒด๋ฅผ DI์— ์ฃผ์ž…์‹œ์ผœ์ค€๋‹ค.

(์™ธ๋ถ€์—์„œ ๊ฐ€์ ธ ์˜ด)

 

ex2)

A Service๊ฐ€ A Repository๋ฅผ ์“ธ ๋•Œ A Service์—์„œ ์ง์ ‘ ์ฐธ์กฐํ•˜๋ ค๊ณ  ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ

A Service์— A Repository๋กœ ์ฃผ์ž…ํ•œ๋‹ค.

 

 

๐Ÿ‘‰๐Ÿป ํ•˜๋‚˜์˜ ๊ฐ์ฒด์—์„œ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ทธ ๊ฐ์ฒด์— ๋Œ€ํ•œ ๊ตฌํ˜„์ฒด๋ฅผ ํ•ด๋‹น ๊ฐ์ฒด์—์„œ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ 
์ƒ์„ฑ์ž ๋“ฑ์„ ํ†ตํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ์™ธ๋ถ€์—์„œ ๋งŒ๋“ค๊ณ  ์™ธ๋ถ€์—์„œ ์ฃผ์ž…ํ•ด์ค€๋‹ค. ์ด๊ฒƒ์„ DI ๋ผ๊ณ ํ•œ๋‹ค.

 

 

 

 

reference >> https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-factory-scopes

 

 

 

๋” ์ƒ๊ฐํ•ด๋ณด๊ธฐ

๋”๋ณด๊ธฐ

 

๐Ÿค” ์™ธ๋ถ€์— ์žˆ๋Š” bean์„ ์–ด๋””๋กœ ์ฃผ์ž…ํ• ๊นŒ?

์™ธ๋ถ€์— ์žˆ๋Š” ๋นˆ์„ "์˜์กด์„ฑ์ด ํ•„์š”ํ•œ ๊ฐ์ฒด"์— ์ฃผ์ž…ํ•œ๋‹ค.

 

๐Ÿค” ๊ทธ๋Ÿผ ์–ธ์ œ DI๊ฐ€ ๋ฐœ์ƒํ• ๊นŒ?

IoC๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ์ด๋‹ค.

์Šคํ”„๋ง์ด IoC๋กœ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ์ด ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜์ค‘์— ์˜์กด์„ฑ์ด ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿผ ์Šคํ”„๋ง์ด ์™ธ๋ถ€์—์„œ ์˜์กด์„ฑ์ด ๊ฑธ๋ฆฐ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์˜์กด์„ฑ์ด ํ•„์š”ํ•œ ๊ฐ์ฒด์— ์ฃผ์ž…ํ•œ๋‹ค.

์ด ๊ณผ์ •์„ DI๋ผ๊ณ  ํ•œ๋‹ค.

DI๋Š” (IoC๋ฅผ ํ†ตํ•ด์„œ ์ƒ์„ฑ๋œ) ๊ฐ์ฒด๊ฐ€ ์˜์กด์„ฑ์ด ํ•„์š”ํ•  ๋•Œ ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ

IoC๋ฅผ ํ†ตํ•ด์„œ ์ƒ์„ฑ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ด ์Šคํ”„๋ง์—์„œ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด์ด๋‹ค.

 

 

 

IoC์—์„œ Bean์„ ๋งŒ๋“ค๋•Œ 
1. ๊ฐ์ฒด๋Š” IoC๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด์—ฌ์•ผ ํ•œ๋‹ค.
2. Bean์ด ๋งŒ๋“ค์–ด์งˆ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.
๊ทธ๋ž˜์„œ IoC๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด์˜ ์˜์กด์„ฑ์ด ํ•„์š”ํ•ด ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ์„ DI๋ผ๊ณ  ํ•œ๋‹ค.
๊ฐ์ฒด์˜ ์ƒ์„ฑ์˜ ์‹œ์ž‘์€ IOC์ด๋‹ค.


IoC๊ฐ€ ์–ด๋–ค ํŠน์ • ๊ฐ์ฒด A๋ฅผ ์ƒ์„ฑํ•˜๋ ค๊ณ  ํ•œ๋‹ค.
    A. ํŠน์ • ๊ฐ์ฒด A๊ฐ€ ์˜์กด์„ฑ์ด ํ•„์š”์—†์–ด ๋ฐ”๋กœ ์ƒ์„ฑ๋˜์—ˆ๋‹ค.     -> ๋ฐ”๋กœ ์ข…๋ฃŒ
    B. ํŠน์ • ๊ฐ์ฒด A๊ฐ€ ์˜์กด์„ฑ์ด ํ•„์š”ํ•˜์—ฌ ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜๋‹ค.     -> 2๋ฒˆ์œผ๋กœ ์ด๋™
2. IoC๊ฐ€ ์˜์กด์„ฑ์ด ํ•„์š”ํ•œ ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋ฅผ ์กฐ์‚ฌํ•œ๋‹ค.
3. IoC๊ฐ€ ์˜์กด์„ฑ์ด ํ•„์š”ํ•œ ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜์™€ ๋™์ผํ•œ ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ์™ธ๋ถ€์— ์ƒ์„ฑํ•œ๋‹ค.
4. IoC๊ฐ€ A๋ฅผ ์ƒ์„ฑํ•˜๋ฉด์„œ ๋™์‹œ์— ๋‚ด๋ถ€ ๋ฉค๋ฒ„๋ณ€์ˆ˜์— ์™ธ๋ถ€์—์„œ ์ƒ์„ฑํ•œ ์˜์กด์„ฑ์ด ๊ฑธ๋ฆฐ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•œ๋‹ค.
5. A ์ƒ์„ฑ์ด ๋๋‚ฌ๋‹ค. 

์ด ๊ณผ์ •์˜ 2 ~ 4 ๊ณผ์ •์ด DI

 

 

 

 

 

728x90

'TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

61์ผ์ฐจ(DI, IoC, Bean ๊ฐœ๋… ๊ฒ€์ฆ ๋ฐ›๊ธฐ)  (0) 2021.11.13
60์ผ์ฐจ  (0) 2021.11.12
58์ผ์ฐจ (spring1 ์‹ค์Šต)  (0) 2021.11.09
57์ผ์ฐจ  (0) 2021.11.08
54์ผ์ฐจ  (0) 2021.11.06