별집사의 IT세상

Hexagonal / Layered Architecture 본문

IT/Architecture

Hexagonal / Layered Architecture

별집사 2024. 7. 7. 23:12
반응형

헥사고날 아키텍처라는 구조를 기존의 계층형 아키텍처와 비교하여 이해해보자.

 

 

Layered Architecture(계층형 아키텍쳐)

전통적으로 많이 사용되고 있는 아키텍처이고, 소스코드의 역할에 따라 계층으로 분리한 아키텍처이다. 분리된 계층의 숫자에 따라서 N-Tier-Architecture라고도 하며 일반적으로는 4개의 레이더(Presentation, Business, Persistence, Database)로 구성되어 있다.

 

  1. Presentation Layer
    • 사용자 인터페이스와 브라우저 통신을 담당
  2. Business Layer
    • 비즈니스 로직 수행 및 애플리케이션의 핵심 기능 구현
  3. Persistence Layer
    • 데이터의 영속성을 관리하고, 데이터베이스와의 상호작용을 담당
  4. Database Layer
    • 실제 데이터베이스가 위치하는 계층

장점

  • 모듈성과 재사용성 향상 - 각 계층이 특정 기능에 집중하므로, 재사용성이 용이하다.
  • 테스트와 디버깅에 용이 - 각 모듈이 분리되므로 단위 테스트 수행에 용이하다.
  • 관심사의 분리로 인해 유지보수성이 향상 - 변경 필요 시 특정 계층만 수정할 수 있다.
  • 구현이 비교적 간단하고 대중적으로 알려져있는 패턴 - 직관적이고 이해하기 쉬워 쉽게 적응이 가능하다.

단점

  • 성능 오버헤드의 가능성 - 계층 간 통신으로 이해 데이터가 전송되면서 성능 저하 가능성이 존재한다.
  • 대규모 애플리케이션 확장성 제한 - 애플리케이션이 커질수록 계층이 비해져 시스템의 복잡성이 증가 할 수 있다.
  • 계층 간 의존성으로 인해 변경의 어려움 - 수직적인 의존관계로 인해 계층의 변경이 타 계층에 영향을 미칠 수 있다.

 

Hexagonal Architecture(헥사고날 아키텍쳐)

애플리케이션의 핵심 비즈니스 로직을 외부 요소로부터 격리시키는 것을 목표로 한다. 주요 특징은 다음과 같다.

 

  1. 포트와 어댑터
    • 포트 : 애플리케이션 코어와 외부 세계 사이의 인터페이스이다.
    • 어댑터 : 포트를 구현하여 실제 외부 시스템과의 통신을 담당한다.
  2. 애플리케이션 코어
    • 비즈니스 로직이 위치하며, 외부 의존성 없이 독립적으로 동작이 가능하다.
  3. 내부 포트 / 외부 포트
    • 내부 포트 : 애플리케이션 외부 요청에 의해 동작하는 포트
    • 외부 포트 : 애플리케이션이 외부 시스템에 의해 요청을 보내는 포트

장점

  • 유연성과 확장성 - 시스템 변경 시 핵심 비즈니스 로직에 영향을 주지 않는다. 실제 계층형에 비해 제일 좋다고 생각되는 점이다.
  • 테스트 용이성 - 각 로직을 독립적으로 테스트 할 수 있어 품질 향상에 도움이 된다.
  • 유지보수성 - 책임이 명확하게 분리되어있어, 코드 이해 및 수정이 용이하다.
  • 도메인 중심 설계 - 도메인 주도 설계(DDD)와 같은 접근 방식을 쉽게 적용 할 수 있다.

단점

  • 구현 복잡성 - 일반적으로 계층형에 익숙해져있는 사람이 많아, 포트와 어댑터를 구성하고 관리하는데 복잡성이 발생할수 있다.
  • 초기 개발 시간 - 마찬가지로 초기에 아키텍처 구축하는데 많은 시간과 노력이 필요할 수 있다. 실제로 프로젝트를 진행해보니 어느순간 계층형을 따라가고 있는 경우가 많아, 초기 아키텍처 확립에 많은 회의와 공수가 들어갔고, 변경이 일어났다.
  • 코드량 증가 - 인터페이스와 어댑터로 인해 전체 코드량이 증가할 수 있다.

 

결론

Hexagonal architecture는 이해하기 엄청 어렵지만, 잘 사용하면 굉장히 효율적인 개발이 가능하다고 느꼈다. 하지만 개발 진행 도중 계층형에 익숙해져있어 진행이 막힌 경우가 많아, 좀 더 사용해보며 익숙해질 필요가 있고, 계층형과 적절하게 섞어서 사용할 수 있으면 좀 더 좋은 프로젝트를 개발 할 수 있을 것 같다.

반응형
Comments