--- category: Unified tags: [auto-consolidated, technical-documentation] title: [[Domain-Driven Design]] last_updated: 2026-05-02 --- # [[Domain-Driven Design]] ## ๐Ÿ“Œ Brief Summary ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„(Domain-Driven Design, DDD)๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ์—ญ๋Ÿ‰๊ณผ ๋„๋ฉ”์ธ ๋กœ์ง์„ ์ค‘์‹ฌ์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด ๋ชจ๋ธ์„ ๋ถ„ํ• ํ•˜๊ณ  ๊ตฌ์กฐํ™”ํ•˜๋Š” ์„ค๊ณ„ ์›์น™์ด๋‹ค [1, 2]. ์ด ์›์น™์€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค, ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜, ๋ชจ๋“ˆํ˜• ๋ชจ๋†€๋ฆฌ์Šค ๋“ฑ ํ˜„๋Œ€ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด๋“ค์ด ์š”๊ตฌํ•˜๋Š” ๋ช…ํ™•ํ•œ ๋…ผ๋ฆฌ์  ๊ฒฝ๊ณ„์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ์ˆ˜๋ฆฝํ•˜๋Š” ๋ฐ ํ•ต์‹ฌ์ ์ธ ์ฒ™๋„๊ฐ€ ๋œ๋‹ค [1-3]. ๋ณต์žกํ•œ ๋„๋ฉ”์ธ ๋กœ์ง์„ ํšจ์œจ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์ง€๋งŒ, ๊ทธ์— ๋น„๋ก€ํ•˜์—ฌ ๋†’์€ ์ˆ˜์ค€์˜ ์ถ”์ƒํ™”์™€ ์„ค๊ณ„ ํŒจํ„ด์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ์š”๊ตฌํ•œ๋‹ค [4, 5]. --- Domain-Driven Design(DDD)์€ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๊ทœ์น™์„ ์ •ํ™•ํžˆ ๋ฐ˜์˜ํ•˜๋„๋ก ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ(์˜ˆ: ํŒ๋งค, ๋ฌผ๋ฅ˜ ๋“ฑ)์„ ๋ชจ๋ธ๋งํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•˜๋Š” ์„ค๊ณ„ ์ฒ ํ•™์ด์ž ์ ‘๊ทผ๋ฒ•์ด๋‹ค[1]. ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€์™€ ๊ฐœ๋ฐœ์ž ๊ฐ„์˜ ์ง€์†์ ์ธ ํ˜‘์—… ๋ฐ '๋ณดํŽธ์  ์–ธ์–ด(Ubiquitous Language)' ์‚ฌ์šฉ์„ ํ†ตํ•ด ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ์ฝ”๋“œ๋ฅผ ์ผ์น˜์‹œํ‚จ๋‹ค[2]. ํ”„๋ ˆ์ž„์›Œํฌ๋ณ„ ์‹ค์ „ ํŒจํ„ด์—์„œ DDD๋Š” ์ฃผ๋กœ ์œก๊ฐํ˜• ์•„ํ‚คํ…์ฒ˜(Hexagonal Architecture)์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์™ธ๋ถ€ ๊ธฐ์ˆ ๋กœ๋ถ€ํ„ฐ ์™„๋ฒฝํžˆ ๊ฒฉ๋ฆฌํ•˜๊ณ  ๋ณดํ˜ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค[3, 4]. --- **๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„(Domain-Driven Design, DDD)**๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ์ค‘์‹ฌ์„ ๊ธฐ์ˆ ์ด ์•„๋‹Œ **๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ**์— ๋‘๋Š” ์„ค๊ณ„ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์—๋ฆญ ์—๋ฐ˜์Šค(Eric Evans)์— ์˜ํ•ด ์ •๋ฆฝ๋œ ์ด ๋ฐฉ๋ฒ•๋ก ์€ ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€์™€ ๊ฐœ๋ฐœ์ž ๊ฐ„์˜ ๊ฐ„๊ทน์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๊ณตํ†ต์˜ ์–ธ์–ด(**Ubiquitous Language**)๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ , ์‹œ์Šคํ…œ์„ ๋…ผ๋ฆฌ์  ๊ฒฝ๊ณ„์ธ **๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ(Bounded Context)**๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์˜ ๋ณต์žก์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. --- --- ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„(DDD)๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ๊นŠ์€ ์ดํ•ด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์„ค๊ณ„ ์ ‘๊ทผ๋ฒ•์ด๋‹ค [1]. ๊ธฐ์ˆ  ํŒ€๊ณผ ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€๊ฐ€ ๊ธด๋ฐ€ํžˆ ํ˜‘๋ ฅํ•˜์—ฌ '์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด(Ubiquitous Language)'๋ผ๋Š” ๊ณต์œ  ์–ดํœ˜๋ฅผ ๊ตฌ์ถ•ํ•จ์œผ๋กœ์จ ์‹œ์Šคํ…œ์˜ ๋ณต์žก์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค [1]. ์ฝ”๋“œ๋ฒ ์ด์Šค ์ฝ๊ธฐ ๊ด€์ ์—์„œ DDD๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐœ๋ณ„ ์ฝ”๋“œ์˜ ์ƒ์„ธ ๋กœ์ง์— ๋งค๋ชฐ๋˜๊ธฐ ์ „์— ๋น„์ฆˆ๋‹ˆ์Šค์˜ ์˜๋„๋ฅผ ๋จผ์ € ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ง€์  ๊ธฐ๋ฐ˜์„ ์ œ๊ณตํ•˜๋Š” ์ค‘์š”ํ•œ ๊ตฌ์กฐ์  ์ง€ํ‘œ ์—ญํ• ์„ ํ•œ๋‹ค [2]. ## ๐Ÿ“– Core Content - **๋น„์ฆˆ๋‹ˆ์Šค ์—ญ๋Ÿ‰ ์ค‘์‹ฌ์˜ ์„œ๋น„์Šค ๋ชจ๋ธ๋ง**: DDD๋Š” ์„œ๋น„์Šค๋ฅผ ๋น„์ฆˆ๋‹ˆ์Šค ์—ญ๋Ÿ‰(business capability)์ด๋‚˜ ํ•˜์œ„ ๋„๋ฉ”์ธ(subdomain)์„ ์ค‘์‹ฌ์œผ๋กœ ์กฐ์งํ•˜๋„๋ก ์œ ๋„ํ•œ๋‹ค [2, 6]. ์ด๋Š” ๊ฐ ์„œ๋น„์Šค๊ฐ€ ํŠน์ • ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ์„ ์บก์Аํ™”ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA)์˜ ํ•ต์‹ฌ ์›์น™๊ณผ ์™„๋ฒฝํ•˜๊ฒŒ ์ผ์น˜ํ•œ๋‹ค [2]. - **๋ช…ํ™•ํ•œ ๋กœ์ง ๊ฒฝ๊ณ„์™€ ์บก์Аํ™”(Encapsulation)**: DDD๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ๊ตฌํ˜„ํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ์—”ํ‹ฐํ‹ฐ, ์ฆ‰ DDD Aggregate ๋‹จ์œ„๋กœ ๋กœ์ง์„ ๊ตฌ์„ฑํ•œ๋‹ค [6]. ๋ชจ๋“ˆํ˜• ๋ชจ๋†€๋ฆฌ์Šค(Modular Monolith) ์•„ํ‚คํ…์ฒ˜์— DDD ์›์น™์„ ์ ์šฉํ•  ๊ฒฝ์šฐ, ์‹œ์Šคํ…œ์„ ๋ฌผ๋ฆฌ์  ๋„คํŠธ์›Œํฌ๋กœ ๋ถ„ํ• ํ•˜์ง€ ์•Š๊ณ ๋„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ๊ฒฝ๊ณ„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ฐ•์ œํ•˜์—ฌ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋” ์กฐ์ง์ ์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค [1, 7]. - **ํด๋ฆฐ/ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜์™€์˜ ์œตํ•ฉ**: ๋„๋ฉ”์ธ ๋กœ์ง์„ ์™ธ๋ถ€ ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ฒ˜๋‚˜ UI๋กœ๋ถ€ํ„ฐ ๊ฒฉ๋ฆฌํ•˜๋Š” ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜(Hexagonal Architecture) ๋ฐ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜(Clean Architecture)๋Š” ๋ณธ์งˆ์ ์œผ๋กœ DDD ์›์น™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ฑฐ๋‚˜ ๊ฐ•๋ ฅํ•œ ์‹œ๋„ˆ์ง€๋ฅผ ๋ฐœํœ˜ํ•œ๋‹ค [3, 8]. ์ผ๋ก€๋กœ Salesforce์™€ ๊ฐ™์€ ๋Œ€๊ทœ๋ชจ ํ”Œ๋žซํผ ๋˜ํ•œ ๋ณต์žกํ•œ ๋„๋ฉ”์ธ ๋กœ์ง์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋„๋ฉ”์ธ ์ฃผ๋„ ์•„ํ‚คํ…์ฒ˜(Domain-Driven Architecture)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์—ˆ๋‹ค [5]. --- * **ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ** DDD๋Š” ๋„๋ฉ”์ธ์„ ๋ชจ๋ธ๋งํ•˜๊ธฐ ์œ„ํ•ด ๋ณดํŽธ์  ์–ธ์–ด(Ubiquitous Language), ์ œํ•œ๋œ ์ปจํ…์ŠคํŠธ(Bounded Contexts), ์ •์ฒด์„ฑ์„ ๊ฐ€์ง€๋Š” ์—”ํ‹ฐํ‹ฐ(Entities)์™€ ํŠน์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’ ๊ฐ์ฒด(Value Objects), ์• ๊ทธ๋ฆฌ๊ฒŒ์ดํŠธ(Aggregates), ๋„๋ฉ”์ธ ์„œ๋น„์Šค(Domain Services), ๋ฆฌํฌ์ง€ํ† ๋ฆฌ(Repositories), ๋„๋ฉ”์ธ ์ด๋ฒคํŠธ(Domain Events) ๋ฐ ์•ˆํ‹ฐ ์ฝ”๋Ÿฝ์…˜ ๋ ˆ์ด์–ด(Anti-Corruption Layer) ๋“ฑ์˜ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค[2]. * **์œก๊ฐํ˜• ์•„ํ‚คํ…์ฒ˜์™€์˜ ์ƒํ˜ธ ๋ณด์™„์„ฑ** ์œก๊ฐํ˜• ์•„ํ‚คํ…์ฒ˜๋Š” DDD ๋ชจ๋ธ์„ ์บก์Аํ™”ํ•˜๊ณ  ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๊ฒฉ๋ฆฌํ•˜๋Š” '๊ตฌ์กฐ(Structure)'๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, DDD๋Š” ์ฝ”์–ด์— ํ•ด๋‹นํ•˜๋Š” '๋‚ด์šฉ(Content)'์„ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ฒฐํ•ฉ๋œ๋‹ค[3]. ๋„๋ฉ”์ธ ๊ณ„์ธต์€ ๋„๋ฉ”์ธ ๊ฐ์ฒด๋งŒ์„ ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ์œผ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ์ธํ”„๋ผ์˜ ๊ฐ„์„ญ์œผ๋กœ๋ถ€ํ„ฐ ์Šค์Šค๋กœ๋ฅผ ๋ณดํ˜ธํ•˜๋ฉฐ ์ž๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค[5]. * **ํ”„๋ ˆ์ž„์›Œํฌ ์ ์šฉ (Spring Boot & NestJS)** Spring Boot ํ™˜๊ฒฝ์—์„œ๋Š” ๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งคํ•‘์šฉ `@Entity` ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•˜์—ฌ ์ˆœ์ˆ˜ ์ž๋ฐ” ๊ฐ์ฒด(POJO)๋กœ ์œ ์ง€ํ•˜๋Š” ํŒจํ„ด์ด ๊ถŒ์žฅ๋œ๋‹ค[4, 6]. NestJS์—์„œ๋„ ๋„๋ฉ”์ธ๊ณผ ์ธํ”„๋ผ๋ฅผ ์—„๊ฒฉํžˆ ๋ถ„๋ฆฌํ•˜๊ณ , ๋ณต์žกํ•œ ๋ชจ๋“ˆ ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ๋„๋ฉ”์ธ ์ด๋ฒคํŠธ ๋ฐ CQRS์™€ ํ•จ๊ป˜ DDD ๊ฐœ๋…์ด ์ ๊ทน ์ฐจ์šฉ๋œ๋‹ค[7, 8]. * **๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๋ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ** ๋„๋ฉ”์ธ ๊ฐ์ฒด๋Š” ์ƒ์„ฑ ๋‹จ๊ณ„์—์„œ ๋ถˆ๋ณ€์„ฑ(Invariants)์„ ๊ฒ€์ฆํ•ด์•ผ ํ•œ๋‹ค. ์™ธ๋ถ€ ์„œ๋“œํŒŒํ‹ฐ ์„œ๋น„์Šค์—์„œ ์ž˜๋ชป๋œ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ(DTO)๊ฐ€ ๋“ค์–ด์˜ค๋”๋ผ๋„ ๋„๋ฉ”์ธ ์ƒ์„ฑ์ž์—์„œ ์ด๋ฅผ ์ฐจ๋‹จํ•จ์œผ๋กœ์จ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์— ์˜ํ•ด ์˜ค์—ผ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค[9]. --- ### 1. ์ „๋žต์  ์„ค๊ณ„ (Strategic Design) ๋น„์ฆˆ๋‹ˆ์Šค ๋ฌธ์ œ๋ฅผ ํฐ ํ‹€์—์„œ ๋ถ„์„ํ•˜๊ณ  ์‹œ์Šคํ…œ์˜ ๊ฒฝ๊ณ„๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. * **์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด (Ubiquitous Language):** ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€, ๊ธฐํš์ž, ๊ฐœ๋ฐœ์ž๊ฐ€ ํ”„๋กœ์ ํŠธ ์ „๋ฐ˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ณตํ†ต ์–ดํœ˜์ž…๋‹ˆ๋‹ค. ์ด ์–ธ์–ด๋Š” ๋ฌธ์„œ, ๋Œ€ํ™”๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฝ”๋“œ(ํด๋ž˜์Šค๋ช…, ๋ฉ”์„œ๋“œ๋ช…)์—๋„ ๊ทธ๋Œ€๋กœ ๋ฐ˜์˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. * **๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ (Bounded Context):** ์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด๊ฐ€ ์ ์šฉ๋˜๋Š” ๋…ผ๋ฆฌ์ ์ธ ๊ฒฝ๊ณ„์ž…๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋‹จ์–ด(์˜ˆ: '์ƒํ’ˆ')๋ผ๋„ ์ปจํ…์ŠคํŠธ(์ฃผ๋ฌธ vs ๋ฐฐ์†ก)์— ๋”ฐ๋ผ ๊ทธ ์˜๋ฏธ์™€ ๋ชจ๋ธ์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ์„ ์ธ์ •ํ•˜๊ณ  ๊ฒฉ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. * **์ปจํ…์ŠคํŠธ ๋งต (Context Map):** ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ๊ฐ„์˜ ๊ด€๊ณ„(ํ˜‘๋ ฅ, ์˜์กด ๋“ฑ)๋ฅผ ์‹œ๊ฐํ™”ํ•œ ์ง€๋„์ž…๋‹ˆ๋‹ค. ### 2. ์ „์ˆ ์  ์„ค๊ณ„ (Tactical Design) ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ๋‚ด๋ถ€์˜ ๊ตฌ์ฒด์ ์ธ ๋ชจ๋ธ๋ง ๋„๊ตฌ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. * **์—”ํ‹ฐํ‹ฐ (Entities):** ์‹๋ณ„์ž(ID)์— ์˜ํ•ด ์ •์˜๋˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์†์„ฑ์ด ๋ณ€ํ•˜๋”๋ผ๋„ ์‹๋ณ„์ž๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๋™์ผํ•œ ๊ฐ์ฒด๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค. * **๊ฐ’ ๊ฐ์ฒด (Value Objects):** ์†์„ฑ๊ฐ’ ๊ทธ ์ž์ฒด๋กœ ์ •์˜๋˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์‹๋ณ„์ž๊ฐ€ ์—†์œผ๋ฉฐ ๋ณดํ†ต ๋ถˆ๋ณ€(Immutable) ์ƒํƒœ๋กœ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค. * **์• ๊ทธ๋ฆฌ๊ฑฐํŠธ (Aggregates):** ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์˜ ๋‹จ์œ„๋กœ ์ทจ๊ธ‰๋˜๋Š” ๋„๋ฉ”์ธ ๊ฐ์ฒด๋“ค์˜ ๊ตฐ์ง‘์ž…๋‹ˆ๋‹ค. ๊ฐ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋Š” '๋ฃจํŠธ(Root)' ์—”ํ‹ฐํ‹ฐ๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€์™€ ์†Œํ†ตํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. * **๋„๋ฉ”์ธ ์„œ๋น„์Šค (Domain Services):** ํŠน์ • ์—”ํ‹ฐํ‹ฐ๋‚˜ ๊ฐ’ ๊ฐ์ฒด์— ์†ํ•˜๊ธฐ ์–ด๋ ค์šด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฌด์ƒํƒœ(Stateless) ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. * **๋ฆฌํฌ์ง€ํ† ๋ฆฌ (Repositories):** ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ๋ฃจํŠธ๋ฅผ ์˜๊ตฌ ์ €์žฅ์†Œ์— ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. --- --- ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„๋Š” ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์‚ฌํ›„์— ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ์œผ๋กœ ์‚ผ๋Š” ์ฒ ํ•™์ด๋‹ค [1]. ์ด ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์š” ํŒจํ„ด๊ณผ ์›์น™์„ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์ ์šฉํ•˜์—ฌ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•œ๋‹ค. * **์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด (Ubiquitous Language):** ๊ฐœ๋ฐœ์ž์™€ ๋น„์ฆˆ๋‹ˆ์Šค ์ดํ•ด๊ด€๊ณ„์ž ๊ฐ„์˜ ์˜์‚ฌ์†Œํ†ต ๊ฒฉ์ฐจ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋ชจ๋‘๊ฐ€ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์šฉ์–ด ์‚ฌ์ „์ด๋‹ค [1]. ์ด ์–ธ์–ด๋Š” ๋Œ€ํ™”, ๋ฌธ์„œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹ค์ œ ์†Œ์Šค ์ฝ”๋“œ ์ž์ฒด์—๋„ ์ผ๊ด€๋˜๊ฒŒ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•œ๋‹ค [3, 4]. * **๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ (Bounded Context):** ๊ฑฐ๋Œ€ํ•˜๊ณ  ๋ณต์žกํ•œ ๋„๋ฉ”์ธ์„ ๋” ์ž‘๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์šด ํ•˜์œ„ ๋„๋ฉ”์ธ์œผ๋กœ ๋ถ„ํ• ํ•˜๋Š” ๋ช…ํ™•ํ•œ ๊ฒฝ๊ณ„์ด๋‹ค [5, 6]. ๊ฐ ์ปจํ…์ŠคํŠธ๋Š” ๊ณ ์œ ํ•œ ๋ชจ๋ธ๊ณผ ์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด๋ฅผ ๊ฐ€์ง€๋ฉฐ(์˜ˆ: "์ฃผ๋ฌธ ๊ด€๋ฆฌ", "๊ณ ๊ฐ ์ง€์›"), ์ฝ”๋“œ๋ฒ ์ด์Šค ์ƒ์—์„œ๋„ ์ด๋Ÿฌํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์šฉ์–ด๋กœ ๋ช…๋ช…๋œ ๋ชจ๋“ˆ ๋ฐ ํด๋” ๊ตฌ์กฐ๋ฅผ ํ˜•์„ฑํ•œ๋‹ค [2, 5]. * **์• ๊ทธ๋ฆฌ๊ฑฐํŠธ (Aggregates) ๋ฐ ์—”ํ‹ฐํ‹ฐ/๊ฐ’ ๊ฐ์ฒด:** ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋Š” ๋‹จ์ผ ๋‹จ์œ„๋กœ ์ทจ๊ธ‰๋  ์ˆ˜ ์žˆ๋Š” ๋„๋ฉ”์ธ ๊ฐ์ฒด๋“ค์˜ ๊ตฐ์ง‘์œผ๋กœ, ๋ฐ์ดํ„ฐ ํŠธ๋žœ์žญ์…˜๊ณผ ์ผ๊ด€์„ฑ์„ ๋‹จ์ˆœํ™”ํ•œ๋‹ค [5]. ๊ทธ ๋‚ด๋ถ€์—๋Š” ๊ณ ์œ ํ•œ ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง€๋Š” '์—”ํ‹ฐํ‹ฐ(Entities)'์™€ ์†์„ฑ๋งŒ์œผ๋กœ ์ •์˜๋˜๋Š” '๊ฐ’ ๊ฐ์ฒด(Value Objects)'๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, DDD ์ ์šฉ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋“ฑ์žฅํ•˜๋Š” ํŒจํ„ด์ด๋‹ค [2, 5]. * **๋„๋ฉ”์ธ ๋กœ์ง์˜ ๊ฒฉ๋ฆฌ ๋ฐ ๋ชจ๋“ˆํ™”:** ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ UI ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ฐ™์€ ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ฒ˜ ๋ฌธ์ œ์™€ ๋ถ„๋ฆฌํ•˜์—ฌ ๊น”๋”ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๋ฐ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์šด ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ์ƒ์„ฑํ•œ๋‹ค [3]. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ์  ํŠน์ง•์€ ์ปจํ…์ŠคํŠธ๊ฐ€ ์„œ๋กœ ๊ฒน์น˜๊ฑฐ๋‚˜ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ๋…๋ฆฝ์„ฑ์„ ๋ณด์žฅํ•˜์—ฌ, ๋ชจ๋“ˆ์‹ ๋ชจ๋†€๋ฆฌ์Šค(Modular Monolith)๋ฅผ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ๋ณ‘๋ ฌ ๊ฐœ๋ฐœ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค€๋‹ค [4, 6, 7]. ## โš–๏ธ Trade-offs & Caveats - **๊ฐ€ํŒŒ๋ฅธ ํ•™์Šต ๊ณก์„ ๊ณผ ๋†’์€ ์ „๋ฌธ์„ฑ ์š”๊ตฌ**: ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„ค๊ณ„ ํŒจํ„ด๊ณผ ์ถ”์ƒํ™” ๊ฐœ๋…์— ๋Œ€ํ•œ ์„ฑ์ˆ™ํ•œ ์ดํ•ด๊ฐ€ ํ•„์ˆ˜์ ์ด๋‹ค [4]. ์ด๋กœ ์ธํ•ด DDD์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ์†Œ๊ทœ๋ชจ ํŒ€์ด๋‚˜ ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š” ๋งค์šฐ ๊ฐ€ํŒŒ๋ฅธ ํ•™์Šต ๊ณก์„ ์ด ์š”๊ตฌ๋œ๋‹ค๋Š” ์ œ์•ฝ์ด ์žˆ๋‹ค [4]. - **ํƒ€ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด ๋„์ž…์˜ ์ „์ œ ์กฐ๊ฑด**: DDD์— ๋Œ€ํ•œ ์ „๋ฌธ์„ฑ์€ ๋‹จ์ˆœํžˆ ์„ค๊ณ„๋ฅผ ๋„˜์–ด์„œ ๋‹ค๋ฅธ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์„ ์ฑ„ํƒํ•˜๋Š” ๋ฐ ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‹œ์Šคํ…œ์˜ ๋ณ€๊ฒฝ ๋‚ด์—ญ์„ ๋ชจ๋‘ ์ €์žฅํ•˜๋Š” ์ด๋ฒคํŠธ ์†Œ์‹ฑ(Event Sourcing) ํŒจํ„ด์„ ๋„์ž…ํ•˜๋ ค ํ•  ๋•Œ, ํŒ€ ๋‚ด์— DDD์— ๋Œ€ํ•œ ์ถฉ๋ถ„ํ•œ ์ „๋ฌธ์„ฑ์ด ์—†๋‹ค๋ฉด ํ•ด๋‹น ํŒจํ„ด์˜ ๋„์ž…์„ ํ”ผํ•ด์•ผ ํ•œ๋‹ค [9]. --- * **ํ…Œ์ŠคํŠธ ์‹œ ๋ชจํ‚น(Mocking) ์‚ฌ์šฉ์˜ ์œ„ํ—˜์„ฑ** ๋„๋ฉ”์ธ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํ…Œ์ŠคํŠธํ•  ๋•Œ Mockito ๋“ฑ ๋ชจํ‚น ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๊ธฐ๋Šฅ์ ์œผ๋กœ ์ž˜๋ชป๋œ ๋™์ž‘์„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— ํ•˜๋“œ์ฝ”๋”ฉํ•˜๊ฒŒ ๋  ์œ„ํ—˜์ด ํฌ๋‹ค. ์ด ๊ฒฝ์šฐ ๋„๋ฉ”์ธ ๋กœ์ง์ด ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ๋ชจ์˜ ๊ฐ์ฒด(Mock)๊ฐ€ ์ž์ฒด์ ์ธ ๋…ผ๋ฆฌ๋ฅผ ์œ ์ง€ํ•ด ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•ด๋ฒ„๋ฆฌ๋Š” ์น˜๋ช…์ ์ธ ๊ฒฐํ•จ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋„๋ฉ”์ธ ๋‚ด๋ถ€ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๋ชจํ‚น์„ ์ง€์–‘ํ•˜๊ณ  ์‹ค์ œ ์ฝ”๋“œ๋‚˜ ์ธ๋ฉ”๋ชจ๋ฆฌ ์Šคํ…(Stub)์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ, ๋ชจํ‚น์€ ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ฒ˜ ์–ด๋Œ‘ํ„ฐ๋ฅผ ๊ฒฉ๋ฆฌ ํ…Œ์ŠคํŠธํ•  ๋•Œ๋งŒ ์ œํ•œ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค[10-13]. * **๋ฆฌ์†Œ์Šค-๋„๋ฉ”์ธ ๋น„๋Œ€์นญ์„ฑ(Resource-Domain Asymmetry)** ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ REST ๋ฆฌ์†Œ์Šค๋กœ ์ง์ ‘ ์ง๋ ฌํ™”ํ•˜๋Š” ๊ฒƒ์€ ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋„๋ฉ”์ธ ๋‚ด๋ถ€์—๋Š” ์™ธ๋ถ€์— ๋…ธ์ถœํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ธฐ์ค€(Criteria)์ด๋‚˜ ํ•„๋“œ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฆฌ์†Œ์Šค๋ฅผ ์œ„ํ•ด ์ „์šฉ ํด๋ž˜์Šค๋ฅผ ๋‘์–ด '์•ˆํ‹ฐ ์ฝ”๋Ÿฝ์…˜ ๋ ˆ์ด์–ด(Anti-Corruption Layer)' ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๋ฉด, ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋”๋ผ๋„ ๊ธฐ์กด ์›น API์˜ ํ˜•ํƒœ๊ฐ€ ๊นจ์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค[14, 15]. * **ํŒŒ๊ดด์  ๋””์ปคํ”Œ๋ง(Destructive Decoupling) ๋ฐ ๋ณต์žก๋„ ์ฆ๊ฐ€** ๋‹จ์ˆœํ•œ CRUD ์ˆ˜์ค€์˜ ์ž‘์€ ๊ธฐ๋Šฅ์—๊นŒ์ง€ DDD์™€ ํฌํŠธ-์–ด๋Œ‘ํ„ฐ ๊ตฌ์กฐ๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ์ ์šฉํ•˜๋ฉด ์˜คํžˆ๋ ค ๋ถˆํ•„์š”ํ•œ ์ถ”์ƒํ™”, ์ธํ„ฐํŽ˜์ด์Šค, ๋ ˆ์ด์–ด๊ฐ€ ๋‚จ๋ฐœ๋˜์–ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๊ทน๋„๋กœ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ๋‹ค[16]. ํ”„๋กœ์ ํŠธ์˜ ๋„๋ฉ”์ธ ๋ณต์žก๋„์— ๋งž์ถฐ ์ดˆ๊ธฐ ๋„์ž… ๋น„์šฉ์„ ์ƒ์‡„ํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์—์„œ ์ „๋žต์ ์œผ๋กœ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค[17]. --- ### โœ… Benefits * **๋น„์ฆˆ๋‹ˆ์Šค ์ •๋ ฌ:** ๊ธฐ์ˆ ์  ๊ตฌํ˜„์ด ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. * **๋ณต์žก์„ฑ ๊ด€๋ฆฌ:** ๊ฑฐ๋Œ€ํ•œ ์‹œ์Šคํ…œ์„ ๋…๋ฆฝ์ ์ธ ์ปจํ…์ŠคํŠธ๋กœ ๋‚˜๋ˆ„์–ด ์ธ์ง€์  ๊ณผ๋ถ€ํ•˜๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค. * **์œ ์—ฐ์„ฑ:** ๊ฐ ๋„๋ฉ”์ธ์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ง„ํ™”ํ•  ์ˆ˜ ์žˆ์–ด ๋ณ€ํ™”์— ๋น ๋ฅด๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ### โš ๏ธ Challenges * **๋†’์€ ์ดˆ๊ธฐ ๋น„์šฉ:** ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€์™€์˜ ๊ธด๋ฐ€ํ•œ ํ˜‘์—…๊ณผ ๋ถ„์„ ๊ณผ์ •์— ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค. * **์„ค๊ณ„ ๋‚œ์ด๋„:** ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ์˜ ๊ฒฝ๊ณ„๋ฅผ ์ž˜๋ชป ์„ค์ •ํ•  ๊ฒฝ์šฐ, ์‹œ์Šคํ…œ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์•„์ ธ ๋” ํฐ ํ˜ผ๋ž€์„ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * **์˜ค๋ฒ„ํ—ค๋“œ:** ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋‹จ์ˆœํ•œ CRUD ์•ฑ์—์„œ๋Š” ๊ตฌ์กฐ์  ๋ณต์žก์„ฑ๋งŒ ๋†’์ด๋Š” ๊ณผ์ž‰ ์—”์ง€๋‹ˆ์–ด๋ง์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. --- --- * **๋†’์€ ๊ตฌํ˜„ ๋ณต์žก์„ฑ:** ๊นŠ์ด ์žˆ๋Š” ๋„๋ฉ”์ธ ๋ชจ๋ธ๋ง์ด ํ•„์š”ํ•˜๊ณ  ํŒ€ ๊ฐ„์˜ ์ง€์†์ ์ธ ํ˜‘์—…์ด ๊ฐ•์ œ๋˜๋ฏ€๋กœ, ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ดˆ๊ธฐ์— ์„ค๊ณ„ํ•˜๊ณ  ๊ฒฝ๊ณ„๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ณผ์ •์˜ ๋ณต์žก์„ฑ์ด ๋†’๋‹ค [6, 8]. * **๋ง‰๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค ์š”๊ตฌ:** ๊ธฐ์ˆ  ํŒ€๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€์˜ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์ด ํ•„์ˆ˜์ ์ด๋ฉฐ, ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์„ ๋ถ„์„ํ•˜๊ณ  ์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด๋ฅผ ๋„์ถœํ•˜๊ธฐ ์œ„ํ•œ ์›Œํฌ์ˆ(์˜ˆ: ์ด๋ฒคํŠธ ์Šคํ† ๋ฐ) ๋“ฑ์˜ ๋†’์€ ๋ฆฌ์†Œ์Šค ์š”๊ตฌ๋Ÿ‰์ด ๋‹จ์ ์œผ๋กœ ์ž‘์šฉํ•œ๋‹ค [3, 8]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด] - [[Microservices Architecture]] - ์—ฐ๊ฒฐ ์ด์œ : MSA๋Š” ์„œ๋น„์Šค๋ฅผ ๋น„์ฆˆ๋‹ˆ์Šค ์—ญ๋Ÿ‰ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘๋ฉฐ, ์ด๋Š” DDD์˜ ํ•ต์‹ฌ ์ฒ ํ•™๊ณผ ์™„๋ฒฝํžˆ ๋งž๋‹ฟ์•„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [2]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: DDD๋กœ ๋„์ถœ๋œ ์„œ๋ธŒ๋„๋ฉ”์ธ์ด ์‹ค์ œ ๋ฌผ๋ฆฌ์ ์ธ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์—์„œ ์–ด๋–ป๊ฒŒ ๋…๋ฆฝ์ ์ธ ์„œ๋น„์Šค๋กœ ๋ฐฐํฌ๋˜๊ณ  ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. - [[Modular Monolith]] - ์—ฐ๊ฒฐ ์ด์œ : ๋ถ„์‚ฐ ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ๋ฅผ ์ทจํ•˜์ง€ ์•Š๋Š” ๋‹จ์ผ ์ฝ”๋“œ๋ฒ ์ด์Šค ํ™˜๊ฒฝ์—์„œ๋„ DDD๋ฅผ ํ™œ์šฉํ•ด ๋‚ด๋ถ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋“ˆ์˜ ๊ฒฝ๊ณ„๋ฅผ ์—„๊ฒฉํžˆ ๋‚˜๋ˆ„๋Š” ๋ฐ ํ™œ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [1, 7]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง(MSA)์„ ํ”ผํ•˜๋ฉด์„œ๋„ ์–ด๋–ป๊ฒŒ DDD๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ์˜ ๋ณต์žก์„ฑ์„ ํ†ต์ œํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. - [[Hexagonal Architecture]] - ์—ฐ๊ฒฐ ์ด์œ : ํฌํŠธ์™€ ์–ด๋Œ‘ํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ๊ธฐ์ˆ  ์ข…์†์„ฑ์œผ๋กœ๋ถ€ํ„ฐ ๋‚ด๋ถ€ ์ฝ”์–ด๋ฅผ ๊ฒฉ๋ฆฌํ•˜๋Š” ์ด ์•„ํ‚คํ…์ฒ˜๋Š” DDD์—์„œ ์ •์˜ํ•œ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณดํ˜ธํ•˜๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [3]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ธฐ์ˆ  ์Šคํƒ์œผ๋กœ๋ถ€ํ„ฐ ์™„๋ฒฝํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ตฌ์กฐ์  ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค. - [[Event Sourcing Pattern]] - ์—ฐ๊ฒฐ ์ด์œ : ์ด๋ฒคํŠธ ์†Œ์‹ฑ ํŒจํ„ด์„ ํšจ๊ณผ์ ์œผ๋กœ ์„ค๊ณ„ํ•˜๊ณ  ์šด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” DDD ์—ญ๋Ÿ‰์ด ์„ ์ œ์ ์œผ๋กœ ์š”๊ตฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [9]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ƒํƒœ ๋ณ€๊ฒฝ์ด ์ด๋ ฅ์„ ํ†ตํ•ด ๊ด€๋ฆฌ๋  ๋•Œ ๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ(์• ๊ทธ๋ฆฌ๊ฑฐํŠธ)์ด ์–ด๋–ป๊ฒŒ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์žฌ๊ตฌ์„ฑํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. #### [๋น„์ฆˆ๋‹ˆ์Šค/๋กœ์ง ๊ตฌ์„ฑ ์š”์†Œ] - [[DDD Aggregates]] - ์—ฐ๊ฒฐ ์ด์œ : DDD์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™๊ณผ ๋กœ์ง์„ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์บก์Аํ™”ํ•˜๋Š” ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ ๋‹จ์œ„์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [6]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ ์ˆ˜์ค€์—์„œ ๋„๋ฉ”์ธ์˜ ๊ทœ์น™๊ณผ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์ด ์–ด๋–ป๊ฒŒ ๋‹จ์ผ ํŠธ๋žœ์žญ์…˜ ๋‹จ์œ„๋กœ ๋ณดํ˜ธ๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค. - [[Subdomain]] - ์—ฐ๊ฒฐ ์ด์œ : ์‹œ์Šคํ…œ์˜ ์ „์ฒด ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ์˜ ์Šฌ๋ผ์ด์Šค๋ฅผ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋‹จ์œ„๋กœ ๋‚˜๋ˆˆ ๋ชจ๋ธ๋กœ, DDD ์ „๋žต์  ์„ค๊ณ„์˜ ๊ทผ๊ฐ„์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [6]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฑฐ๋Œ€ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋ฌธ์ œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘์€ ๊ตฌ์„ฑ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์ ธ ๊ฐ๊ฐ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋˜๋Š” ๋ชจ๋“ˆ๋กœ ๋งคํ•‘๋˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. ### Deeper Research Questions - ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„(DDD)์—์„œ ์ •์˜ํ•˜๋Š” 'Bounded Context'๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ๋ฌผ๋ฆฌ์  ๊ฒฝ๊ณ„์™€ ์–ด๋–ค ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์–ธ์ œ ์ด ๋‘˜์„ ์ผ์น˜์‹œํ‚ค๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ธ๊ฐ€? - ํŒ€ ๋‚ด์— DDD ์ „๋ฌธ์„ฑ์ด ๋ถ€์กฑํ•  ๋•Œ, ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋‚˜ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ฃ๋ถˆ๋ฆฌ ๋„์ž…ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๊ธฐ์ˆ  ๋ถ€์ฑ„์™€ ์‹คํŒจ ์‚ฌ๋ก€๋Š” ๋ฌด์—‡์ธ๊ฐ€? - ๋ชจ๋“ˆํ˜• ๋ชจ๋†€๋ฆฌ์Šค(Modular Monolith) ์•„ํ‚คํ…์ฒ˜ ํ™˜๊ฒฝ์—์„œ DDD์˜ Aggregate ๊ฐ„ ํ†ต์‹ ๊ณผ ๋ฐ์ดํ„ฐ ์ฐธ์กฐ๋Š” ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋˜์–ด์•ผ ๊ฒฐํ•ฉ๋„(Coupling)๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋Š”๊ฐ€? - ์ด๋ฒคํŠธ ์†Œ์‹ฑ(Event Sourcing) ํŒจํ„ด์„ ๊ตฌํ˜„ํ•  ๋•Œ, DDD์˜ ์—ญ๋Ÿ‰์ด ํ•„์ˆ˜์ ์ด๋ผ๊ณ  ํ‰๊ฐ€๋ฐ›๋Š” ์ด์œ ๋Š” ์ƒํƒœ ๊ด€๋ฆฌ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ์ด๋ฒคํŠธ ํ๋ฆ„ ์‚ฌ์ด์˜ ์–ด๋–ค ์ƒํ˜ธ์ž‘์šฉ ๋•Œ๋ฌธ์ธ๊ฐ€? - ๊ธฐ์กด์˜ ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ(Data-Driven) ๋˜๋Š” ํŠธ๋žœ์žญ์…˜ ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜ ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์„ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„๋กœ ์ „ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ์ ์ง„์ ์ธ ๋ฆฌํŒฉํ† ๋ง ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? ### Practical Application Contexts - **Implementation:** ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์ด ํฌํ•จ๋œ ์—”ํ‹ฐํ‹ฐ(Aggregate)๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ, ์™ธ๋ถ€ DB ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ UI ๊ด€๋ จ ์ฝ”๋“œ๊ฐ€ ๋„๋ฉ”์ธ ๋ชจ๋ธ์— ์นจํˆฌํ•˜์ง€ ์•Š๋„๋ก ์ถ”์ƒํ™”๋œ ํฌํŠธ/์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. - **System Design:** ์ดˆ๊ธฐ ์Šคํƒ€ํŠธ์—…์—์„œ ๋ฌด๋ฆฌํ•˜๊ฒŒ MSA๋ฅผ ๋„์ž…ํ•˜๊ธฐ๋ณด๋‹ค, ์šฐ์„  ๋ชจ๋“ˆํ˜• ๋ชจ๋†€๋ฆฌ์Šค ๊ตฌ์กฐ ํ•˜์—์„œ DDD๋ฅผ ํ†ตํ•ด ๋…ผ๋ฆฌ์  ๋„๋ฉ”์ธ ๊ฒฝ๊ณ„๋ฅผ ์žก์•„๋‘์–ด ํ›—๋‚  ํ™•์žฅ์— ๋Œ€๋น„ํ•˜๋Š” ์ฒญ์‚ฌ์ง„์œผ๋กœ ํ™œ์šฉํ•œ๋‹ค. - **Operation / Maintenance:** ๋ช…ํ™•ํ•œ ์„œ๋ธŒ๋„๋ฉ”์ธ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์˜์—ญ์„ ์‹ ์†ํ•˜๊ฒŒ ํŒŒ์•…ํ•˜๊ณ , ๋‹ค๋ฅธ ๋ชจ๋“ˆ๋กœ์˜ ๋ฒ„๊ทธ ์ „ํŒŒ(Cascading failure)๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์œ ์ง€๋ณด์ˆ˜ํ•œ๋‹ค. - **Learning Path:** ๋””์ž์ธ ํŒจํ„ด โ†’ ํด๋ฆฐ/ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜์˜ ์ดํ•ด โ†’ DDD ์ „๋žต์  ์„ค๊ณ„(Bounded Context) โ†’ DDD ์ „์ˆ ์  ์„ค๊ณ„(Aggregate, Value Object) โ†’ ์ด๋ฒคํŠธ ์†Œ์‹ฑ ์ ์šฉ ์ˆœ์œผ๋กœ ์‹ฌํ™” ํ•™์Šต์„ ์ง„ํ–‰ํ•œ๋‹ค. - **My Project Relevance:** ๋ณต์žกํ•œ ๋„๋ฉ”์ธ(์˜ˆ: ๊ธˆ์œต, ๊ฒฐ์ œ, ํ—ฌ์Šค์ผ€์–ด ๋“ฑ) ํ”„๋กœ์ ํŠธ์—์„œ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„, ์™ธ๋ถ€ ์ธํ”„๋ผ ์š”์ธ์— ์˜ํ•ด ์ฝ”๋“œ๊ฐ€ ๋ง๊ฐ€์ง€์ง€ ์•Š๋„๋ก ์•ˆ์ „ํ•œ ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์œผ๋กœ ์ ์šฉ๋œ๋‹ค. ### Adjacent Topics - [[CQRS (Command Query Responsibility Segregation)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. (โ€ป ์ฐธ๊ณ : ์ผ๋ฐ˜์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ ๋งฅ๋ฝ์—์„œ ์ด๋ฒคํŠธ ์†Œ์‹ฑ๊ณผ ํ•จ๊ป˜ DDD ๋ชจ๋ธ์˜ ์ƒํƒœ ์กฐํšŒ์™€ ๋ช…๋ น ์ฒ˜๋ฆฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ์ „๋žต์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ์ œ๊ณต๋œ ์†Œ์Šค ๋‚ด์—์„œ๋Š” DDD์™€์˜ ์ง์ ‘์ ์ธ ๋งตํ•‘ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•จ) --- *Last updated: 2026-05-02* --- ### Related Concepts #### [๊ด€๊ณ„ ์œ ํ˜• A: ์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] - [[Hexagonal Architecture]] - ์—ฐ๊ฒฐ ์ด์œ : ์œก๊ฐํ˜• ์•„ํ‚คํ…์ฒ˜๋Š” DDD์˜ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ์™ธ๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋ถ€ํ„ฐ ๊ฒฉ๋ฆฌ์‹œํ‚ค๊ณ  ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ์™„๋ฒฝํ•œ ๊ตฌ์กฐ์  ๊ป์งˆ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค[3]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํฌํŠธ(Ports)์™€ ์–ด๋Œ‘ํ„ฐ(Adapters)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์˜์กด์„ฑ์ด ๋ฌด์กฐ๊ฑด ๋„๋ฉ”์ธ ์ฝ”์–ด ์ชฝ์„ ํ–ฅํ•˜๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๊ตฌ์ฒด์  ๊ตฌํ˜„ ๋ฐฉ์‹[3]. - [[Clean Architecture]] - ์—ฐ๊ฒฐ ์ด์œ : ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™(์—”ํ‹ฐํ‹ฐ์™€ ์œ ์Šค์ผ€์ด์Šค)์„ ๊ฐ€์žฅ ์•ˆ์ชฝ ์ค‘์‹ฌ์— ๋‘๊ณ , ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ ์„ธ๋ถ€ ๊ธฐ์ˆ ์„ ์™ธ๋ถ€ ๊ณ„์ธต์— ๋ฐฐ์น˜ํ•˜๋Š” ์˜์กด์„ฑ ์—ญ์ „ ์›์น™์„ DDD์™€ ๊ณต์œ ํ•œ๋‹ค[18]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ณ„์ธต ๊ฐ„ ๊ฒฝ๊ณ„(Boundaries)๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋™์‹ฌ์› ๋ชจ๋ธ์—์„œ ์ œ์–ด์˜ ํ๋ฆ„์ด ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌ๋˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค[18]. #### [๊ด€๊ณ„ ์œ ํ˜• B: ๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] - [[Anti-Corruption Layer]] - ์—ฐ๊ฒฐ ์ด์œ : ์™ธ๋ถ€ ์‹œ์Šคํ…œ(์˜ˆ: ์„œ๋“œํŒŒํ‹ฐ API, DB, UI)๊ณผ์˜ ํ†ต์‹  ์‹œ ๊ทธ ์˜ํ–ฅ์ด ๋„๋ฉ”์ธ ์ฝ”์–ด๋กœ ์นจํˆฌํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ง‰๋Š” DDD์˜ ์ „์ˆ ์  ํŒจํ„ด ์ค‘ ํ•˜๋‚˜์ด๋‹ค[2]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฐ์ดํ„ฐ ํ‘œํ˜„ ๋ฐฉ์‹(DTO)๊ณผ ๋„๋ฉ”์ธ ๋ชจ๋ธ ๊ฐ„์˜ ๊ตฌ์กฐ์  ์ฐจ์ด๋ฅผ ์–ด๋Œ‘ํ„ฐ ๊ณ„์ธต์—์„œ ๋ฒ„ํผ๋งํ•˜๊ณ  ๋ณ€ํ™˜ํ•˜๋Š” ์ด์œ ์™€ ์„ค๊ณ„๋ฒ•[15]. - [[CQRS]] - ์—ฐ๊ฒฐ ์ด์œ : ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ์ž‘์—…๊ณผ ๋„๋ฉ”์ธ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š”(์“ฐ๊ธฐ) ์ž‘์—…์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด DDD ๋ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์„ค๊ณ„ ์‹œ ์ž์ฃผ ๋„์ž…๋œ๋‹ค[7, 19]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ๊ธฐ ์ตœ์ ํ™” ์ฟผ๋ฆฌ์™€ ์“ฐ๊ธฐ๋ฅผ ์œ„ํ•œ ๋ฌด๊ฑฐ์šด ORM ๋„๊ตฌ๋ฅผ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํŒจํ„ด์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฑ์—”๋“œ ์ตœ์ ํ™” ๊ธฐ๋ฒ•[19]. ### Deeper Research Questions - DDD์˜ '๋ณดํŽธ์  ์–ธ์–ด(Ubiquitous Language)'๋ฅผ ์‹ค์ œ ํ”„๋ ˆ์ž„์›Œํฌ ์†Œ์Šค์ฝ”๋“œ(ํด๋ž˜์Šค๋ช…, ๋ณ€์ˆ˜๋ช…, ํŒจํ‚ค์ง€๋ช…)์— ๋ฐ˜์˜ํ•˜๊ณ ์ž ํ•  ๋•Œ, ๊ธฐ์ˆ ์  ์ปจ๋ฒค์…˜๊ณผ ์–ธ์–ด ๊ฐ„์˜ ์ถฉ๋Œ์„ ์–ด๋–ป๊ฒŒ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? - Spring Boot๋‚˜ NestJS ํ™˜๊ฒฝ์—์„œ ๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ๋ฅผ ํ”„๋ ˆ์ž„์›Œํฌ ์˜์กด์„ฑ ์—†์ด ์ˆœ์ˆ˜ ๊ฐ์ฒด(POJO ๋“ฑ)๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ์˜์†์„ฑ(Persistence)์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋งคํ•‘ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ์˜ ํ•ด๊ฒฐ์ฑ…์€ ๋ฌด์—‡์ธ๊ฐ€? - ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ ์ ์šฉ ์‹œ ๋„๋ฉ”์ธ ํ…Œ์ŠคํŠธ์—์„œ ๋ชจํ‚น(Mocking)์„ ๋ฐฐ์ œํ•ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™์„ ์ง€ํ‚ค๋ฉด์„œ, ์™ธ๋ถ€ API๋‚˜ ์„œ๋“œํŒŒํ‹ฐ ํ†ต์‹ ์ด ํ•„์ˆ˜์ ์ธ ๋กœ์ง์„ ๊ฒฉ๋ฆฌ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ์ธ๋ฉ”๋ชจ๋ฆฌ ์Šคํ…(Stub)์„ ๊ตฌ์ถ•ํ•˜๋Š” ์ตœ์ ์˜ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? - ๋ชจ๋†€๋ฆฌ์‹ ๊ตฌ์กฐ์—์„œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋กœ ์ ์ง„์  ์ „ํ™˜์„ ์‹œ๋„ํ•  ๋•Œ, DDD์˜ '์ œํ•œ๋œ ์ปจํ…์ŠคํŠธ(Bounded Contexts)' ๊ฐœ๋…์ด ์„œ๋น„์Šค ๊ฒฝ๊ณ„ ๋ถ„๋ฆฌ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ„๋ฆฌ์— ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ ์šฉ๋˜๋Š”๊ฐ€? - ํ”„๋ก ํŠธ์—”๋“œ ํ™˜๊ฒฝ(์˜ˆ: React, Vue)์—์„œ๋„ DDD ํŒจํ„ด์„ ์ฐจ์šฉํ•˜์—ฌ ์ˆœ์ˆ˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ UI ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ์˜์กด์„ฑ์„ ํšจ๊ณผ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ์‹ค์ „ ์„ค๊ณ„ ์‚ฌ๋ก€๋Š” ์–ด๋– ํ•œ๊ฐ€? ### Practical Application Contexts - **Implementation:** ๋ฐฑ์—”๋“œ(์˜ˆ: Java/Spring, NestJS) ๊ฐœ๋ฐœ ์‹œ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์ด ๋‹ด๊ธด ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด์— `@Entity` ๊ฐ™์€ ์ธํ”„๋ผ ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ์„ ์—„๊ฒฉํžˆ ๋ฐฐ์ œํ•˜์—ฌ ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ์ˆ ์— ๋น„์ข…์†์ ์ธ ์ฝ”์–ด ๊ตฌํ˜„[4, 20]. - **System Design:** ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ์‹œ ์‹œ์Šคํ…œ์„ '์ œํ•œ๋œ ์ปจํ…์ŠคํŠธ' ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์–ด ๋ชจ๋“ˆ ๋˜๋Š” ์„œ๋น„์Šค ๊ฐ„ ๊ฒฝ๊ณ„๋ฅผ ์„ค์ •ํ•˜๋ฉฐ, ํฌํŠธ์™€ ์–ด๋Œ‘ํ„ฐ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ํ†ต์‹ ์„ ํ—ˆ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„ ์ˆ˜๋ฆฝ[3, 21]. - **Operation / Maintenance:** DB๋ฅผ ๊ต์ฒดํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ ๊ฒฐ์ œ API ๊ณต๊ธ‰์ž๋ฅผ ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„, ๋„๋ฉ”์ธ ์ฝ”์–ด๋Š” ์ „ํ˜€ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ํ•ด๋‹น ์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„์ฒด๋งŒ ์ƒˆ๋กญ๊ฒŒ ๊ฐˆ์•„๋ผ์›Œ ์‹œ์Šคํ…œ์„ ์œ ์ง€๋ณด์ˆ˜ํ•จ[4, 22]. - **Learning Path:** ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ์œก๊ฐํ˜• ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ ๊ด€๋ฆฌ ๊ทœ์น™์„ ๋จผ์ € ํ•™์Šตํ•œ ํ›„, ํ•ด๋‹น ์•„ํ‚คํ…์ฒ˜ ์ฝ”์–ด ๋‚ด๋ถ€๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ํ•ด๋‹ต์œผ๋กœ์„œ DDD์˜ ์ „์ˆ /์ „๋žต ํŒจํ„ด์„ ํ•™์Šต. - **My Project Relevance:** ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ฑด์ด ์ž์ฃผ ๋ฐ”๋€Œ๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ”„๋กœ์ ํŠธ์—์„œ, ๋น„์ฆˆ๋‹ˆ์Šค ํ•ต์‹ฌ ์ฝ”๋“œ๊ฐ€ UI์™€ DB ๊ตฌ์กฐ ๋ณ€ํ™”์— ํœฉ์“ธ๋ฆฌ์ง€ ์•Š๋„๋ก ๋ณดํ˜ธํ•˜๋Š” ๊ฒฌ๊ณ ํ•œ ์•„ํ‚คํ…์ฒ˜ ๊ธฐ๋ฐ˜์œผ๋กœ ํ™œ์šฉ ๊ฐ€๋Šฅ. ### Adjacent Topics - [[Microservices Architecture]] - ํ™•์žฅ ๋ฐฉํ–ฅ: DDD์—์„œ ๋ถ„ํ• ํ•œ '์ œํ•œ๋œ ์ปจํ…์ŠคํŠธ(Bounded Contexts)'๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ ๋ฐ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ฐœ๋ณ„ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋‹จ์œ„๋กœ ๋งคํ•‘ํ•˜๊ณ , ์„œ๋น„์Šค ๊ฐ„ ํ†ตํ•ฉ ํŒจํ„ด ์„ค๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํ™•์žฅ[21]. --- *Last updated: 2026-05-02* --- ### Related Concepts * [[Bounded_Context]]: DDD์˜ ํ•ต์‹ฌ์ ์ธ ๊ฒฉ๋ฆฌ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. * [[Ubiquitous_Language]]: ํŒ€ ๋‚ด ์†Œํ†ต์˜ ์˜ค๋ฅ˜๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ธฐ๋ฐ˜ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. * [[Clean_Architecture]]: ๋„๋ฉ”์ธ์„ ์ค‘์•™์— ๋‘๊ณ  ์ธํ”„๋ผ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ์  ํ‹€์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. * [[Event_Storming]]: ๋น„์ฆˆ๋‹ˆ์Šค ํ๋ฆ„์„ ๋ถ„์„ํ•˜์—ฌ DDD ๋ชจ๋ธ์„ ๋„์ถœํ•˜๋Š” ์›Œํฌ์ƒต ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ### Practical Application Contexts * **Microservices:** ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฐ€์žฅ ์ด์ƒ์ ์ธ ๊ธฐ์ค€์ ์ด ๋ฉ๋‹ˆ๋‹ค. * **Enterprise Systems:** ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์ด ์–ฝํžŒ ๋Œ€๊ทœ๋ชจ ๊ธˆ์œต, ์ด์ปค๋จธ์Šค ์‹œ์Šคํ…œ์˜ ํ•„์ˆ˜ ์„ค๊ณ„ ์‚ฌ์ƒ์ž…๋‹ˆ๋‹ค. --- --- ### Related Concepts #### [๊ด€๊ณ„ ์œ ํ˜• A (์ฝ”๋“œ๋ฒ ์ด์Šค ๊ตฌ์กฐ ์‹๋ณ„ ๋ฐ ๊ธฐ๋ฐ˜ ํŒจํ„ด)] - [[๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ (Bounded Context)]] - ์—ฐ๊ฒฐ ์ด์œ : ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์„ ์ž‘๊ณ  ๋ชจ๋“ˆํ™”๋œ ๋ถ€๋ถ„์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ์„ค๊ณ„ ํŒจํ„ด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [9]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ํด๋” ๋ฐ ํŒจํ‚ค์ง€๊ฐ€ ๊ธฐ์ˆ ์  ๊ธฐ๋Šฅ์ด ์•„๋‹Œ ๋น„์ฆˆ๋‹ˆ์Šค ์ฑ…์ž„ ๋‹จ์œ„๋กœ ์–ด๋–ป๊ฒŒ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋Š”์ง€ ๊ตฌ์กฐ์  ๊ฒฝ๊ณ„๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [2, 6]. - [[์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด (Ubiquitous Language)]] - ์—ฐ๊ฒฐ ์ด์œ : ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€์™€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณต์œ ํ•˜๋Š” ํ•ต์‹ฌ ์–ธ์–ด๋กœ, ์†Œ์Šค ์ฝ”๋“œ์˜ ๋ช…๋ช… ๊ทœ์น™์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [1, 3]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ, ๋ณ€์ˆ˜๋ช…์— ๋‹ด๊ธด ๋น„์ฆˆ๋‹ˆ์Šค ์˜๋„๋ฅผ ์ •ํ™•ํžˆ ํ•ด์„ํ•˜๊ณ  ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๊ทœ์น™์„ฑ์„ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค€๋‹ค [2, 4]. #### [๊ด€๊ณ„ ์œ ํ˜• B (๊ตฌํ˜„ ๊ฐ์ฒด ๋ชจ๋ธ๋ง)] - [[์• ๊ทธ๋ฆฌ๊ฑฐํŠธ (Aggregates)]] - ์—ฐ๊ฒฐ ์ด์œ : ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๋‹จ์œ„๋กœ ๋ฌถ์–ด ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํŒจํ„ด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [5]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ๋ฒ ์ด์Šค ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ ๋ฐ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ์–ด๋–ค ๋ฃจํŠธ(Root) ๊ฐ์ฒด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ผ๊ด€๋˜๊ฒŒ ๊ด€๋ฆฌ๋˜๋Š”์ง€ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋‹ค [5]. - [[์—”ํ‹ฐํ‹ฐ์™€ ๊ฐ’ ๊ฐ์ฒด (Entities and Value Objects)]] - ์—ฐ๊ฒฐ ์ด์œ : ๋„๋ฉ”์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์‹๋ณ„์„ฑ(Identity) ์œ ๋ฌด์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜ํ•˜๋Š” ๊ธฐ๋ณธ ๊ตฌํ˜„ ๋‹จ์œ„์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [5]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํŠน์ • ํด๋ž˜์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜์†ํ™”๋˜๋Š” ๊ณ ์œ  ์ž์‚ฐ์ธ์ง€, ๋‹จ์ˆœํžˆ ์†์„ฑ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ์ด๋Š” ๊ฐ์ฒด์ธ์ง€ ์—ญํ• ๊ณผ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค [5]. ### Deeper Research Questions - ์ด๋ฒคํŠธ ์Šคํ† ๋ฐ(Event Storming) ์›Œํฌ์ˆ์„ ํ†ตํ•ด ๋„์ถœ๋œ ๋„๋ฉ”์ธ ๋ชจ๋ธ๊ณผ ์ด๋ฒคํŠธ๋“ค์ด ์‹ค์ œ ์†Œ์Šค ์ฝ”๋“œ(์—”ํ‹ฐํ‹ฐ, ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ๋“ฑ)๋กœ ์–ด๋–ป๊ฒŒ ๋งคํ•‘ ๋ฐ ๊ตฌํ˜„๋˜๋Š”๊ฐ€? [3] - ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ๊ฐ„์˜ ์˜์กด์„ฑ๊ณผ ํ†ต์‹  ๋ฐฉ์‹์„ ๋ช…์‹œ์ ์œผ๋กœ ์ •์˜ํ•˜๋Š” ์ปจํ…์ŠคํŠธ ๋งคํ•‘(Context Mapping)์€ ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„œ ์–ด๋–ป๊ฒŒ ๊ฐ€์‹œํ™”๋˜๋Š”๊ฐ€? [7] - ๋„๋ฉ”์ธ ๋กœ์ง์„ ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ฒ˜๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ ์š”์†Œ๋กœ๋ถ€ํ„ฐ ์™„๋ฒฝํžˆ ๊ฒฉ๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ์„ค๊ณ„ ๊ธฐ๋ฒ•์ด๋‚˜ ์˜์กด์„ฑ ๊ทœ์น™์ด ์ถ”๊ฐ€๋กœ ๋™์›๋˜๋Š”๊ฐ€? [3] - ๋ชจ๋†€๋ฆฌ์‹ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋˜๋Š” ๋ชจ๋“ˆ์‹ ๋ชจ๋†€๋ฆฌ์Šค๋กœ ๋ถ„ํ•ดํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ์˜ ์„ค์ •์ด ์–ด๋–ค ์ „๋žต์  ๊ธฐ์ค€์„ ์ œ๊ณตํ•˜๋Š”๊ฐ€? [4] - ์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด๊ฐ€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ณ€์งˆ๋˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋ฒ ์ด์Šค์™€ ๋ฌธ์„œ ์ „์ฒด์— ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€๋˜๋„๋ก ํ•˜๋Š” ์‹ค์ฒœ์  ๊ฒ€์ฆ ๋ฐฉ์•ˆ์€ ๋ฌด์—‡์ธ๊ฐ€? [4] ### Practical Application Contexts - **Implementation:** ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™์ด๋‚˜ UI ํ”„๋ ˆ์ž„์›Œํฌ ์ข…์†์„ฑ์„ ๋ฐฐ์ œํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆœ์ˆ˜ํ•œ ์ฝ”๋“œ ๋ชจ๋ธ๋กœ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค [3]. - **System Design:** ๊ฑฐ๋Œ€ํ•˜๊ณ  ๋ณต์žกํ•œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์„ ๊ธฐ์ˆ ์  ๋ ˆ์ด์–ด๊ฐ€ ์•„๋‹Œ '๊ฒฐ์ œ ์ฒ˜๋ฆฌ', '์‚ฌ์šฉ์ž ๊ด€๋ฆฌ' ๋“ฑ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ๋‹จ์œ„(๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ)๋กœ ๋ถ„ํ• ํ•˜์—ฌ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ๋…๋ฆฝ์ ์ธ ๊ตฌ์กฐ๋กœ ์„ค๊ณ„ํ•  ๋•Œ ์ ์šฉ๋œ๋‹ค [5, 10]. - **Operation / Maintenance:** ๊ฐœ๋ณ„ ๋„๋ฉ”์ธ ๋ชจ๋“ˆ์ด ๋ช…ํ™•ํ•œ ๊ฒฝ๊ณ„๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ์ „์ฒด ์‹œ์Šคํ…œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ํŠน์ • ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ์— ๋ฐœ์ƒํ•œ ๋ฒ„๊ทธ๋งŒ์„ ๊ณ ๋ฆฝ์‹œ์ผœ ๋””๋ฒ„๊น…ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•  ์ˆ˜ ์žˆ๋‹ค [11]. - **Learning Path:** ๋ฐฉ๋Œ€ํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฒ˜์Œ ๋งˆ์ฃผํ–ˆ์„ ๋•Œ, ์„ธ๋ถ€์ ์ธ ์ฝ”๋“œ ๊ตฌํ˜„(Bottom-up)์„ ์ฝ๊ธฐ ์ „์— ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ์™€ ์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ์˜๋„๋ฅผ ๋จผ์ € ํŒŒ์•…ํ•˜๋Š” ํ•˜ํ–ฅ์‹(Top-down) ์˜ค๋ฆฌ์—”ํ…Œ์ด์…˜ ์ „๋žต์œผ๋กœ ํ™œ์šฉ๋œ๋‹ค [2]. - **My Project Relevance:** ๋ณต์žกํ•˜๊ฒŒ ์–ฝํžŒ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๊ฑฐ๋‚˜, ์ƒˆ๋กœ์šด ํŒ€์›์ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๊ฐ•ํ•œ ์‹œ์Šคํ…œ ๊ตฌ์กฐ๋ฅผ ๋‹จ๊ธฐ๊ฐ„ ๋‚ด์— ํ•ด๋…ํ•˜๊ณ  ์˜จ๋ณด๋”ฉํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ ๊ตฌ์กฐ์  ๊ฐ€์ด๋“œ๋ผ์ธ์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ### Adjacent Topics - [[ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ (Clean Architecture)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋„๋ฉ”์ธ ๋กœ์ง๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ์—”ํ‹ฐํ‹ฐ๋ฅผ ์™ธ๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋ถ€ํ„ฐ ๊ฒฉ๋ฆฌ์‹œํ‚จ๋‹ค๋Š” ์„ค๊ณ„ ์ฒ ํ•™์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ, DDD ๋ชจ๋ธ์„ ์–ด๋–ป๊ฒŒ ์˜์กด์„ฑ ์—ญ์ „์„ ํ†ตํ•ด ์‹œ์Šคํ…œ ๋‚ด๋ถ€์˜ ์ค‘์‹ฌ์— ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ๊ตฌ์กฐ์  ์ดํ•ด๋กœ ํ™•์žฅ๋œ๋‹ค [2, 12]. - [[๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ (Microservices Architecture)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: DDD์˜ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌ ๊ฐ€๋Šฅํ•œ ๋…๋ฆฝ๋œ ๋ฐฐํฌ ๋‹จ์œ„๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ๋กœ์„œ, ๋„๋ฉ”์ธ ๊ฐ„์˜ ๋„คํŠธ์›Œํฌ ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ ํ†ต์‹ ๊ณผ ์„œ๋น„์Šค ๋ถ„ํ•ด ์ „๋žต์œผ๋กœ ํ•™์Šต์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค [4, 13]. --- *Last updated: 2026-05-02* ## ๐Ÿ’ก Adjacent Topics * [[Microservices_Architecture]]: DDD์˜ ์ „๋žต์  ์„ค๊ณ„๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค ๊ฐ„ ๋А์Šจํ•œ ๊ฒฐํ•ฉ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. * [[Layered_Architecture]]: ๊ธฐ์ˆ ์  ๊ณ„์ธต ๋ถ„๋ฆฌ์™€ ๋„๋ฉ”์ธ ์ค‘์‹ฌ ๋ถ„๋ฆฌ์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๋Š” ๋น„๊ต๊ตฐ์ž…๋‹ˆ๋‹ค. * [[Event_Driven_Architecture]]: ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ๊ฐ„์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ์ „ํŒŒํ•˜์—ฌ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. --- *Last updated: 2026-05-02*