Spring์ DI, IoC ์ปจํ ์ด๋, ์คํ๋ง ๊ณ์ธต๊ตฌ์กฐ
DI, IoC ์ปจํ ์ด๋, ์คํ๋ง ๊ณ์ธต๊ตฌ์กฐ
์คํ๋ฅดํ ์ฝ๋ฉ ํด๋ฝ์ Spring ์ฌํ๋ฐ 1์ฃผ ์ฐจ ๋ด์ฉ์ธ DI, IoC ์ปจํ
์ด๋, ์คํ๋ง ๊ณ์ธต๊ตฌ์กฐ
์ ์ ๋ฆฌํ๋ค.
ํต์ฌ ๋ด์ฉ
- ์คํ๋ง์ ํต์ฌ ๊ฐ๋ ์ธ DI์ ์คํ๋ง IoC ์ปจํ ์ด๋์ ๊ฐ๋
- ์คํ๋ง์ Controller, Service, Repository์ ํ์์ฑ
DI, IoC
์ค๋ณต ์ฝ๋์ ๊ฐํ ๊ฒฐํฉ์ ํด๊ฒฐํ๊ธฐ ์ํ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ
DI (์์กด์ฑ ์ฃผ์ )
๊ฐ์ฒด๊ฐ ํ์ํ ์ํ์์๋ ๋ณดํต ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๋ค.
์ด๋, ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ์ง ์๊ณ ์ด๋ฏธ ์์ฑ๋์ด ์๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๋ ์์
์ ์์กด์ฑ ์ฃผ์
(DI: Dependency Injection)
๋ผ๊ณ ๋ถ๋ฅธ๋ค.
IOC (์ ์ด์ ์ญ์ )
์์กด์ฑ ์ฃผ์
์์๋ ์ฌ์ฉ์๊ฐ ํ์ํ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ์ง ์๊ณ , ์ด๋ฏธ ์์ฑ๋์ด ์๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์๋ค.
์ด๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ ์์ ์ด ๊ฐ์ ธ์จ ๊ฐ์ฒด๋ฅผ ์ด๋์, ์ด๋ ํ ๋ฐฉ์์ผ๋ก ๋ง๋ค์ด์ก๋์ง ์ ํ์ ์์ด ํ์ํ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ๋ค ์ธ ์ ์๋ค.
์ด์ฒ๋ผ ๊ฐ์ฒด์ ๋ํ ์ ์ด๋ฅผ ํ๋ ํ๋ฆ์ด ๋ค๋ฐ๋๋ค๊ณ ํ์ฌ ์ด๋ฌํ ์ํฉ์ ์ ์ด์ ์ญ์ (IoC: Inversion of Control)
์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์คํ๋ง์์๋ ์คํ๋ง ํ๋ ์์ํฌ๊ฐ ์คํ๋ง์ด ์์ฑํด ์ฃผ๋ ๊ฐ์ฒด์ธ Bean
์ ์คํ๋ง IoC ์ปจํ
์ด๋์ ๋ชจ์์ ์ ์ด์ ์ญ์ ์ญํ ์ ํด์ค๋ค.
Controller, Service, Repository
๊ฐ์ฒด์งํฅ
- ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ : ํ๋ก๊ทธ๋จ์ด ์ฒ๋ฆฌํ ๋ด์ฉ์ ์ญ์ฑ ๋์ดํด ๋์ ์ฝ๋ฉ ๋ฐฉ์
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ : ํ๋์ ์ฌ๋ฌผ(๊ฐ์ฒด)์ ํ๋์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ฏ
ํ ๋ฒ์ ํ๋์ ์ญํ
์ ์ํ(์ฃผ์ ๋ณ๋ก ์ ๋ฆฌ) ํ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ํ๋ก๊ทธ๋๋ฐ์ ํจ
์คํ๋ง์ ๊ฐ์ฒด์งํฅ ์ค๊ณ ์์น์ ์ ์ค์ํ์ฌ ์ค๊ณ๋์๊ณ , ์๋ฒ์์์ ์ฒ๋ฆฌ๋ฅผ Controller, Service, Repository
3๊ฐ๋ก ๋ถ๋ฆฌํ์ฌ ๊ฐ๊ฐ์ ์ญํ ์ ์ํํ๊ฒ ์ค๊ณ๋์๋ค.
Controller
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๋๋ค. (์์ฒญ Body์ JSON์ ์๋ฐ ๊ฐ์ฒด๋ก ๋ฐ๊ฟ์ค๋ค.)
- ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ๋ ์๋น์ค์๊ฒ ์ ๋ดํ๋ค. (3๊ณ์ธต์ Service)
- ํด๋ผ์ด์ธํธ์๊ฒ ์๋ตํด ์ค๋ค. (์๋ฐ ๊ฐ์ฒด๋ฅผ JSON์ผ๋ก ๋ณํํด ์ค๋ค.)
Service
- ๋น์ฆ๋์ค ๋ก์ง(์ฌ์ฉ์์ ์๊ตฌ ์ฌํญ์ ์๋ฒ์์ ์ฒ๋ฆฌํ๋ ๊ฒ)์ ๋ด๋นํ๋ค. (ex. ์์ฒญ๋ฐ์ DTO๋ฅผ ํตํด DB์ ์ ์ฅํ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ฒ)
- DB๊ฐ ํ์ํ ์ญํ ์ 3๊ณ์ธต ์ค Repository์๊ฒ ์ ๋ดํ๋ค.
Repositroy
- DB์ ์ฐ๊ฒฐ, ํด์ , ์์์ ๊ด๋ฆฌํ๋ค.
- DB์ CRUD(Create, Read, Update, Delete) ์์ ์ ์ฒ๋ฆฌํ๋ค.