헥사고날 아키텍쳐

Seunghee Ryu·2023년 10월 21일
0

핀테크 클론코딩

목록 보기
5/5

아키텍쳐?

  • 비즈니스 요구 사항을 만족하는 시스템을 구축하기 위해서 구조를 정의한 것
    - 소프트웨어 응용 프로그램을 설계하기 위한 모델 또는 패턴

헥사고날 아키텍쳐?

  • 포트 및 어댑터 아키텍쳐
  • 객체지향 소프트웨어 설계의 구조적 함정을 피하기 위해 Alistair Cockburn에 의해서 만들어짐
  • 기술 선택에 대한 고민으로 소모되는 비용을 아낄 수 있는 대표적인 애플리케이션 아키텍처
  • 의존의 방향이 중앙(도메인)을 향하게 되어있음

장점

  • 아키텍쳐 확장이 용이
  • SOLID 원칙을 쉽게 적용
  • 모듈 일부를 배포하는게 용이
  • 테스트를 위해 모듈을 테스트용으로 변경 가능하기 때문에 테스트가 안정적이고 쉬움
  • 오래 지속되는 도메인 모델에 관심

구성

  • 헥사고날 아키텍처는 내부(도메인)과 외부(인프라)로 구분된다
    - 내부 : 순수한 비즈니스 로직을 표현, 캡슐화된 영역이고 기능적 요구사항에 따라 먼저 설계
    - 외부 : 내부 영역에서 기술을 분리하여 구성한 영역, 내부 영역 설계 이후 설계

  • 도메인 객체
    - 도메인 객체는 상태와 동작을 가질 수 있다
    - 동작이 상태에 가까워질수록 이유를 이해하고 유지하는게 쉬워진다
    - 도메인 객체는 외부 종속성이 없다
    - 순수 자바이며 유스 케이스에 대한 API를 제공한다
    - 비지니스 요구사항이 변경되었을 때에만 도메인이 변경된다(변경 이유는 하나여야 한다는 단일 책임 원칙을 지키기 쉽다)
    - 도메인-드리븐-디자인을 적용할 수 있다

  • 유스 케이스
    - 유스 케이스는 유저가 소프트웨어를 사용하여 무엇을 하는지에 대한 추상적인 설명
    - 모든 비즈니스 룰과 로직이 포함되어 있다
    - 도메인 객체와 비슷하게 외부 영역에 종속성이 없다
    - 만약 헥사곤의 바깥에서 뭔가를 필요로 한다면 아웃풋 포트를 만들어야 한다

  • 인풋과 아웃풋 포트
    - 모든 커뮤니케이션은 포트를 통해 이루어진다
    - 인풋 포트는 외부 컴포넌트에서 호출할 수 있는 간단한 인터페이스이며 유스케이스에 따라 구현된다
    - 이러한 인풋 포트를 호출하는 컴포넌트를 인풋 어댑터 혹은 드라이빙 어댑터라고 부른다
    - 아웃풋 포트는 유스케이스에서 호출할 수 있는 간단한 인터페이스이다(예:데이터베이스 접속)
    - 이 인터페이스는 유스케이스의 요구에 알맞게 디자인된다
    - 하지만 아웃풋 혹은 드리븐 어댑터라고 불리는 외부 컴포넌트에 의해 구현된다
    - 종속성 반전 원칙을 사용

  • 어댑터
    - 어댑터는 헥사고날 아키텍쳐의 외부 레이어를 형성하며 코어 파트는 아니지만 코어와 상호작용을 한다
    - 인풋 어댑터 혹은 드라이빙 어댑터가 인풋 포트를 호출하여 동작을 수행한다.
    - 아웃풋 어댑터 혹은 드리븐 어댑터는 유스케이스로부터 호출되어 데이터베이스로부터 데이터를 제공한다
    - 아웃풋 어댑터는 아웃풋 포트 인터페이스를 구현한다
    - 어댑터는 특정 레이어의 교환을 쉽게 만든다(만약 다른 데이터베이스가 필요해진다면 영속성을 지니고 예전의 아웃풋 포트 인터페이스를 구현하는 새로운 어댑터를 추가하면 된다)


참고

0개의 댓글