λ°μν

DIPμ λ³Έμ§
- DIP μμΉμ΄λ κ°μ²΄μμ μ΄λ€ Classλ₯Ό μ°Έμ‘°ν΄μ μ¬μ©ν΄μΌνλ μν©μ΄ μκΈ΄λ€λ©΄, κ·Έ Classλ₯Ό μ§μ μ°Έμ‘°νλ κ²μ΄ μλλΌ κ·Έ λμμ μμ μμ(μΆμ ν΄λμ€ or μΈν°νμ΄μ€)λ‘ μ°Έμ‘°νλΌλ μμΉμ΄λ€.
- DIPλ₯Ό λ¨μν "μΈν°νμ΄μ€λ₯Ό μ°λ©΄ λλ€"λ‘ μ΄ν΄νλ©΄ μ€λ¬΄μμ ν¨ν€μ§ ꡬ쑰λ₯Ό μλͺ» μ€κ³νκ² λλ€.
DDDμ λ μ΄μ΄ μν€ν μ²μ ν¨κ» μμ‘΄μ±μ λ°©ν₯μ μ μ΄νλ μμΉμΌλ‘ μ΄ν΄ν΄μΌ νλ€. - μ¦, κ³ μ°¨μ λͺ¨λ(λΉμ¦λμ€ λ‘μ§)μ΄ μ μ°¨μ λͺ¨λ(ꡬν μΈλΆμ¬ν)μ μμ‘΄νλ©΄ μλλ€λ κ²μ΄λ€.
- μΈν°νμ΄μ€μ μμ κΆμ΄ μ€μνλ€. μΈν°νμ΄μ€λ "μ¬μ©νλ μͺ½"μ΄ μμ νλ€
- μμ‘΄μ± λ°©ν₯μ νμ μμͺ½(λλ©μΈ)μ ν₯νλ€
- ꡬνμ²΄κ° λ°λμ΄λ λΉμ¦λμ€ λ‘μ§μ μν₯λ°μ§ μλλ€
- μμ λ³΄λ€ λ³νκΈ° μ¬μ΄ κ²μ μμ‘΄νλ κ²μ μΆμνλ μΈν°νμ΄μ€λ μμ ν΄λμ€λ₯Ό λμ΄ λ³νκΈ° μ¬μ΄ κ²μ λ³νμ μν₯λ°μ§ μκ² νλ κ²μ΄ μμ‘΄ μμ μμΉμ΄λ€.

“κ³ μ°¨μ λͺ¨λμ μ μ°¨μ λͺ¨λμ μμ‘΄νλ©΄ μ λλ€. μ΄ λ λͺ¨λ λͺ¨λ λ€λ₯Έ μΆμνλ κ²μ μμ‘΄ν΄μΌ νλ€.”
λ‘λ²νΈ C. λ§ν΄
- κ³ μ°¨μ λͺ¨λ
μΌλ°μ μΌλ‘ λ ν° κ·λͺ¨μ κΈ°λ₯μ μννλ ν΄λμ€, ν¨ν€μ§ λ±μ μλ―Ένλ€.
μ¦, μ¬μ©μ μΈν°νμ΄μ€μ κ΄λ ¨λ μμ μ νλ Controllerλ λΉμ¦λμ€ λ‘μ§μ μ²λ¦¬νλ Service κ³μΈ΅μ΄ κ³ μ°¨μ λͺ¨λμ μνλ€. - μ μ°¨μ λͺ¨λ
κ³ μ°¨μ λͺ¨λμμ μ μν κΈ°λ₯μ ꡬ체μ μΌλ‘ ꡬννλ ν΄λμ€ λ±μ μλ―Ένλ€.
μ£Όλ‘ λ°μ΄ν°λ² μ΄μ€ μ κ·Ό κ°μ²΄(DAO) ν΄λμ€λ νμΌ μ²λ¦¬λ₯Ό μν ν΄λμ€ λ±μ΄ μ μ°¨μ λͺ¨λμ μνλ€.
μ€λ¬΄ μμ: μ£Όλ¬Έ μμ€ν
μλ리μ€
μ£Όλ¬Έ κ²°μ λͺ¨λμ νμ¬λ ν μ€νμ΄λ¨ΌμΈ λ₯Ό μ°μ§λ§, ν₯ν μΉ΄μΉ΄μ€νμ΄, λ€μ΄λ²νμ΄λ‘ κ΅μ²΄λ μ μλ€.
DIP μλ° κ΅¬μ‘°
λ¬Έμ : μΈν°νμ΄μ€κ° infrastructureμ μμΌλ©΄, domainμ΄ infrastructureλ₯Ό importν΄μΌ ν¨μ κ°μ
com.example.shop
βββ domain
β βββ order
β βββ OrderService.java // λλ©μΈ μλΉμ€
βββ infrastructure
β βββ payment
β βββ PaymentGateway.java // μΈν°νμ΄μ€ ← λ¬Έμ !
β βββ TossPaymentGateway.java
...
// OrderService.java
// → κ³ μμ€(domain)μ΄ μ μμ€(infrastructure)μ μμ‘΄
import com.example.shop.infrastructure.payment.PaymentGateway; // β μλ°!
DIP μ€μ ꡬ쑰
com.example.shop
βββ domain
β βββ order
β βββ Order.java // μν°ν°
β βββ OrderService.java // λλ©μΈ μλΉμ€
β βββ PaymentProcessor.java // μΈν°νμ΄μ€ ← λλ©μΈμ΄ μμ ν΄μΌν¨!
β
βββ infrastructure
β βββ payment
β βββ TossPaymentProcessor.java // ꡬν체
β
βββ application
βββ order
βββ OrderFacade.java // 쑰립(DI μ€μ )

