아키텍처

헥사고날 아키텍처

정재익 2025. 8. 12. 18:42

포트 - 벽에 달린 콘센트 즉 '표준 규격'이다 규격이란 인터페이스 일 뿐 스스로 아무런 일도 하지 않는다.

도메인 - 드라이기의 모터처럼 실제 '일'을한다

어댑터 - 플러그 또는 가전제품 본체 외부 기술을 뜻한다 포트라는 표준 규격에 맞게 제작되어 도메인에 전기를 전달해준다.

 

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-Adapter Out-Port를 구현하여 외부 시스템과 연동하는 도구 도메인 밖 UserJpaAdapter, ExternalApiClient