๐๐ป 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
'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 |