DIPκ° DDDμμ μλνλ λ°©μ
μν€ν μ² λ λ²¨λ‘ μ΄ν΄νκΈ°
ββββββββββββββββββββββββββββββββββββββββββ
β Presentation β ← Controller, DTO
ββββββββββββββββββββββββββββββββββββββββββ€
β Application β ← UseCase, Facade
ββββββββββββββββββββββββββββββββββββββββββ€
β Domain β ← Entity, Value Object, Domain Service
β β Repository Interface ← μ¬κΈ° μ μ!
ββββββββββββββββββββββββββββββββββββββββββ€
β Infrastructure β ← Repository ꡬν, μΈλΆ API μ°λ
ββββββββββββββββββββββββββββββββββββββββββ
μμ‘΄ λ°©ν₯: λ°κΉ₯ → μμͺ½ (ν λ°©ν₯λ§ νμ©)β
μμ‘΄ λ°©ν₯μΌλ‘ μ΄ν΄νκΈ°
Infrastructureκ° Domainμ μμ‘΄νλ©°, Domainμ Infrastructure λͺ°λΌλ λλ€.

μμ‘΄ λ°©ν₯ (μ»΄νμΌ νμ)
ββββββββββββββββββββββββββββββββββΆ
ββββββββββββββ ββββββββββββββ ββββββββββββββ ββββββββββββββββ
βPresentationββββΆβApplication ββββΆβ Domain βββββInfrastructureβ
ββββββββββββββ ββββββββββββββ ββββββββββββββ ββββββββββββββββ
λ³κ²½ λΉλλ‘ μ΄ν΄νκΈ°
κ°μ₯ μμ μ μΈ Domainμ μ€μ¬μΌλ‘ μμ£Ό λ³κ²½λλ κ²λ€μ΄ Domainμ μμ‘΄νλ©° Domainμ μΈλΆ λ³κ²½μ μν₯λ°μ§ μλλ€.
| κ³μΈ΅ | λ³κ²½ λΉλ | μμ |
| Infrastructure | μμ£Ό λ³κ²½ | DB κ΅μ²΄, API λ²μ μ |
| Presentation | μμ£Ό λ³κ²½ | UI κ°νΈ, API μ€ν |
| Application | κ°λ λ³κ²½ | μ μ€μΌμ΄μ€ μΆκ° |
| Domain | κ±°μ μ λ³ν¨ | ν΅μ¬ λΉμ¦λμ€ κ·μΉ μΆκ° |
μ μ΄λ κ² νλκ°?
| κ΄μ | DIP λ―Έμ μ© | DIP μ μ© |
| κ²°μ μ¬ κ΅μ²΄ μ | OrderService μ½λ μμ νμ | ꡬνμ²΄λ§ κ΅μ²΄, μ€μ λ³κ²½ |
| λ¨μ ν μ€νΈ | μ€μ κ²°μ API νΈμΆλ¨ | Mock μ£Όμ μΌλ‘ λΉ λ₯Έ ν μ€νΈ |
| λλ©μΈ μμμ± | μΈλΆ λΌμ΄λΈλ¬λ¦¬μ μ€μΌ | λΉμ¦λμ€ λ‘μ§λ§ μ‘΄μ¬ |
| μ»΄νμΌ μμ‘΄μ± | infrastructure λ³κ²½ μ domain μ¬μ»΄νμΌ | domainμ μν₯ μμ |
λ°μν
'Spring' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| μ’μ κ°μ²΄ μ§ν₯ μ€κ³μ 5κ°μ§ μμΉ (SOLID μμΉ) (0) | 2025.12.10 |
|---|---|
| μ’μ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ΄λ? (1) | 2025.12.10 |
| μ€νλ§μ΄λ? (0) | 2025.12.10 |