# 헥사고날 아키텍처 정의
- 헥사고날 아키텍처(Hexagonal Architecture)는 "포트와 어댑터 아키텍처"로도 불리며, 비즈니스 로직(도메인)을 외부 요소(데이터베이스, UI 등)로부터 분리해 유연성과 테스트 용이성을 높이는 소프트웨어 설계 방식입니다[1][3].
## 구성 요소
- **내부 영역**: 순수한 비즈니스 로직과 유스케이스를 포함하며, 외부 의존성이 없습니다.
- **외부 영역**: 데이터베이스, UI, API 등 외부 시스템과 연결됩니다.
- **포트**: 내부와 외부를 연결하는 인터페이스(API).
- 인바운드 포트: 외부가 내부를 호출하기 위한 인터페이스.
- 아웃바운드 포트: 내부가 외부를 호출하기 위한 인터페이스.
- **어댑터**: 포트를 구현하여 실제 동작을 수행하는 클래스[4][6].
## 장점
- **유연성**: 외부 시스템 변경 시 내부 로직에 영향이 적습니다.
- **테스트 용이성**: 비즈니스 로직을 독립적으로 테스트 가능[1][6].
- **유지보수성**: 관심사의 분리가 명확해 코드 이해와 수정이 용이[6].
## 단점
- 구현 복잡성이 증가하며 초기 개발 시간이 더 소요됩니다[1][6].
- 계층 간 데이터 매핑 등으로 코드가 많아질 수 있습니다[4].
## 사용 사례
- 복잡한 비즈니스 로직을 가진 시스템이나 다양한 외부 기술과 통합해야 하는 프로젝트에 적합합니다. 예: 금융 시스템, 대규모 전자상거래 플랫폼[3][4].
---
# 헥사고날 아키텍처의 적합성 및 선택 기준
## 적합성 평가
헥사고날 아키텍처는 높은 유연성과 유지보수성을 요구하는 프로젝트에서 탁월합니다. 그러나 단순한 애플리케이션에서는 오히려 과도한 설계가 될 수 있습니다.
## 선택 기준
- 장기적인 유지보수가 중요한 경우 적합합니다.
- 초기 개발 비용과 시간 투자가 가능해야 합니다.
- 팀이 DDD(Domain-Driven Design) 및 클린 아키텍처에 대한 이해가 필요합니다[6][8].
헥사고날 아키텍처는 단순히 기술적 트렌드가 아닌, 명확한 요구사항과 팀 역량에 따라 신중히 선택해야 합니다.
출처
[1] 헥사고날 아키텍처(Hexagonal Architecture) : 유연하고 확장 가능한 ... https://tech.osci.kr/hexagonal-architecture/
[2] 웹 애플리케이션 아키텍처: 유형, 구성 요소 및 모범 사례 | 스코픽 https://scopicsoftware.com/ko/blog/web-application-architecture/
[3] 헥사고날 아키텍처 왜 씀? (Feat. 계층형 아키텍처) - velog https://velog.io/@jeong_hun_hui/%ED%97%A5%EC%82%AC%EA%B3%A0%EB%82%A0-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%99%9C-%EC%94%80-Feat.-%EA%B3%84%EC%B8%B5%ED%98%95-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98
[4] 헥사고날 아키텍처란 - 코딩못하는사람 - 티스토리 https://cantcoding.tistory.com/107
[5] 확장 가능한 웹 애플리케이션 아키텍처 설계 방법 https://lion-tomcat.tistory.com/entry/%ED%99%95%EC%9E%A5-%EA%B0%80%EB%8A%A5%ED%95%9C-%EC%9B%B9-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%84%A4%EA%B3%84-%EB%B0%A9%EB%B2%95
[6] [Architecture] 헥사고날 아키텍처(Hexagonal Architecture) (ft. 계층형 ... https://ivory-room.tistory.com/91
[7] [Web] 웹 애플리케이션 아키텍처 개념 정리 및 구현, 기술 - IT is True https://ittrue.tistory.com/189
[8] [Java, Spring] 계층형 아키텍처 vs 헥사고날 아키텍처 https://tjdtls690.github.io/studycontents/java/2023-05-22-hexagonal_architecture/