[MSA 알아보기] 3. 헥사고날 아키텍처 (Hexagonal Architecture)

mrcocoball·2023년 12월 11일
0

Architecture

목록 보기
3/5
post-custom-banner

해당 포스트는 MSA에 대한 개념과 주요 기술에 대해 알아보고 실무에 적용했었던 내용을 정리하는 포스트입니다.

1. 헥사고날 아키텍처

개요

헥사고날 아키텍처(Hexagonal Architecture)는 포트 앤드 어댑터(Port and Adaptor) 아키텍처라고도 불리며 고수준의 비즈니스 로직을 표현하는 내부 영역과 인터페이스 처리를 담당하는 저수준 외부 영역으로 구분됩니다.

여기서 포트와 어댑터는 각각 내부 영역과 외부 영역에 존재하는데

  • 내부 영역은 외부 영역과 연계되는 포트를 지니고 있으며
  • 외부 영역에는 외부에서 들어오는 요청 / 외부로 반환하는 응답 또는 데이터 등과 관련된 어댑터가 존재합니다.
    [이미지 출처 : https://medium.com/ssense-tech/hexagonal-architecture-there-are-always-two-sides-to-every-story-bc0780ed7d9c ]

헥사고날 아키텍처의 가장 큰 특징은 포트로 인해 고수준의 내부 영역이 외부의 구체적인 어댑터에 전혀 의존하지 않는다는 점입니다.

2. 내부 영역과 외부 영역

내부 영역

내부 영역은 순수한 비즈니스 로직을 표현하는 기술 독립적인 영역이며, 외부 영역과 연계되는 포트를 지닙니다. 순수한 비즈니스 로직을 표현해야 하므로 내부 영역은 외부 영역과 직접 의존하지 않고 포트를 통해 통신하며, 외부 영역의 어댑터가 내부 영역의 포트에 의해서 구현됩니다.

포트는 크게 인바운드 포트와 아웃바운드 포트로 나뉩니다.

  • 인바운드 포트 : 내부 영역의 사용을 위해 표출되는 API
  • 아웃바운드 포트 : 내부 영역이 외부를 호출하는 방법을 정의 (아웃바운드 어댑터가 아웃바운드 포트에 의존해서 구현됨)

외부 영역

외부 영역은 인터페이스 처리를 담당하는 저수준 영역이며 외부에서 들어오는 요청을 처리하거나 외부로 데이터나 응답을 전송하는 어댑터를 지닙니다.

위에서 설명하였듯이 외부 영역에서 내부 영역으로 접근을 하기 위해선 내부 영역의 포트와 어댑터가 연결되어야 하며 어댑터는 포트에 의존해서 구현됩니다.

어댑터는 크게 인바운드 어댑터와 아웃바운드 어댑터로 나뉩니다.

  • 인바운드 어댑터 : 외부에서 들어오는 요청을 처리 (RestController, Controller, 커맨드 핸들러, 이벤트 메시지 구독 핸들러 등)
  • 아웃바운드 어댑터 : 비즈니스 로직에 의해 호출되어 외부와 연계 (데이터 액세스 처리를 담당하는 DAO, 이벤트 메시지 발행 클래스, 외부 서비스를 호출하는 프록시 등)

어댑터와 포트의 흐름 예시

  • WEB에서 API를 호출 (인바운드 어댑터) -> 인바운드 포트 -> 내부 비즈니스 로직 (서비스 인터페이스 등)
  • 내부 비즈니스 로직 처리 후 반환 -> 아웃바운드 포트 -> 이벤트 발행 핸들러 (아웃바운드 어댑터) -> 메시지 큐

Appendix. 출처

도메인 주도 설계로 시작하는 마이크로서비스
마이크로서비스 패턴

profile
Backend Developer
post-custom-banner

0개의 댓글