소프트웨어 아키텍쳐
헥사고날 아키텍쳐 (Hexagonal Architecture)
정의
- 사전적 의미로는 "육각형 건축물"을 뜻한다.
- 레이어 간의 원하지 않는 종속성이나 비즈니스 로직으로 인한 사용자 인터페이스 코드의 오염과 같은 객체 지향 소프트웨어 설계의 알려진 구조적 함정을 피하기 위해 Alistair Cockburn에 의해 발명
- 포트 및 어댑터 아키텍처라고도 불린다.

장점
- 아키텍쳐 확장이 용이하다.
- SOLID 원칙을 쉽게 적용할 수 있다.
- 모듈 일부를 배포하는 게 용이하다.
- 테스트를 위해 모듈을 가짜로 바꿀 수 있으므로 테스트가 더 안정적이고 쉽다.
- 더 큰 비즈니스적 가치를 갖고 더 오래 지속되는 도메인 모델에 큰 관심을 둔다.
구성

내부 영역 - 순수한 비즈니스 로직을 표현하며 캡슐화된 영역이고 기능적 요구사항에 따라 먼저 설계
외부 영역 - 내부 영역에서 기술을 분리하여 구성한 영역이고 내부 영역 설계 이후 설계
포트와 어댑터
포트는 내부 비즈니스 영역을 외부 영역에 노출한 API이고 인바운드(Inbound)/아웃바운드(Outbound) 포트로 구분됩니다.
인바운드 포트 - 내부 영역 사용을 위해 노출된 API
아웃바운드 포트 - 내부 영역이 외부 영역을 사용하기 위한 API
어댑터는 외부 세계와 포트 간 교환을 조정하고 역시 인바운드/ 아웃바운드 어댑터로 구분된다.
인바운드 어댑터 - 외부 어플리케이션/서비스와 내부 비즈니스 영역(인바운드 포트) 간 데이터 교환을 조정
아웃바운드 어댑터 - 내부 비즈니스 영역(아웃바운드 포트)과 외부 어플리케이션/서비스 간 데이터 교환을 조정
결국 이 구조의 핵심은 비즈니스 로직이 표현 로직이나 데이터 접근 로직에 의존하지 않는 것이다.
Reference