06. 영속성 어댑터 구현하기
의존성 역전하기
- 애플리케이션 서비스에서 영속성 기능을 사용하기 위해 포트 인터페이스를 호출한다.
- 포트 인터페이스는 영속성 어댑터 클래스에서 구현된다.
- 육각형 아키텍처에서 영속성 어댑터는 ‘주도되는’, ‘아웃고잉’ 어댑터다.
- 포트는 애플리케이션 계층과 영속성 계층을 격리하기 위한 간접 계층이다.
- 영속성 코드를 리팩터링해도 애플리케이션 코드에 영향을 주지 않는다.
- 런타임 의존성은 애플리케이션 → 영속성이기 때문에 영속성의 버그가 애플리케이션에 영향을 줄 수는 있다.
- 다만 포트가 계약을 만족하는 한 애플리케이션 계층에 영향을 주지 않으면서 영속성 계층을 마음껏 수정할 수 있다.
영속성 어댑터의 책임
- 입력을 받는다
- 입력 모델은 인터페이스가 지정한 도메인 엔티티나 특정 DB 연산 전용 객체
- 입력 모델은 코어 계층에 위치하기 때문에 어댑터 내부의 변경이 코어에 영항을 미치지 않는다
- 입력을 데이터베이스 포맷으로 매핑
- 자바에서는 일반적으로 JPA를 사용
- JPA로 매핑하지 않을 수도 있다.
- 입력을 데이터베이스로 보낸다
- 데이터베이스 출력을 애플리케이션 포맷으로 매핑
- 출력 반환
포트 인터페이스 나누기
영속성 어댑터 나누기
영속성 포트를 구현하는 어댑터는 어떻게 나눠야할까?