LUCATHREE.COM

← Back to list
🧐 TIL

[DDD] DDD와 μ•„ν‚€ν…μ²˜

μž‘μ„±μΌ:
TILDDDArchitecture

μ•„μΌ€ν…μ²˜μ˜ μ—­ν• 

μ•„ν‚€ν…μ²˜λŠ” 지식을 ν‘œν˜„ν•œ μ½”λ“œλ₯Ό μ μž¬μ μ†Œμ— λ°°μΉ˜ν•˜λŠ” μ›μΉ™μœΌλ‘œ 도메인 주도 섀계와 ν•¨κ»˜ 자주 λ“±μž₯ν•˜λŠ” μ£Όμ œμ΄μ§€λ§Œ 도메인 주도 섀계 μžμ²΄κ°€ νŠΉμ • μ•„ν‚€ν…μ²˜λ₯Ό μ „μ œλ‘œ ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€.
ν•˜μ§€λ§Œ 쒋은 μ•„ν‚€ν…μ²˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 도메인 κ·œμΉ™μ΄ 제자리λ₯Ό λ²—μ–΄λ‚˜λŠ” 것을 방지함과 λ™μ‹œμ— ν•œκ³³μ— λͺ¨μ΄κ²Œ ν•˜μ—¬ μ†Œν”„νŠΈμ›¨μ–΄κ°€ λŠμž„μ—†λŠ” κ°œμ„ μ„ 버틸 수 μžˆλŠ” ꡬ쑰λ₯Ό κ°–κ²Œ ν•΄μ€€λ‹€.
도메인 주도 섀계가 μ•„ν‚€ν…μ²˜μ—μ„œ κΈ°λŒ€ν•˜λŠ” 것은 λ ˆμ΄μ–΄ 뢄리λ₯Ό 톡해 도메인 객체가 μ„œλ‘œ μ–½νžˆμ§€ μ•Šκ³  역할을 지킬 수 μžˆλ„λ‘ ν•˜λŠ” κ²ƒμœΌλ‘œ, μ΄κ²ƒλ§Œ μ§€μΌœμ§„λ‹€λ©΄ μ–΄λ–€ μ•„ν‚€ν…μ²˜κ°€ μ‚¬μš©λ˜μ–΄λ„ λ¬΄λ°©ν•˜λ‹€.

μ£Όμš” μ•„ν‚€ν…μ²˜

κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜ (Layered Architecture)

κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜λŠ” κ΅¬μ„±μš”μ†Œλ“€μ„ 곡톡적인 νŠΉμ„±μ— 따라 μ—¬λŸ¬ 측의 μˆ˜ν‰μ μΈ λ ˆμ΄μ–΄λ‘œ λ‚˜λˆ„μ–΄ λ‚˜νƒ€λ‚Έ ꡬ쑰닀. 도메인 주도 μ„€κ³„μ—μ„œ λ§ν•˜λŠ” κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜λŠ” μ•„λž˜ 4개의 κ³„μΈ΅μœΌλ‘œ κ΅¬μ„±λ˜λŠ” κ²½μš°κ°€ λ§Žλ‹€.
notion image
  • ν”„λ ˆμ  ν…Œμ΄μ…˜ 계측 (μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ 계측)
    • μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€μ™€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ—°κ²°λ˜λŠ” 계측이닀. μ£Όμš” μ±…μž„μ€ 좜λ ₯의 ν‘œμ‹œμ™€ μž…λ ₯의 ν•΄μ„μœΌλ‘œ μΈν„°νŽ˜μ΄μŠ€μ™€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ—°κ²°ν•˜κΈ°λ§Œ ν•œλ‹€λ©΄ 그것이 μ›Ή ν”„λ ˆμž„μ›Œν¬λ“  CLIλ“  λ¬΄λ°©ν•˜λ‹€.
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 계측
    • 도메인 κ³„μΈ΅μ˜ μš”μ†Œλ₯Ό μ§€νœ˜ν•˜λŠ” μš”μ†Œκ°€ λͺ¨μΈ 계측이닀. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλΉ„μŠ€κ°€ 이 계측에 μ†ν•˜λ©° 도메인 객체의 ν΄λΌμ΄μ–ΈνŠΈκ°€ λ˜μ–΄ μœ μŠ€μΌ€μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜κ³  μ§„ν–‰ν•˜λŠ” 역할을 ν•œλ‹€. 도메인 계측이 도메인을 λ‚˜νƒ€λ‚΄λŠ”λ° μ „λ…ν•˜λ €λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ³„μΈ΅μ˜ μš”μ†Œκ°€ 도메인 객체λ₯Ό 이끌고 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œμ„œ λ…λ¦½μ μœΌλ‘œ κΈ°λŠ₯ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.
  • 도메인 계측
    • κ°€μž₯ μ€‘μš”ν•œ κ³„μΈ΅μœΌλ‘œ 문제 해결에 ν•„μš”ν•œ 도메인 지식을 λ‹΄λŠ” 계측이닀. 이 계측에 도메인 객체λ₯Ό 뢄리해 두고 λ‹€λ₯Έ κ³„μΈ΅μœΌλ‘œ λ²—μ–΄λ‚˜μ§€ μ•Šκ²Œ ν•œλ‹€.
  • μΈν”„λΌμŠ€νŠΈλŸ­μ²˜ 계측
    • μžμ‹  μ™Έμ˜ 계측을 μ§€νƒ±ν•˜λŠ” 기술적 κΈ°λ°˜μ— λŒ€ν•œ 접근을 μ œκ³΅ν•œλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μœ„ν•œ λ©”μ‹œμ§€ 솑신, 도메인을 μœ„ν•œ νΌμ‹œμŠ€ν„΄μ‹œ 제곡 λͺ¨λ“ˆ 등이 이 계측에 ν¬ν•¨λœλ‹€. λ¦¬ν¬μ§€ν† λ¦¬μ˜ μΈν„°νŽ˜μ΄μŠ€λŠ” 도메인 계측에 μ†ν•˜μ§€λ§Œ 리포지토리 κ΅¬ν˜„μ²΄λŠ” μΈν”„λΌμŠ€νŠΈλŸ­μ²˜ 계측에 μ†ν•œλ‹€.
κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜μ˜ 원칙은 의쑴의 λ°©ν–₯이 μœ„μ—μ„œ μ•„λž˜λ₯Ό ν–₯ν•˜λ©° μƒμœ„μ— μžˆλŠ” κ³„μΈ΅λ§Œμ΄ μžμ‹ λ³΄λ‹€ ν•˜μœ„μ— μžˆλŠ” 계측에 μ˜μ‘΄ν•  수 μžˆλ‹€.

ν—₯사고날 μ•„ν‚€ν…μ²˜

ν—₯사고날 μ•„ν‚€ν…μ²˜λŠ” μœ‘κ°ν˜•μ΄ λͺ¨ν‹°ν”„인 μ•„ν‚€ν…μ²˜λ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό κ·Έ μ™Έ μΈν„°νŽ˜μ΄μŠ€ 및 μ €μž₯ 맀체λ₯Ό 자유둭게 νƒˆμ°© κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” 것이 핡심 μ½˜μ…‰νŠΈλ‹€.
μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μž…μΆœλ ₯이 λ“€μ–΄μ˜€κ³  λ‚˜κ°€λŠ” 포트(port)와 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ³€ν™˜ν•˜λŠ” 클래슀인 μ–΄λŒ‘ν„°(adapter)의 λͺ¨μ–‘λ§Œ 맞으면 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ½”μ–΄λ₯Ό λ°”κΎΈμ§€ μ•Šκ³ λ„ μ˜μ‘΄κ΄€κ³„λ₯Ό 관리할 수 μžˆλ‹€ν•˜μ—¬ ν¬νŠΈμ•€μ–΄λŒ‘ν„°(ports-and-adapters)라고도 λΆ€λ₯Έλ‹€.
μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λŒ€ν•œ μž…λ ₯을 λ°›λŠ” 포트 및 μ–΄λŒ‘ν„°λ₯Ό 프라이머리 ν¬νŠΈμ™€ 프라이머리 μ–΄λŒ‘ν„°λΌκ³  ν•˜λ©°, λ°˜λŒ€λ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 외뢀와 μƒν˜Έμž‘μš©ν•˜λŠ” 포트λ₯Ό 세컨더리 포트라고 ν•˜κ³  이λ₯Ό κ΅¬ν˜„ν•œ 객체λ₯Ό 세컨더리 μ–΄λŒ‘ν„°λΌκ³  ν•œλ‹€.
μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ΄μš©ν•΄ μ˜μ‘΄κ΄€κ³„λ₯Ό κ΄€λ¦¬ν•œλ‹€λŠ” 점이 κ°€μž₯ 큰 νŠΉμ§•μ΄μ§€λ§Œ κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜λ₯Ό μ‚¬μš©ν•˜λ”λΌλ„ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ΄μš©ν•œ μ˜μ‘΄κ΄€κ³„ 역전을 μ μš©ν•œλ‹€λ©΄ 큰 μ°¨μ΄λŠ” μ—†λ‹€.
notion image

클린 μ•„ν‚€ν…μ²˜

클린 μ•„ν‚€ν…μ²˜λŠ” 4개의 동심원이 μžˆλŠ” 그림으둜 μ„€λͺ…λ˜λŠ” μ•„ν‚€ν…μ²˜λ‘œ λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™μ„ μΊ‘μŠν™”ν•œ λͺ¨λ“ˆμ„ 쀑심에 λ‘λŠ” 것이 μ€‘μš”ν•œ μ½˜μ…‰νŠΈλ‹€.
μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ λ°μ΄ν„°μŠ€ν† μ–΄ 같은 세뢀사항은 κ°€μž₯자리둜 λ°€μ–΄λ‚΄κ³  μ˜μ‘΄κ΄€κ³„μ˜ λ°©ν–₯을 μ•ˆμͺ½μ„ ν–₯ν•˜κ²Œ ν•¨μœΌλ‘œμ¨ 세뢀사항이 좔상에 μ˜μ‘΄ν•˜λŠ” μ˜μ‘΄κ΄€κ³„ μ—­μ „ 원칙을 λ‹¬μ„±ν•œλ‹€. ν—₯사고날 μ•„ν‚€ν…μ²˜μ˜ μ½˜μ…‰νŠΈμ™€ 일λ§₯μƒν†΅ν•˜μ§€λ§Œ μ‹€μ§ˆμ μΈ κ΅¬ν˜„ 방법을 λͺ…μ‹œν•œλ‹€λŠ” μ μ—μ„œ 차이가 μžˆλ‹€.
notion image
Β 
Β