본문 바로가기

아키텍쳐

Layered Architecture vs Hexagonal Architecture

Layered Architecture

장점

Layer간 응집성을 높이고 의존도를 낮출 수 있음
- 상위 계층은 하위 계층을 호출하는 단방향성 유지
- 상위 계층은 하위 계층으로부터 영향받지 않게 구성
- 하위 계층은 자신을 호출하는 상위 계층을 알지 못하게 구성

  • 시스템 분석이 용이함
  • 계층간 구조가 나누어져 있어 재사용성이 높음
  • 계층별 테스트가 용이함

 

단점

  • 신규 비지니스 추가 시 Repository → Service → Controller 순서대로 개발되기 쉬운 구조라 비지니스 로직에 우선하기 어려움
  • ORM 사용시 비지니스 로직이 데이터엑세스 로직과 강하게 연결됨
  • 프리젠테이션 layer 테스트 하기가 어려움
  • 제약사항을 따르지 않아 특정 계층에 로직이 집중 될경우 유지보수 비용 증가 및 확장성 떨어짐

장점
Layered Architecture가 가진 단점들을 보완하기 위해 생겨남
꼭 Hexagonal Archtecture가 Layered Architecture보다 낫다는건 아님!!
Layered Architecture가 가진 장점들을 가져가면서

  • 비지니스 로직과 인프라 영역을 명확히 분리할 수 있음
    -> 비지니스 로직과 데이터엑세스간의 강결합 되는 문제가 해결됨

단점

  • 패키지 구조가 Layered Architecture보다 복잡해짐
    -> 외부 서비스에 의존성이 별로 없고 비지니스 복잡도가 낮다면 Layered Architecture 쓰는게 효율적임

 

용어

  • 인바운드 어댑터 : 외부에서 들어온 요청을 인바운트 포트를 호출해서 처리
    ex. Rest API 호출, 메세지컨슈머, 기업회원 호출
  • 인바운드 포트 : 도메인 코드에 접근하기 위한 인터페이스
    ex. 비지니스 로직이 있는 서비스 호출, CompanayUserService 호출
  • 아웃바운트 어댑터 : 비지니스 로직에서 들어온 요청을 외부 어플리케이션/서비스를 호출해서 처리
    ex. ORM, Database, 메시지브로커
  • 아웃바운드 포트 : 도메인 코드에 접근하기 위한 인터페이스
    ex. CompanyUserRepository를 통해 기업회원 조회