Hexagonal Architecture - 헥사고날 아키텍처

Ena JJJ·2024년 2월 2일
0

Hexagonal Architecture - 헥사고날(육각형) 아키텍처

  • 각 계층에서 하던 일들을 "내부와 외부"라는 개념으로 나누어 각각에 맞는 별도의 인터페이스를 정의

  • "내부"의 로직은 오직 "외부"를 통해서만 접근 가능
    - 모든 외부 시스템과의 직접적인 상호작용은 "어댑터"의 역할

    • 각 서비스에서 비즈니스 로직에 맞게 정의된 인터페이스는 "포트"
    • 즉, 외부 서비스와의 상호 작용(어답터)는 비즈니스 로직과의 작업을 정의한 인터페이스(포트)랑만 서로 통신
  • 모든 비즈니스 로직은, 오직 외부에서 내부 방향 / 내부에서 외부 방향으로만 호출이 가능
    - 인바운드 어댑터 -> 인바운드 포트 -> 비즈니스 로직

    • 비즈니스 로직 -> 아웃바운드 포트 -> 아웃바운드 어댑터

어댑터와 포트

어댑터 (Adapter)

서비스의 입장에서 이 서비스가 사용하는 외부 시스템과의 직접적인 구현 및 상호 작용을 처리

  • 외부 시스템(UI) 으로부터 들어온 Request가 가장 처음 만나는 Controller는 "인바운드 어댑터"
  • 메시지 브로커(kafka)로부터 Consume 하는 동작을 처리하는 로직 핸들러는 "인바운드 어댑터"
  • DB(MySQL..)에 직접적으로 접근하여 다양한 작업(CRUD)을 처리하기 위한 DAO는 "아웃 바운드 어댑터"

포트(Port)

비즈니스 로직 입장에서 어댑터와 통신하기 위한 동작을 정의한 인터페이스

  • Controller 로부터 들어온 요청으로부터 특정 비즈니스 로직을 수행하기 위한 동작을 정의한 인터페이스
  • Consume한 메세지를 처리하기 위한 비즈니스 로직의 동작을 정의한 인터페이스
    -> "인바운드 포트"
  • 비즈니스 로직에서 DB 접근을 위해서 정의한 Repository 인터페이스는 "아웃바운드 포트"

Adapter를 통해 외부 서비스의 의존성을 분리하여 언제든 쉽게 교체하여 유연한 확장성 있는 대처를 하고, 포트를 통해서 내부 비즈니스 로직과 인터페이스를 분리하여 내부 로직의 구현은 인터페이스와 무관 하게 개발 가능하도록 사용하는 Architecture이다.

0개의 댓글