LUCATHREE.COM

โ† Back to list
๐Ÿง TIL

[DDD] ์˜์กด ๊ด€๊ณ„ ์ œ์–ด

์ž‘์„ฑ์ผ:
TILDDDArchitecture

์˜์กด (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 ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
ย