티스토리 뷰

1. 헥사고날 아키텍처(Hexagonal Architecture)

포트와 어댑터 아키텍처(Ports and Adapters Architecture)라고도 하며, 앨리스터 코오번 (Alistair Cockburn)이 개발했다

infrastructure(외부세계)로 부터 도메인 모델(비즈니스 로직)을 분리하기 위한 패턴이다.

그럼 domain과 infrastructure이 각각 뭘까?

출처: https://medium.com/codex/clean-architecture-for-dummies-df6561d42c94

도메인(domain)어플리케이션이 존재하는 이유이다. app의 본질이고, 차별성을 만드는 부분이다. 이 domain은 비즈니스 로직을 포함하고 있으며 데이터베이스나 web API나 프레임워크와 같은 기술로 부터 분리되어져야 한다.

인프라(infrastructure)는 기술을 나타낸다. 비즈니스 도메인이 아닌 나머지 모든 것들이다.

app이 어떻게 표현 되는지 즉, GUI, web API, CLI 콘솔로 표현되는지, 아니면 어떻게 데이터를 저장하는지 (파일, 데이터베이스, web API) 등 바뀔 수 있는 부분을 말한다.

 

출처 : https://mesh.dev/20210910-dev-notes-007-hexagonal-architecture/

2. 포트(Port)와 어댑터(Adapter)란?

(1) 포트: 항구라는 뜻 같이, 내부 비즈니스 영역(domain)을 외부 영역(infrastructure)에 노출한 API, 인터페이스이다.

(2) 어댑터: 클라이언트에 제공해야할 인터페이스를 따르면서도 내부 구현은 서버의 인터페이스로 위임하는 것.

어댑터는 포트를 implement해서 실제 동작을 구현한다. 바뀌어 져야 하기 때문에 코드로 구현 하되, 비즈니스 로직이 존재하면 안된다.

1) Primary adapter: 사용자의 요청을 받아들일때 사용하는 어댑터

2) Secondary adapter: 도메인 모델 처리에 사용되는 어텝터

 

따라서 메인 domain 로직과 외부 infrastructure를 이어주는 역할이 port와 adapter라고 보면 된다.

 

3. Layered Architecture(3-tier architecture)과의 차이

Layered Architecture에서는 presentation layer, business logic layer, data access layer로 나눠 비즈니스 로직 레이어는 데이터 레이어에 의존하고, 프레젠테이션 레이어는 비즈니스 로직 레이어에 의존한다. 

이렇게 대부분의 어플리케이션이 data access layer에 의존하고 있기 때문에, 이 layer에서의 변화가 일어난다면 다른 layer에도 변경이 필요하게 된다. 

 

따라서  layered architecture의 장점은 다음과 같다

  • 높은 추상화를 지원하지 않아도 된다.
  • 그러한 프로젝트에 개발자를 찾고 온보딩하는것이 훨씬 쉽다.
  • 개발 속도개 더 빠르다. 

따라서 다음과 같은 경우 Layered Architecture를 사용하면 좋다.

  • 많은 비즈니스 로직이 필요없는 프로젝트(e-commerce site, 블로그, CRUD 위한 간단한 api)
  •  빨리 개발해야해서 릴리즈 되어야할 경우
  • 기술을 바뀔 가능성이 적은 프로젝트

 

따라서 복잡도가 필요하지 않은 작은 시스템에서는 layered architecture가 더 적합할 수 있다.

하지만 복잡도를 올리면서 외부에 대한 의존성을 완전히 제거한 hexagonal architecture의 경우, 

 

 

반면, 헥사고날 아키텍처(클린 아키텍처)의 경우 Port라는 추상화를 도입해서 의존성을 역전하는 것이 layered와 hexagonal 아키텍처의 큰 차이점이다.

추상화 계층을 도입하면 의존성을 줄이거나 역전할 수 있지만, 대부분 복잡도가 올라단다.

따라서 복잡도를 올리면서 외부에 대한 의존성을 제거한 hexagonal architecture는 다음과 같은 경우에 적합하다.

  • 부동산이나 뱅킹 시스템 같이 많은 복잡한 비즈니스 로직을 포함하고 있는 enterprise 프로젝트에 적합하다
  • 성장 가능성이 있고 기술에 적응해야할때
  • 개발 팀이 크고 여유가 있을 때
  • 외부랑 자주 바뀔 여지가 있다면 이때 헥사고날이 유리하다.

 

[Reference]

https://mesh.dev/20210910-dev-notes-007-hexagonal-architecture/

https://haandol.github.io/2022/02/13/demystifying-hexgagonal-architecture.html#fn:2

https://betterprogramming.pub/comparing-three-layered-and-clean-architecture-for-web-development-533bda5a1df0

https://engineering.linecorp.com/ko/blog/port-and-adapter-architecture

 

 

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday