SW 구조/아키텍처

헥사고날(Hexagonal)

tacoyaggi 2023. 11. 23. 08:53

개념

  • 사전적 의미로 육각형 건축물을 뜻함
  • 레이어 간의 원하지 않는 종속성이나 비즈니스 로직으로 인한 사용자 인터페이스 코드의 오염과 같은 객체지향 소프트웨어 설계의 알렺니 구조적 함정을 피하기 위해 Alistair Cockburn에 의해 발명
  • 소프트웨어 설계에 사용되는 아키첵처 패턴중 하나로 여러 소프트웨어 환경에 쉽게 연결할 수 있도록, 느슨하게 결홥된 애플리케이션 구성요소를 만드는 것을 목표로 하는 아키텍처
  • 도메인의 비지니스 로직을 외부 라이브러리 및 툴로부터 분리 할 때 포트와 어댑터라고 부르는 인터페이스를 사용하기 때문에 포트&어댑터 아키텍처라고도 부른다.
  • 도메인 비즈니스 로직이 외부요소에 의존하지 않게 만들고, 프레젠테이션 계층과 데이터 소스 계층 같은 외부 요소들이 도메인 계층에 의존하도록 한다.
  • 외부와의 접촉을 인터페이스로 추상화하여 비즈니스 로직 안에 외부 코드나 로직의 주입을 막는다.
  • 외부 라이브러리 및 툴로부터 분리시키는 것이 아키텍처의 핵심이다. 
  • 외부에서 도메인 비즈니스 로직에 접근하기 위해서는 Adapter를 사용하고 Port를 통해 접근해야 한다.

구성

  • Adapter
    • Adapter는 Port를 통해 외부 통신을 담당한다.
    • Adapter는 특정 외부 기술이나 프레임워크에 의존적인 로직을 담당
    • Incoming Adapter 
      • 주로 사용자 인터페이스, 테스트 또는 외부 시스템으로부터의 요청을 애플리케이션 코어로 주도하는데 사용
    • Outcoming Adapter 
      • 애플리케이션 코어에서 외부에 데이터를 전달하는 역할을 담당한다. 
      • 데이터베이스에 데이터를 저장하거나 외부 시스템에 메시지를 전송하는 역할
  • UseCase
    • 인커밍 Adapter로 부터 입력받는 역할을 하고 인터페이스이므로 비즈니스 로직을 구현하는 Service 클래스에서 해당 기능을 구현하는 형태
    • UseCase의 메서드는 최대한 작은 범위로 구성해야하며 입력 유효성 검증은 하지 않는다.
    • 비즈니스 로직으로 애플리케이션의 도메인 로직을 캡슐화
    • 도메인 로직을 실행하는 코드의 집합
    • 어떤 작업을 수행하고 어떤 결과를 반환해야 하는지에 대한 규칙 정의

    • 도메인 로직 
      • 특정 비즈니스 영역의 규칙을 나타냄
      • 은행 잔고가 양수일 때만 돈을 뽑을 수 있는 규칙이 그 예
      • 규칙들은 주로 도메인 모델을 통해 구현
    • 비즈니스 로직
      • 사용자의 인출 요청을 받아 도메인 로직으로 유효성 체크하고 결과를 데이터베이스에 저장하고 사용자에게 반환하는 전체 과
  • Port
    • Port는 애플리케이션 코어의 경계를 정의
    • 애플리케이션 코어가 제공해야 할 기능을 나타내며 Adapter를 통해 애플리케이션 코어에 접근하는 인터페이스
    • 도메인 로직이 아닌 애플리케이션 코어에 접근하는 인터페이
    • Incoming Port
      • 외부 요청이 애플리케이션 코어로 들어오는 경로를 정의
      • 웹 요청, GUI 이벤트, 스케줄 이벤트 등이 Incoming Port를 통해 애플리케이션 코어로 들어 온다.
      • Controller 와 Service 사이의 인터페이스
    • Outcoming Port
      • 애플리케이션 코어가 외부 서비스를 제공하기 위한 경로를 정의
      • 데이터베이스, Message, 웹 서비스 등에 데이터를 전송하거나 요청하 경우에 사용
      • Repository 와 Service 사이의 인터페이스

URL