전통적인 계층형 아키텍처 → 데이터베이스 주도 설계
육각형 아키텍처 → 의존성을 역전시켜 영속성 계층을 애플리케이션 계층의 플러그인으로 작동
6-1. 의존성 역전
application.service.Service →(호출) application.port.out.OutgoingPort ←(구현) adapter.out.persistence.OutgoingAdapter
- 영속성 어댑터 = 주도되는/아웃고잉 어댑터
- 포트: 애플리케이션 서비스가 영속성 문제(의존성) 없이 도메인 코드를 개발하기 위한 간접 계층
- 코어에 영향을 미치지 않으면서 영속성 계층 수정 가능
6-2. 영속성 어댑터의 책임
- 입출력 모델이 영속성 어댑터가 아닌 애플리케이션 코어에 있다.
- 포트 인터페이스를 통해 입력을 받는다
- 입력을 데이터베이스 포맷으로 매핑한다
- 입력 모델: 인터페이스가 지정한 도메인 엔티티/특정 데이터베이스 연산 전용 객체
- 애플리케이션 코어에 존재. 영속성 어댑터 변경이 코어에 영향을 미치지 않음.
- 데이터베이스 포맷: JPA 엔티티 객체
- 입력을 데이터베이스로 보낸다
- 데이터베이스 출력을 애플리케이션 포맷으로 매핑한다
- 포트에 정의된 출력 모델이 애플리케이션 코어에 위치한다.
- 출력을 반환한다
6-3. 포트 인터페이스 나누기
필요없는 화물을 운반하는 무언가에 의존하고 있으면 예상하지 못했던 문제가 생길 수 있다.