육각형 아키텍처(Hexagonal Architecture)는 소프트웨어 설계 원칙 중 하나로, 비즈니스 로직을 중심으로 구성된 육각형 모양의 아키텍처. 이 아키텍처의 주요 개념 중 하나는 외부 세계와의 상호작용을 처리하기 위해 어댑터를 사용함.
육각형 아키텍처는 비즈니스 로직 중심으로 구성하는 계층화 아키텍처 스타일의 대안으로 볼 수 있다. 애플리케이션에 표현 계층 대신 비즈니스 로직을 호출하여 외부에서 들어온 요청을 처리하는 인바운드 어댑터와 영속화 계층 대신 비즈니스 로직에 의해 호출되고 외부 애플리케이션을 호출하는 아웃바운드 어댑터를 둔다. 비즈니스 로직이 어댑터에 전혀 의존하지 않는다는 것이 이 아키텍처의 가장 중요한 특장점임. 오히려 어댑터가 비즈니스 로직에 의존하게 된다. 주요 장점은 비즈니스 로직과 외부 세계 간의 의존성을 최소화하고 테스트가 용이하다.
비즈니스 로직에는 하나 이상의 포트가(Port) 있다. 포트는 비즈니스 로직이 자신의 외부 세계와 상호 작용하는 방법이 정의된 작업(operation, 오퍼레이션)이다. 자바를 사용한다면 인터페이스가 포트에 해당함. 포트 종류는 인바운드/아웃바운드 두 가지이다. 인바운드 포트는 비즈니스 로직이 표출된 API로서, 외부 애플리케이션은 이 API를 통해 비즈니스 로직을 호출한다(서비스의 퍼블릭 메서드가 정의된 서비스 인터페이스). 아웃바운드 포트는 비즈니스 로직이 외부 시스템을 호출하는 방법을 담당한다(데이터 접근 작업이 정의된 리포지터리 인터페이스).
어댑터(Adapter) 는 비즈니스 로직 주변을 감싸고 있는 구조이다. 포트처럼 어댑터도 인바운드/아웃바운드 두 종류다. 인바운드 어댑터는 외부에서 들어온 요청을 인바운드 포트를 호출해서 처리한다(REST 엔드포인트, 웹 페이지가 구현된 스프링 MVC 컨트롤러, 메시지를 구독하는 메시지 브로커 클라이언트). 동일한 인바운드 포트를 여러 인바운드 어댑터가 호출할 수도 있다. 아웃바운드 어댑터는 비즈니스 로직에서 들어온 요청을 외부 애플리케이션/서비스를 호출해서 처리한다(DB 작업이 구현된 데이터 접근 객체(DAO) 클래스, 원격 서비스를 호출하는 프록시(proxy) 클래스). 아웃바운드 어댑터는 브로커에 메시지를 제공하도록 이벤트를 발행할 수 있다.
이렇게 분리를 하면 비즈니스 로직만 따로 테스트하기도 쉽고, 현대 애플리케이션 아키텍처를 좀 더 정확하게 반영할 수 있게 된다. 제각기 특정한 API나 UI가 구현된 인바운드 어댑터가 비즈니스 로직을 호출하고, 비즈니스 로직은 다양한 외부 시스템을 호출하는 아웃바운드 어댑터를 호출하는 구조임. 육각형 아키텍처는 마이크로서비스 아키텍처를 이루는 각 서비스 아키텍처를 기술하는 가장 좋은 방법이다.