SW 구조/아키텍처
헥사고날(Hexagonal)
tacoyaggi
2023. 11. 23. 08:53
개념
- 사전적 의미로 육각형 건축물을 뜻함
- 레이어 간의 원하지 않는 종속성이나 비즈니스 로직으로 인한 사용자 인터페이스 코드의 오염과 같은 객체지향 소프트웨어 설계의 알렺니 구조적 함정을 피하기 위해 Alistair Cockburn에 의해 발명
- 소프트웨어 설계에 사용되는 아키첵처 패턴중 하나로 여러 소프트웨어 환경에 쉽게 연결할 수 있도록, 느슨하게 결홥된 애플리케이션 구성요소를 만드는 것을 목표로 하는 아키텍처
- 도메인의 비지니스 로직을 외부 라이브러리 및 툴로부터 분리 할 때 포트와 어댑터라고 부르는 인터페이스를 사용하기 때문에 포트&어댑터 아키텍처라고도 부른다.
- 도메인 비즈니스 로직이 외부요소에 의존하지 않게 만들고, 프레젠테이션 계층과 데이터 소스 계층 같은 외부 요소들이 도메인 계층에 의존하도록 한다.
- 외부와의 접촉을 인터페이스로 추상화하여 비즈니스 로직 안에 외부 코드나 로직의 주입을 막는다.
- 외부 라이브러리 및 툴로부터 분리시키는 것이 아키텍처의 핵심이다.
- 외부에서 도메인 비즈니스 로직에 접근하기 위해서는 Adapter를 사용하고 Port를 통해 접근해야 한다.
구성
- Adapter
- Adapter는 Port를 통해 외부 통신을 담당한다.
- Adapter는 특정 외부 기술이나 프레임워크에 의존적인 로직을 담당
- Incoming Adapter
- 주로 사용자 인터페이스, 테스트 또는 외부 시스템으로부터의 요청을 애플리케이션 코어로 주도하는데 사용
- Outcoming Adapter
- 애플리케이션 코어에서 외부에 데이터를 전달하는 역할을 담당한다.
- 데이터베이스에 데이터를 저장하거나 외부 시스템에 메시지를 전송하는 역할
- UseCase
- 인커밍 Adapter로 부터 입력받는 역할을 하고 인터페이스이므로 비즈니스 로직을 구현하는 Service 클래스에서 해당 기능을 구현하는 형태
- UseCase의 메서드는 최대한 작은 범위로 구성해야하며 입력 유효성 검증은 하지 않는다.
- 비즈니스 로직으로 애플리케이션의 도메인 로직을 캡슐화
- 도메인 로직을 실행하는 코드의 집합
- 어떤 작업을 수행하고 어떤 결과를 반환해야 하는지에 대한 규칙 정의
- 도메인 로직
- 특정 비즈니스 영역의 규칙을 나타냄
- 은행 잔고가 양수일 때만 돈을 뽑을 수 있는 규칙이 그 예
- 규칙들은 주로 도메인 모델을 통해 구현
- 비즈니스 로직
- 사용자의 인출 요청을 받아 도메인 로직으로 유효성 체크하고 결과를 데이터베이스에 저장하고 사용자에게 반환하는 전체 과
- Port
- Port는 애플리케이션 코어의 경계를 정의
- 애플리케이션 코어가 제공해야 할 기능을 나타내며 Adapter를 통해 애플리케이션 코어에 접근하는 인터페이스
- 도메인 로직이 아닌 애플리케이션 코어에 접근하는 인터페이
- Incoming Port
- 외부 요청이 애플리케이션 코어로 들어오는 경로를 정의
- 웹 요청, GUI 이벤트, 스케줄 이벤트 등이 Incoming Port를 통해 애플리케이션 코어로 들어 온다.
- Controller 와 Service 사이의 인터페이스
- Outcoming Port
- 애플리케이션 코어가 외부 서비스를 제공하기 위한 경로를 정의
- 데이터베이스, Message, 웹 서비스 등에 데이터를 전송하거나 요청하 경우에 사용
- Repository 와 Service 사이의 인터페이스
URL
- https://velog.io/@coconenne/%ED%97%A5%EC%82%AC%EA%B3%A0%EB%82%A0-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%96%B4%EB%8C%91%ED%84%B0%EC%99%80-%ED%8F%AC%ED%8A%B8-%EA%B2%B0%ED%95%A9%EB%8F%84%EB%A5%BC-%EB%82%AE%EC%B6%B0%EB%B3%B4%EC%9E%90
- https://willbfine.tistory.com/599
- https://covenant.tistory.com/258