아키텍처
헥사고날 아키텍처
정재익
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 |