왜 필요한가
업무 규칙을 시험하려고 실제 데이터베이스와 웹 서버까지 띄워야 한다면 부담이 큽니다. 외부 도구를 바꿔 끼울 연결점이 필요합니다.
어떻게 해결하는가
- 가상 단일 프로세스: R1, A17 미저장. HTTP·CLI 어댑터가 입력 포트로 SaveArticle을 호출합니다.
- SaveArticle이 ID를 검증한 뒤 SaveRepository를 통해 메모리·내장 데이터베이스 어댑터를 호출합니다. 두 저장 어댑터는 애플리케이션 소유 포트에 의존합니다. 애플리케이션은 구현을 직접 참조하지 않습니다.
- 저장 완료: 0 → 1건, 반복해도 1건. 빈 ID나 쓰기 전 실패는 0건 유지, 문제 수정 후 재시도.
설명을 위한 가상 예시
연결부를 바꿔도 애플리케이션은 그대로
R1 · A17 · 처음에는 미저장
단일 프로세스 · 점선 테두리
1 · 구동 어댑터
- HTTP
- CLI
참조 → 입력 포트
2 · 애플리케이션
입력 포트SaveArticle
ID 검증 · 저장 조율
출력 포트 · 이곳에서 소유SaveRepository
3 · 피구동 어댑터
- 메모리
- 내장 데이터베이스
SaveRepository ← 어댑터 참조
실행 중 호출
- HTTP / CLI
- SaveArticle
- SaveRepository
- 메모리 / 내장 데이터베이스
파선 경로: 출력 포트로 저장소 호출, 저장 완료는 호출자에게 반환.
애플리케이션은 어댑터 구현을 직접 참조하지 않습니다. 테스트에서는 메모리로 데이터베이스를 대신합니다. 여섯 구성요소가 필수는 아닙니다.
- 저장 → 반복: 0 → 1 → 1건. 저장 완료 반환.
- 빈 저장소에서: 빈 ID나 쓰기 전 실패 → 0건. 문제 수정 후 재시도.
HTTP·CLI와 메모리·내장 데이터베이스는 대안입니다. 데이터 이전을 뜻하지 않습니다.
무엇이라 부르는가
헥사고날 아키텍처는 포트와 기술별 어댑터로 애플리케이션을 연결합니다. 육각형이 구성요소 여섯 개를 요구하는 것은 아닙니다. Cockburn
내부 정책에는 클린 아키텍처의 의존 규칙을 적용할 수 있습니다.
포트와 어댑터에는 간접 단계가 늘어납니다.
이 선택에 관한 이야기
세 언어가 댓글을 공유합니다. 작성하려면 GitHub 로그인이 필요합니다.