✨ 헥사고날 아키텍처(Ports & Adapters)

Dev96·2025년 8월 18일
post-thumbnail

🏛️ 헥사고날 아키텍처란?

"도메인 로직을 외부 의존성으로부터 격리하여
더 유연하고 테스트 가능한 애플리케이션을 만든다!"

  • 예시
    • UserService가 곧바로 JPA Repository와 EmailClient에 의존
@Service
public class UserService {

    private final UserRepository userRepository; // JPA Repository
    private final EmailClient emailClient;       // 외부 Email API
    
    
    ...
}

⚡ 핵심 개념

  • 🧩 Domain (코어 비즈니스 로직)
  • 🔌 Ports (인터페이스, 추상화)
  • 🔄 Adapters (외부 연동: DB, API, 메시징 등)

📊 아키텍처 비교

구조특징문제점
🏗️ LayeredController → Service → Repository외부 의존성(DB, 외부 API)에 강하게 묶임
🔷 HexagonalDomain 중심, Ports & Adapters외부 교체 용이, 테스트 용이

🗂️ 실제 나의 토이 프로젝트 레이어 구조 (예시)

📦 user              				       Bounded Context (User 도메인 전체 경계)
 ┣ 📂 adapter                              Adapter Layer (외부 세계와 연결 지점)
 ┃  ┣ 📂 in                                Inbound Adapter (들어오는 요청 처리)
 ┃  ┃  ┗ 📂 web                            REST API Controller, Request/Response DTO
 ┃  ┗ 📂 out                               Outbound Adapter (외부 자원 연동)
 ┃     ┗ 📂 persistence                    JPA Entity, Repository, Mapper (DB 연동)
 ┣ 📂 application                          Application Layer (유즈케이스 중심)
 ┃  ┣ 📂 port                              Port (도메인 ↔ Adapter 느슨한 연결/계약)
 ┃  ┃  ┣ 📂 in                             Inbound Port (UseCase 인터페이스)
 ┃  ┃  ┗ 📂 out                            Outbound Port (Persistence 인터페이스)
 ┃  ┗ 📂 service                           Application Service (유즈케이스 구현체)
 ┗ 📂 domain                               Domain Layer (핵심 비즈니스 모델/로직)

💡 정리 & 회고

  • ✅ 장점: 테스트 용이, 도메인 로직의 독립성 확보
  • ⚠️ 단점: 구조가 복잡함. 소규모 프로젝트에는 과한 느낌
  • 🧭 개인적으로는 중장기 유지보수 프로젝트에서 큰 힘이 됨
profile
다양한 경험과 실무의 깊이로 평가받고 싶은 사람들을 위해 기록합니다. 실무에서 부딪히며 배운 것들이 가장 오래 남는다고 믿습니다.

0개의 댓글