<aside>
</aside>
<aside>
📌
전체 책임 구조도
버전별 책임 구조도
</aside>
[V1] 기능 및 성능개선 - 기존 구조
<aside>
기존 단순 레이어 구조 : 기능이 늘어남에 따라 도메인 간 의존도 증가
- 서비스 필요 시 서로의 서비스를 호출하여 사용 → 의존도 증가 원인
- 구현의 편의성으로 인한 복잡한 호출 구조를 가짐
- 유지 보수 부담 및 확장성 저하 우려
</aside>
기존 구조
<aside>
🛠
Controller → Service → Repository
</aside>
3계층 구조로 상위 계층이 하위 계층을 호출하는 구조
서로 다른 도메인 간의 호출이 자유롭게 이루어지는 형태
<aside>

🔗 버전 별 책임 구조도
</aside>
[V2] DDD 도입 - 의존성 최소화
<aside>
모놀리식 기반 Clean Architecture 구조 : 도메인 간 결합도 최소화
- 필요한 서비스 호출을 Spring Event로 처리
- 서비스의 기능 변경 · 확장 용이
- CQRS 패턴을 도입하여 읽기와 쓰기를 분리
</aside>
변경된 구조
<aside>
🛠
presentation → application → domain → infra
</aside>
계층 구조 간의 의존성을 줄이기 위해 인터페이스로 구현하여 주입
Application
- CQRS 패턴 적용을 위한 Commander와 Reader 분리
Domain
- Entity를 생성 (Aggregate Root, Aggregate)
- infra에서 주입 받을 인터페이스 생성
Infra
- Infra에서 Domain의 인터페이스를 구현하여 주입 (DIP)
- Commander와 Reader 분리
- Commander에선 JPA 사용
- Reader는 복잡한 쿼리문 다루기 위해 QueryDSL 사용

🔗 버전 별 책임 구조도
유의점