study-log

⭐️ DDD + 헥사고날 아키텍처의 사실과 오해

지금까지 아키텍처를 고민할 때 exact 정확한 헥사고날 아키텍처 뿐 아니라, 여러가지 ‘클린 아키텍처’ ‘레이어 분리’등 패러다임들이 유기적으로 엮어 적절한 아키텍처를 구사했던 것 같다. 하지만 이번 강의 + 정리를 통해 헥사고날 아키텍처의 본질은 통합 방식의 유연성과 방향성에 있다는 것을 다시 한 번 깨달았다. DDD 뿐 아니라, 패러다임을 알아가면서 느끼는 점은 이들은 방향성을 도울 뿐, 정해진 답이 없다는 얘기한다. 상황에 따라 최적의 솔루션을 찾아가는 여행, 그리고 그 여행의 방향키는 우리에게 주어진다는 점이 매력적인 것 같다. ⛵️…


✅ 애플리케이션 내부에 도메인 계층을 만들어야 한다?


✅ 헥사고날 아키텍처는 패키지 구조를 따라야 한다?


✅ 포트는 UseCase라는 접미사를 사용해야 한다?


✅ 애플리케이션에는 도메인 모델만 넣고, JPA 엔티티 등은 어댑터에 둬야 한다?

부제 : JPA 의존성(@Entity, @Repository) 및 설정등이 core 영역에 노출되면 되는지?

이부분은 가장 많은 고민을 했고, 아직도 고민을 하게 되는 부분이다. 🤔 …

🚧 for me, 엔티티는 어댑터에서 정의하거나, 도메인 모델 ↔ JPA 엔티티 간 매핑 계층을 두는 것이 바람직하다고 생각해왔다.

도메인 모델에는 JPA 엔티티 관련 설정이 없는 pojo에 가깝도록 설계하는 식으로 가고, 매퍼에서 이를 매핑하는 방식으로 …


✅ 포트 네이밍과 의존성 원칙


✅ 액터(Actor)는 어떻게 연결되는가?

🔍 보충 정리: 실무 적용 시 고려 사항

✅ 헥사고날의 핵심은?

✅ 클린 아키텍처 vs 헥사고날 아키텍처

비교 항목 클린 아키텍처 헥사고날 아키텍처
중심 개념 계층 (Layered) 중심 경계 (Boundary) 중심
도메인 계층 명확히 존재 명확x 게층보다는 의존성 방향
기술 의존 분리 철저히 분리 선택적 분리 가능

✍️ 개인 회고

헥사고날 아키텍처의 주장은 코드를 계층화하는 것이 아니라, 애플리케이션이 외부 세계와 소통하는 경로(포트)를 분리하고 명시하는 것임을 알게 되었다.
특히 Repository나 Controller등이 반드시 특정 위치에 있어야 한다는 인식보다,
외부 기술 종속을 최소화하고 의존성 방향을 외부에서 안쪽으로 유지하는 것이 더 중요한 원칙이라는 걸 배웠다.
즉, 헥사고날 아키텍처는 계층을 엄격히 나누는 것이 아닌, 의존성과 흐름을 어떻게 제어할지에 더 초점이 있는 구조라는 점을 이해하게 되었다.
특히 다양한 입출력 수단이 존재할 때, 포트와 어댑터 패턴이라고 불리기도 하는 헥사고날이 매우 유연한 선택이라는 점을 느꼈다. 포트와 어댑터를 명확히 나누고, 런타임에 유연하게 액터를 구성한다면
다양한 액터를 하나의 애플리케이션에서 효과적으로, 유연하게 통합할 수 있다고 생각했다. 다만 그만큼 아키텍처 설계에 대한 명확한 이해와 팀 간 컨벤션 정립이 없으면 의미가 퇴색되어지면서 구조가 쉽게 무너질 수도 있다고 생각했다.