메모 - 클린/헥사고날 아키텍처

조은지·2023년 8월 22일

최근 깃허브의 다른 프로젝트를 보면서 코드 서리 중인데 헥사고날 아키텍처로 되어있는 프로젝트는 코드 이해하기가 어려워서 정리 글 링크만 올림...

[읽어보기] 잘 정리되어 있는 글

chatGPT에게 물어봐서 정리한 글ㅎ

기존의 레이어드 아키텍쳐

  • 프레젠테이션 계층 (Presentation Layer): 사용자와 시스템 간의 상호작용을 처리하는 부분으로, 주로 컨트롤러나 뷰와 관련됩니다.
  • 서비스 계층 (Service Layer): 비즈니스 로직을 처리하는 부분으로, 프레젠테이션 계층과 데이터 액세스 계층 사이에서 중재 역할을 합니다.
  • 데이터 액세스 계층 (Data Access Layer): 데이터베이스나 다른 영구 저장소와의 상호작용을 처리하는 부분으로, 주로 리포지토리나 DAO와 관련됩니다.

헥사고날 아키텍쳐

  • 어댑터 (Adapter): 외부 시스템과의 통신을 처리하는 부분입니다. 이는 외부 시스템과의 상호작용을 포함하며, 외부 시스템과의 통신을 추상화하여 나중에 변경이 필요한 경우에도 쉽게 대응할 수 있도록 합니다.

  • 포트 (Port): 어댑터가 시스템과 상호작용하는 방식을 정의하는 인터페이스입니다. 이는 시스템의 외부로 노출되는 접점으로, 외부 시스템과의 통신 방법을 추상화합니다.

  • 포트와 어댑터의 구분: 포트는 시스템 내부의 인터페이스로, 어댑터는 이 포트를 구현하여 외부와의 상호작용을 담당합니다. 이를 통해 시스템 내부 로직은 인터페이스에 의존하며, 외부와의 실제 상호작용은 어댑터에서 처리됩니다.

  • 애플리케이션 (Application) 계층: 비즈니스 로직을 처리하는 부분으로, 포트와 어댑터 사이에서 중재 역할을 수행합니다. 애플리케이션 계층은 외부 시스템과 도메인 계층 사이의 연결 역할을 하며, 도메인 로직의 실행을 조정합니다.

  • 도메인 (Domain) 계층: 핵심 비즈니스 로직과 데이터를 포함하는 부분입니다. 시스템의 핵심 기능을 정의하고, 비즈니스 규칙을 구현합니다.

개인적인 생각

포트와 어댑터의 구분 항목을 보면 어댑터가 외부와의 상호작용을 담당한다고 했다.
레이어드 아키텍처와 비교하면 컨트롤러가 어댑터 계층에 해당할 것 같다.

애플리케이션 계층이 서비스계층과 비슷할 거 같은데 그렇다면 포트 계층은 어떤 계층이 분리된건지 확인해봐야겠다. 주말에~

0개의 댓글