개요
Hexagonal Architecture(육각형 아키텍처)는 어플리케이션의 핵심 도메인 로직을 외부와 분리하여 유연성과 테스트 용이성을 극대화하는 아키텍처 패턴입니다. Alistair Cockburn이 제안한 이 구조는 ‘포트와 어댑터(Ports and Adapters)’라는 개념을 중심으로, 의존성을 반전시켜 깔끔한 경계를 정의합니다.
1. 개념 및 정의
Hexagonal Architecture는 시스템의 핵심 비즈니스 로직을 중앙(코어) 도메인에 배치하고, 이를 다양한 외부 시스템(API, DB, 메시징 등)과 **포트(Ports)**와 **어댑터(Adapters)**를 통해 연결하는 방식의 아키텍처입니다.
- 목적: 도메인 로직의 독립성과 테스트 용이성 확보
- 필요성: 지속 가능한 소프트웨어 구조와 변화 대응력 확보
- 기반 이론: 의존성 역전 원칙(DIP: Dependency Inversion Principle)
2. 특징
특징 | 설명 | 비고 |
포트와 어댑터 | 외부 인터페이스를 어댑터로 추상화 | DB, UI, 메시징 등 다양하게 확장 가능 |
도메인 중심 | 비즈니스 로직을 중심에 배치 | 응집력 높은 설계 가능 |
테스트 용이성 | 외부 의존성 최소화로 단위 테스트 용이 | TDD에 적합한 구조 |
이 아키텍처는 유스케이스 주도 설계, 클린 아키텍처, DDD 등과도 개념적으로 밀접한 연관이 있습니다.
3. 구성 요소
구성 요소 | 설명 | 예시 |
Application Core | 비즈니스 로직과 유스케이스 처리 영역 | 서비스 클래스, 도메인 모델 등 |
Ports | 내부와 외부를 연결하는 추상 인터페이스 | Repository, Service Port |
Adapters | 외부 시스템과 포트를 연결하는 구체 구현체 | JDBC, REST Controller, Kafka Adapter 등 |
포트는 내부와 외부의 계약을 정의하고, 어댑터는 해당 계약의 실제 구현 역할을 수행합니다.
4. 기술 요소
기술 요소 | 설명 | 예시 |
DI 프레임워크 | 의존성 주입으로 유연한 바인딩 | Spring Framework, Guice |
테스트 프레임워크 | 도메인 레벨 단위 테스트 수행 | JUnit, Mockito |
비동기 메시징 연계 | 어댑터 기반 이벤트 처리 가능 | Kafka, RabbitMQ |
REST API/GraphQL | 외부 입력 어댑터 구현 | Spring Web, Apollo Server |
기술 스택과 무관하게 구조 자체의 일관성을 유지할 수 있는 점이 이 아키텍처의 강점입니다.
5. 장점 및 이점
장점 | 설명 | 기대 효과 |
변경 격리 | 외부 시스템 변경 시 내부 영향 최소화 | 유지보수 비용 절감 |
테스트 용이성 | 도메인 테스트 독립적 실행 가능 | 높은 테스트 커버리지 확보 |
유연한 통합 | 다양한 외부 시스템과 유연하게 연계 | 확장성 향상 |
지속 가능한 코드베이스를 구성하고, 팀 간 역할 분담을 명확히 할 수 있는 구조입니다.
6. 주요 활용 사례 및 고려사항
활용 사례 | 설명 | 고려사항 |
마이크로서비스 아키텍처 | 도메인 경계 중심의 서비스 구성 | 서비스 간 인터페이스 설계 중요 |
레거시 시스템 현대화 | UI, DB 등을 점진적으로 교체 | 포트-어댑터 분리 필요 |
테스트 중심 개발 | 도메인 로직 테스트 용이 | 의존성 주입 구조 확립 필수 |
지나치게 많은 어댑터와 포트 정의는 오히려 복잡도를 증가시킬 수 있으므로 균형 있는 설계가 중요합니다.
7. 결론
Hexagonal Architecture는 변화가 빠르고 복잡한 시스템 환경에서 도메인 로직을 보호하고, 외부 변경에 유연하게 대응할 수 있는 이상적인 구조입니다. 비즈니스 중심의 소프트웨어 개발을 지향하며, 유지보수성과 테스트 용이성을 중시하는 팀에 매우 적합합니다. 클린 아키텍처 및 도메인 주도 설계의 실질적 구현으로도 널리 활용됩니다.
'Topic' 카테고리의 다른 글
Event Storming (0) | 2025.05.05 |
---|---|
Onion Architecture (0) | 2025.05.05 |
Disciplined Agile (DA) (1) | 2025.05.05 |
IT4IT Reference Architecture (0) | 2025.05.05 |
Technology Radar (1) | 2025.05.05 |