헥사고날 아키텍처란?
주요 목표
- 응용 프로그램의 비즈니스 로직을 외부 세계로부터(Infra) 격리시켜 유연하고 테스트하기 쉬운 구조를 만드는 것
⇒ 이를 위해 핵심 비즈니스 로직은 중앙의 도메인 영역에 위치하며, 입력과 출력을 처리하는 포트와 어뎁터를 통해 외부와(Infra) 소통
장점
- 유연성
외부 시스템이나 인프라와의 의존성을 낮춰, 구성 요소를 쉽게 교체하거나 업데이트 할 수 있음
- 테스트 용이성
비즈니스 로직을 독립적으로 테스트할 수 있어, 품질 향상과 개발 속도 향상에 도움이 됨
- 유지보수성
책임이 분리되어 있어, 코드의 이해와 수정이 용이하며 변화에 빠르게 대응가능
나오게 된 배경
- 레이어드 아키텍처의 단점을 해결하기 위해, 의존성의 역전법칙을 필두로 나오게 되었음
레이어드 아키텍처 구조도
- 의존성이 위에서 아래
- 계층을 내려갈수록 하위 계층에 의존적인 구조를 띈다.

이때 각 계층 사이에 interface를 추가한 후, 컨트롤러는 서비스 인터페이스를, 서비스는 레포지토리 인터페이스를 바라보도록 수정한다.

그리고 모든 비즈니스 로직을 위와 같이 수정하면 아래와 같아지는데 컨트롤러와 레포지토리는 Adapter로, 각 인터페이스는 Port로 명칭이 바뀐다.
- 해당 형태를 각 계층마다 적용 시, 아래와 같은 헥사고날 아키텍쳐의 형태를 띄게 됨