본문 바로가기
아키텍처

헥사고날 아키텍처

by 정재익 2025. 8. 12.

포트 - 벽에 달린 콘센트 즉 '표준 규격'이다 규격이란 인터페이스 일 뿐 스스로 아무런 일도 하지 않는다.
도메인 - 드라이기의 모터처럼 실제 '일'을한다
어댑터 - 플러그 또는 가전제품 본체 외부 기술을 뜻한다 포트라는 표준 규격에 맞게 제작되어 도메인에 전기를 전달해준다.
 
in-어댑터 : Driving Adapter - 주도하는 어댑터
외부의 요청을 받아 애플리케이션을  주도(Drive)하고 도메인이 이해할 수 있는 형태로 바꿔 in-port(UseCase) 를 호출한다
예시로 : 컨트롤러가 있다 - HTTP 요청을 받아 JSON 데이터를 DTO객체로 변환한뒤 도메인 로직을 실행한다.
두번째 예시는 메시지 큐 리스너다 - 메시지를 받아서 도메인이 이해할 수 있는 명령으로 바꿔 UseCase를 호출한다.
 
out-어댑터 : Driven Aapter - 주도되는 어댑터
도메인 로직의 요청을 받아 주도되며 외부 시스템과 상호작용함 Out-Port를 구현한다.
예시로 JPA 레포지터리가 있다. 도메인이 호출하면 Out-port를 호출하여 DB에 SQL실행한다.
두번 째 예시는 RestTemplate/WebClient다 도메인이 호출하면 Out-Port를 호출하여 실제 HTTP 통신을 한다.
 

구성요소역할위치예시
In-Port어플이 무엇을 할 수 있는지 정의하는 문 (UseCase)도메인 안CreateUserUseCase
Out-Port어플이 무엇을 필요로 하는지 정의하는 문 (Repository)도메인 안LoadUserPort, SaveUserPort
도메인 서비스핵심 비즈니스 로직 수행
In-Port를 구현하고 Out-Port를 사용함
도메인 안UserService
In-Adapter외부 요청을 받아 In-Port를 호출하는 번역가도메인 밖@RestController, Kafka Listener
Out-AdapterOut-Port를 구현하여 외부 시스템과 연동하는 도구도메인 밖UserJpaAdapter, ExternalApiClient


레이어드 아키텍처의 단점
표현계층이 하나뿐이다
영속화계층이 하나뿐이다
비즈니스로직계층을 영속화계층에 의존한채로 정의한다

'아키텍처' 카테고리의 다른 글

MSA에서의 SRP CCP  (0) 2026.01.09