์์กด (Dependency)
โ ์์กด์ ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ์์ ๋์จ ๊ฐ๋
์ ์๋๋ค. ๋ค๋ง ์ํํธ์จ์ด์ ์ ์ฐ์ฑ์ ์ํด์ ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ์์๋ ์์กด ๊ด๊ณ๋ฅผ ์ ์ดํ๋ ๊ฒ์ ๊ฐ์กฐํ๊ณ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์์กด์ด๋ ๋ฌด์์ผ๊น? ๋ ๊น๊ฒ ์์๋ณด๋ ค๋ฉด ๋ค๋ฅธ ์ฐธ๊ณ ์๋ฃ๋ค๋ ๋ง๊ฒ ์ง๋ง ์ฌ๊ธฐ์๋ โ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ ์ฒ ์ ์
๋ฌธโ์์ ๋ค๋ฃจ๋ ๋ด์ฉ์ ์ค์ ์ ์ผ๋ก ์์ฝํด๋ณธ๋ค.
์์กด์ด๋ ๋ฌด์์ธ๊ฐ
์์กด์ ํ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ฉด์ ๋ฐ์ํ๋ค.
๋ง์ฝ A๋ผ๋ ๊ฐ์ฒด๋ B๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์ฑ์ผ๋ก ๊ฐ๋๋ค๊ณ ์ ์๋์ด ์๋ค๋ฉด B๊ฐ ์ ์๋์ด ์์ง ์์ ๊ฒฝ์ฐ A์ ์ ์๋ ์ฑ๋ฆฝํ ์ ์๋ค. ์ด๋ด ๋ A๊ฐ B์ ์์กดํ๋ค๊ณ ํ๋ค.
๋ํ ๋ฐ๋์ ์ฐธ์กฐ๊ฐ ์๋๋๋ผ๋ ์ธํฐํ์ด์ค์ ๊ตฌํ ํด๋์ค์ ์ฌ์ด์์๋ ์์กด์ ๋ฐ์ํ๋ค.
์์กด ๊ด๊ณ๋ ์ ์ ์ด๋์ด์ผ ํ๋๊ฐ
ํ๋ก๊ทธ๋จ์ ๋ง๋ค๋ฉด์ ์์กด ๊ด๊ณ๋ ์์ฐ์ค๋ฝ๊ฒ ๋ฐ์ํ๋ค. ๋ค๋ง ๊ฐ๋ฐ์ด ์ด๋์ ๋ ์งํ๋ ์ดํ ์ค์ํ ์ญํ ์ ํ๋ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ฒผ์ ๋ ๋ฌดํฑ๋๊ณ ๊ฐ์ฒด๋ฅผ ์์ ํ๋ค๊ฐ๋ ํด๋น ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ด ์ํฅ์ ๋ฐ๊ณ ์น๋ช
์ ์ธ ๋ฒ๊ทธ๋ก ์ด์ด์ง ์ ์๋ค.
๊ทธ๋ผ์๋ ์์ ์ ๋ถ๊ฐํผํ๋ฐ ์์กด ๊ด๊ณ๊ฐ ๋ณต์กํ๊ฒ ์ฝํ ์์์๋ก ์์ ์์
์ ๊น๋ค๋ก์์ง๊ณ ์ ์ฐํ์ง ๋ชปํ ํ๋ก๊ทธ๋จ์ด ๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๊ณ ์์กด ์์ฒด๋ฅผ ๋ง๊ฑฐ๋ ํผํ๋ ๊ฒ์๋ ํ๊ณ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ต๋ํ ํน์ ๊ธฐ์ ์ ์์กดํ์ง ์๋๋ก ์์กด์ฑ์ ์ ์ดํ๋ ๊ฒ์ด ์ค์ํ๋ค.
์์กด ๊ด๊ณ ์ญ์ ์์น
์์กด ๊ด๊ณ ์ญ์ ๋ฒ์น(Dependency Inversion Principle, DIP)์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น์ธ SOLID์ ํ๋๋ก ์์กด ๊ด๊ณ๋ฅผ ์ ์ดํ๋ ๋ฐฉ๋ฒ์ด๋ค.
DIP๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฝํ ์ ์๋ค.
- ์ถ์ํ ์์ค์ด ๋์ ๋ชจ๋์ด ๋ฎ์ ๋ชจ๋์ ์์กดํด์๋ ์ ๋๋ฉฐ ๋ ๋ชจ๋ ๋ชจ๋ ์ถ์ ํ์ ์ ์์กดํด์ผ ํ๋ค.
- ์ถ์ ํ์ ์ด ๊ตฌํ์ ์ธ๋ถ ์ฌํญ์ ์์กดํด์๋ ์ ๋๋ค. ๊ตฌํ์ ์ธ๋ถ ์ฌํญ์ด ์ถ์ ํ์ ์ ์์กดํด์ผ ํ๋ค.
์ถ์ ํ์ ์ ์์กดํ๋ผ
์ถ์ํ ์์ค์ ์
/์ถ๋ ฅ์ผ๋ก๋ถํฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ปํ๋๋ฐ, ๊ธฐ๊ณ์ ๋์์ ๊ฐ๊น์ด ๊ตฌ์ฒด์ ์ธ ์ฒ๋ฆฌ๋ค์ ์ถ์ํ ์์ค์ด ๋ฎ๋ค๊ณ ํํํ๋ฉฐ ์๋น์ค ๊ฐ์ฒด์ฒ๋ผ ํด๋ผ์ด์ธํธ๊ฐ ์๊ตฌํ ์ฌํญ์ ์ฒ๋ฆฌ์ ๊ฐ๊น์ธ ์๋ก ์ถ์ํ ์์ค์ด ๋๋ค๊ณ ํํํ๋ค.
DDD์์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์
์๋น์ค๋ฅผ ๋น๊ตํ๋ฉด ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ๋ ์ถ์ํ ์์ค์ด ๋ฎ์๋ฐ, ์ ํ๋ฆฌ์ผ์ด์
์๋น์ค ๊ตฌํ์ ์ํด ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฐธ๊ณ ํ๋ค๋ฉด ์ถ์ํ ์์ค์ด ๋์ ๋ชจ๋์ด ๋ฎ์ ๋ชจ๋์ ์์กดํ๋ฏ๋ก ์์กด ๊ด๊ณ ์ญ์ ์์น์ ์๋ฐฐํ๋ค.
์ด๋ด ๋๋ ๋ฆฌํฌ์งํ ๋ฆฌ ๊ตฌํ์ฒด ๋์ ์ธํฐํ์ด์ค(์ถ์ ํ์
)์ ๋ง๋ค๊ณ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ์ฒด๊ฐ ์ธํฐํ์ด์ค๋ฅผ ์ฐธ์กฐํ๋๋ก ํ๋ฉด ๋ฆฌํฌ์งํ ๋ฆฌ ๊ตฌํ์ฒด๊ฐ RDBMS๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ NoSQL์ ์ฌ์ฉํ๋ ์๊ด ์๊ฒ ๋๋ฏ๋ก ์์กด์ฑ์ด ํด์ ๋๋ค.
์ฃผ๋๊ถ์ ์ถ์ ํ์ ์ ๋ฌ๋ผ
์์์ ์ธํฐํ์ด์ค๋ ๊ตฌํ์ฒด์ ์์กดํ์ง ์๊ธฐ ์ํด ์ฌ์ฉ๋์๋ค. ๊ทธ๋ฐ๋ฐ ์ถ์ ํ์
(์ธํฐํ์ด์ค)๊ฐ ์ธ๋ถ ์ฌํญ(๊ตฌํ์ฒด)์ ์์กดํ๊ฒ ๋๋ฉด ์ถ์ํ ์์ค์ด ๋์ ๋ชจ๋์ด ๋ฎ์ ๋ชจ๋์ ์์กดํ๋ ํํ๋ฅผ ํด์ํ๊ธฐ ์ํจ์ด๋ผ๋ ์ถ์ ํ์
์ ์ฌ์ฉ ๋ชฉ์ ์ ๋ฌด์๋ฏธํ๊ฒ ๋ง๋ ๋ค.
๋ฎ์ ์ถ์ํ ์์ค ๋ชจ๋์์ ์ผ์ด๋ ๋ณ๊ฒฝ ๋๋ฌธ์ ์ถ์ํ ์์ค์ด ๋์ ๋ชจ๋์ ์์ ํด์ผ ํ๋ ์ํฉ์ ๋ฐ๋์งํ์ง ๋ชปํ๋ค.
์์กด ๊ด๊ณ ์ ์ด ํจํด
Service Locator ํจํด
์ด๋ฆ์ ์๋น์ค๊ฐ ๋ค์ด๊ฐ ์์ผ๋ DDD์์ ๋งํ๋ ๋๋ฉ์ธ ์๋น์ค๋ ์ ํ๋ฆฌ์ผ์ด์
์๋น์ค๋ฅผ ๋งํ๋ ๊ฒ์ ์๋๋ค.
์๋น์ค ๋ก์ผ์ดํฐ๋ ์์กด ํด์๊ฐ ํ์ํ ๊ฐ์ฒด์ ์์น๋ฅผ ๋ฏธ๋ฆฌ ๋ฑ๋กํด ๋ ๊ฐ์ฒด๋ก ์ฐธ์กฐ๊ฐ ์ผ์ด๋๋ ์์น์ ์๋น์ค ๋ก์ผ์ดํฐ๋ฅผ ๋์ ์ฐธ์กฐํ๋๋ก ํ๊ณ ์๋น์ค ๋ก์ผ์ดํฐ๋ฅผ ํตํด ํ์ํ ์ธ์คํด์ค๋ฅผ ๋ฐ์ ์ฌ์ฉํ๋๋ก ํ๋ ํจํด์ด๋ค.
์ฅ์ ๊ณผ ๋จ์
์๋น์ค ๋ก์ผ์ดํฐ ํจํด์ ์ฒ์๋ถํฐ ์ปค๋ค๋ ์ค์ ์ ๋ง๋ค ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ต์กฐ ๋์
์ด ์ฝ๋ค. ํ์ง๋ง ํด๋น ํจํด์ ์ํฐ ํจํด์ผ๋ก ๋ณด๋ ์ฌ๋๋ค๋ ์๋๋ฐ ๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์์กด ๊ด๊ณ๋ฅผ ์ธ๋ถ์์ ๋ณด๊ธฐ ์ด๋ ต๋ค
- ํ ์คํธ ์ ์ง๊ฐ ์ด๋ ต๋ค
IoC Container ํจํด
IoC (Inversion of Control) ์ปจํ
์ด๋๋ DI (Dependency Injection) ์ปจํ
์ด๋๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ฉฐ ์์กด ๊ด๊ณ ์ฃผ์
์ ํตํด ์์กด์ฑ์ ํด์์ํจ๋ค.
์์กด ๊ด๊ณ ์ฃผ์
์ด๋ ์์กดํ๋ ๋ชจ๋์ ์์ฑ์ ๋ฉ์๋๋ฅผ ํตํด ์ธ๋ถ์์ ์ธ์๋ก ์ฃผ์
ํ๋๋ก ํ๋ ๊ฒ์ด๋ค. ์์กดํ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์ธ๋ถ์์ ์ ์ดํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ์ฐ์ฑ์ด ๋์ด๋๋ค.
ํ์ง๋ง ๋จ์ ์์กด ๊ด๊ณ ์ฃผ์
๋ง์ผ๋ก๋ ์์กดํ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ์ฝ๋๋ฅผ ์ฌ๊ธฐ์ ๊ธฐ ๋ฐ๋ณตํด์ ์์ฑํด์ผ ํ๋ ๋ถํธํจ์ด ์๋๋ฐ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์ ์ธ์คํด์ค๋ฅผ ๋ฐ์์ค๋ DI ์ปจํ
์ด๋๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
ย