2021. 10. 1. 08:00ใBack-End ์์ ์ค/Spring Framework
์๋ ํ์ธ์? ์ฃผ๋ํ๋์ ๋๋ค.
์ค๋์ ์คํ๋ง์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ค์ด๊ฐ๊ธฐ์ ์ ์จ IoC, DI Container์ ๊ฐ๋ ์ ๋ํด ๋ค์ ํ๋ฒ ์ฌ์ ๋ฆฝํ๊ณ ๊ฐ๋๋ก ํ ๊ฒ์!
ํจ๊ป ๊ณต๋ถ ํด ๋ณด์ค๊ฒ์!
๐ ๋ชฉ์ฐจ
01. [Spring] ์คํ๋ง ํต์ฌ ์๋ฆฌ
02. [Spring] ์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น (SOLID)
03. [Spring] ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ์คํ๋ง
04. [Spring] OCP์ DIP ๊ณ ๋ คํ๊ธฐ
05. [Spring] ๊ฐ์ฒด ์งํฅ ์๋ฆฌ ์ ์ฉ - ์๋ก์ด ํ ์ธ ์ ์ฑ
๊ฐ๋ฐ
06. [Spring] AppConfig ๋ฆฌํฉํฐ๋ง
07. [Spring] Ioc, DI Container
08. [Spring] ์คํ๋ง ์ปจํ
์ด๋ ์์ฑ
09. [Spring] ์ฑ๊ธํค ์ปจํ
์ด๋
10. [Spring] Component Scan And Auto wired Start
11. [Spring] ์์กด๊ด๊ณ ์ฃผ์
๋ฐฉ๋ฒ
12. [Spring] Bean Life Cycle Call Back
13. [Spring] Bean Scope
๐ IoC, DI ๊ทธ๋ฆฌ๊ณ , ์ปจํ ์ด๋
IoC(Inversion Of Control) ์ ์ด์ ์ญ์
IoC๋ ๊ธฐ์กด ํ๋ก๊ทธ๋จ์ Client ๊ตฌํ ๊ฐ์ฒด๊ฐ ์ค์ค๋ก ํ์ Server ๊ตฌํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ฐ๊ฒฐํ๊ณ , ์คํ ํ์๋ ๊ฒ์ด์์.
๊ตฌํ ๊ฐ์ฒด๊ฐ ํ๋ก๊ทธ๋จ์ ์ ์ด ํ๋ฆ์ ์ค์ค๋ก ์กฐ์ข ํ๋ค๋ ๊ฒ์ด์ง์. ๊ฐ๋ฐ์ ์ ์ฅ์์ ์ด๊ฒ ๋น์ฐํ ํ๋ฆ์ผ ๊ฒ์ด์์.
๋ฐ๋ฉด AppConfig๊ฐ ๋ฑ์ฅํ ๋ค ๊ตฌํ ๊ฐ์ฒด๋ ์์ ์ Logic์ ์คํํ๋ ์ญํ ๋ง ๋ด๋นํ๋ ๊ฒ์ด์์. ํ๋ก๊ทธ๋จ์ ์ ์ด ํ๋ฆ์ ์ด์ AppConfig๊ฐ ๊ฐ์ ธ๊ฐ ๊ฒ์ด์ฃ . ์๋ฅผ ๋ค์ด OrderServiceImpl์ ํ์ ์ธํฐํ์ด์ค๋ค์ ํธ์ถํ๋, ์ด๋ค ๊ตฌํ ๊ฐ์ฒด๊ฐ ์คํ๋ ์ง๋ ๋ชจ๋ฅด๋ ๊ฒ์ด์์.
ํ๋ก๊ทธ๋จ์ ๋ํ ์ ์ด ํ๋ฆ์ ๋ํ ๊ถํ์ ๋ชจ๋ AppConfig๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด์์. ์ฌ์ง์ด! OrderServiceImpl๋ AppConfig๊ฐ ์คํํ๋ต๋๋ค! ๊ทธ๋ฆฌ๊ณ , AppConfig๋ OrderServiceImpl์ด ์๋ OrderService ์ธํฐํ์ด์ค์ ๋ค๋ฅธ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์คํํ ์ ์๋ ๊ฒ์ด์์. ๊ทธ๋๋ ์ฐฉํ OrderServiceImpl์ ์ค๋๋ ๋ฌต๋ฌตํ ์์ ์ Logic๋ง ์ํํ๊ณ ์๋ต๋๋ค.
๐ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐจ์ด
๋จผ์ ํ๋ ์์ํฌ๋ ๋ด๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ์ ์ดํ๊ณ , ๋ ๋์ ์คํํด ์ค๋ค๋ฉด ๊ทธ๊ฒ์ ํ๋ ์์ํฌ์ธ ๊ฒ์ด์์. JUnit๋ ํ๋ ์์ํฌ๋๋๋ค!๋ฐ๋ฉด ๋ด๊ฐ ์์ฑํ ์ฝ๋๊ฐ ์ง์ ์ ์ด์ ํ๋ฆ์ ๋ด๋นํ๋ค๋ฉด ๊ทธ๊ฒ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋๋ ๊ฒ์ด์์.
๐์์กด๊ด๊ณ ์ฃผ์ DI(Dependency Injection)
OrderServiceImpl์ DiscountPolicy ์ธํฐํ์ด์ค์ ์์กดํ๋ ๊ฒ์ด์์. ์ค์ ์ด๋ค ๊ตฌํ ๊ฐ์ฒด๊ฐ ์ฌ์ฉ๋ ์ง๋ ๋ชจ๋ฅด๋ ๊ฒ์ด์ง์.
์์กด ๊ด๊ณ๋ ์ ์ ์ธ Class ์์กด ๊ด๊ณ์ ์คํ ์์ ์ ๊ฒฐ์ ๋๋ ๋์ ์ธ ๊ฐ์ฒด(์ธ์คํด์ค) ์์กด ๊ด๊ณ ๋์ ๋ถ๋ฆฌํด์ ์๊ฐํด์ผ ํ๋ ๊ฒ์ด์์.
๐ ์ ์ ์ธ Class ์์กด ๊ด๊ณ
Class๊ฐ ์ฌ์ฉํ๋ import ์ฝ๋๋ง ๋ณด๊ณ , ์์กด๊ด๊ณ๋ฅผ ์ฝ๊ฒ ํ๋จํ ์ ์๋ ๊ฒ์ด์์.
์ ์ ์ธ ์์กด๊ด๊ณ๋ Application์ ์คํํ์ง ์์๋ ๋ถ์์ด ๊ฐ๋ฅํ ๊ฒ์ ๋๋ค. ์๋ Class Diagram์์ OrderServiceImpl์ MemberRepository, DiscountPolicy์ ์์กดํ๋ ๊ฒ์ ์ ์ ์๋ ๊ฒ์ด์์.๊ทธ๋ฐ๋ฐ, ์ด๋ฌํ Class ์์กด๊ด๊ณ ๋ง์ผ๋ก๋ ์ค์ ์ด๋ค ๊ฐ์ฒด๊ฐ OrderServiceImpl์ ์ฃผ์ ๋ ์ง ์ ์ ์๋ ๊ฒ์ด์์.
๐ ๋์ ์ธ ๊ฐ์ฒด ์ธ์คํด์ค ์์กด ๊ด๊ณ
์ด๊ฒ์ Application ์คํ ์์ ์ ์ค์ ์์ฑ๋ ๊ฐ์ฒด ์ธ์คํด์ค์ ์ฐธ์กฐ๊ฐ ์ฐ๊ฒฐ๋ ์์กด ๊ด๊ณ์ธ ๊ฒ์ด์์.
- ๊ฐ์ฒด Diagram
Application ์คํ ์์ (Run Time)์ ์ธ๋ถ์์ ์ค์ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , Client์ ์ ๋ฌํด์ Client์ Server์ ์ค์ ์์กด๊ด๊ณ๊ฐ ์ฐ๊ฒฐ๋๋ ๊ฒ์ ์์กด๊ด๊ณ ์ฃผ์ (์์กด์ฑ ์ฃผ์ )์ด๋ผ๊ณ ํ๋ ๊ฒ์ด์์.
๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , ๊ทธ ์ฐธ์กฐ๊ฐ์ ์ ๋ฌํด์ ์ฐ๊ฒฐ๋๋ ๊ฒ์ด๊ณ , ์์กด ๊ด๊ณ ์ฃผ์ ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด Client ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ , Client๊ฐ ํธ์ถํ๋ ๋์์ ํ์ ์ธ์คํด์ค๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ด์์.
์์กด ๊ด๊ณ ์ฃผ์ ์ ์ฌ์ฉํ๋ฉด ์ ์ ์ธ Class ์์กด๊ด๊ณ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ , ๋์ ์ธ ๊ฐ์ฒด ์ธ์คํด์ค ์์กด๊ด๊ณ๋ฅผ ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ด์์.
๐ IoC, DI Container
AppConfig์ฒ๋ผ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ๊ด๋ฆฌํ๋ฉด์ ์์กด ๊ด๊ณ๋ฅผ ์ฐ๊ฒฐํด ์ฃผ๋ ๊ฒ์ IoC Container ํน์ DI Contatiner๋ผ๊ณ ํ๋ ๊ฒ์ด์์.
์์กด ๊ด๊ณ ์ฃผ์ ์ ์ด์ ์ ๋ง์ถ์ด ์ต๊ทผ์๋ ์ฃผ๋ก DI Container๋ผ๊ณ ํ๋ต๋๋ค!๋๋ ์ด์๋ธ๋ฌ, Object Factory ๋ฑ์ผ๋ก ๋ถ๋ฆฌ๊ธฐ๋ ํ๋ค๊ณ ํด์!
์ถ์ฒ : ์ธํ๋ฐ - ๊น์ํ ๊ฐ์ฌ๋์ ์คํ๋ง ํต์ฌ ์๋ฆฌ ๊ฐ์
์ด ๊ธ์ ๊ฐ์ ๋ด์ฉ๊ณผ ๊ฐ์ ์๋ฃ๋ฅผ ๋ฐํ์ผ๋ก '์ฃผ๋ํ๋'์ด '์ฃผ๋ํ๋' ์ดํดํ๊ธฐ ์ฝ๊ธฐ ์ํด ์์ฑํ ๋ด์ฉ ์์ ์๋ ค๋๋ฆฝ๋๋ค.
์ฃผ๋ํ๋์ ๊ธ์ด ๋ง์์ ๋์ จ๋์? ๊ตฌ๋ ๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋๊ธ ๊ทธ๋ฆฌ๊ณ ๋ฐฉ๋ช ๋ก์ ์ฃผ๋ํ๋์๊ฒ ๋ง์ ํ์ด ๋ฉ๋๋ค.
'Back-End ์์ ์ค > Spring Framework' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] ์ฑ๊ธํค ์ปจํ ์ด๋ (0) | 2021.10.05 |
---|---|
[Spring] ์คํ๋ง ์ปจํ ์ด๋ ์์ฑ (0) | 2021.10.03 |
[Spring] AppConfig ๋ฆฌํฉํฐ๋ง (0) | 2021.09.30 |
[Spring] ๊ฐ์ฒด ์งํฅ ์๋ฆฌ ์ ์ฉ - ์๋ก์ด ํ ์ธ ์ ์ฑ ๊ฐ๋ฐ (0) | 2021.09.29 |
[Spring] OCP์ DIP ๊ณ ๋ คํ๊ธฐ (4) | 2021.09.18 |