ㄷㄷㄷ: Domain Driven Design과 적용 사례 공유 / if(kakao)2022
두줄요약
레거시 서버를 점진적으로 MSA화하며 DDD와 헥사고날 아키텍처를 적용한 사례를 공유했습니다. 도메인 분리의 이점과 함께 트랜잭션·배포·구현 복잡도도 짚었습니다.
문제 상황
- 레거시 서버 포팅과 MSA 전환 과정에서 기존 로직 활용 및 신규 요구사항 수용 필요
- 레거시 서버와 신규 MSA 서버의 동시 동작을 위한 점진적 교체 방향
구조와 흐름
- 하위 도메인 경계인 Bounded Context를 MSA 서비스 단위로 분리하고 Context Map으로 관계와 흐름 가시화
- 라이프사이클과 변경 단위가 같은 객체를 Aggregate로 묶고 Root Entity를 통한 접근 제한
- Controller→Use Case→Service→Load/Save Port→Adapter 흐름과 JPA Entity·Domain Entity 간 Mapper 변환
선택 이유
- 기존 시스템 분해·개선, 비즈니스와 개발 간 공통 언어, 요구사항별 일정·리소스 관리에 적합한 DDD 선택
- 표현·데이터 접근 로직으로부터 비즈니스 로직을 분리하기 위한 Hexagonal Architecture 채택
트레이드오프
- MSA 개발·배포 복잡도, 트랜잭션 관리, 높은 도메인 이해도와 Mapper 등 부가 코드 증가
- 복잡한 도메인 관계 정리, 유지보수 편의성, 신규 기능 대응 유연성, 느슨한 결합과 높은 응집도




