AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

Ports and Adapters (Hexagonal Architecture) 개요

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

아키텍처 패턴

대상자

  • 소프트웨어 개발자 및 아키텍처 설계자
  • 난이도: 중간 (아키텍처 개념 이해 필요)
  • 도움: 외부 의존성과 비즈니스 로직 분리, 테스트 및 유지보수 용이성 확보

핵심 요약

  • 비즈니스 로직과 외부 의존성 분리: PortsAdapters를 통해 비즈니스 로직을 외부 요소(예: 데이터베이스, 프로토콜)와 완전히 분리
  • 사용자 중심 설계: Use Cases를 중심으로 설계하여, 테스트 시 외부 시스템과 분리 가능
  • 유연성 강화: Adapters를 통해 외부 시스템 변경(예: HTTP → gRPC) 시 비즈니스 로직 수정 필요 없음

섹션별 세부 요약

1. 개념 소개

  • Ports and Adapters는 Alistair Cockburn이 1994년 제안, 2005년 블로그에 공식화
  • 목표: 사용자, 자동화 테스트, 배치 스크립트 등과 무관하게 비즈니스 로직을 개발/테스트
  • 핵심 원칙: 비즈니스 로직은 외부 요소와 결합되지 않아야 함

2. 구조 요소 설명

  • Hexagon: 비즈니스 로직(Use Cases, 도메인 엔티티 등)이 위치하는 핵심 영역
  • Ports: Hexagon 내부에서 정의된 인터페이스. 외부 시스템과 상호작용을 위한 계약
  • Driver Ports: 사용자/테스트가 Use Cases를 호출할 때 사용 (예: debitAccount() 메서드)
  • Driven Ports: 외부 시스템(예: DB, 메시지 브로커)과 상호작용을 위한 계약 (예: saveData() 인터페이스)
  • Adapters: Ports와 Actor 간 데이터 변환을 담당
  • Driver Adapters: 외부 Actor(예: 웹 요청)의 데이터를 Use Case 입력 형식으로 변환
  • Driven Adapters: Use Case의 출력을 외부 Actor(예: DB)가 이해할 수 있는 형식으로 변환

3. 적용 사례 및 이점

  • 테스트 용이성: 외부 의존성을 메모리 내에서 시뮬레이션 가능 (예: In-Memory DB 사용)
  • 유연성: 외부 시스템 변경 시 Adapters만 수정 (예: HTTP → gRPC 전환 시)
  • 확장성: 새로운 기능 추가 시 Hexagon 내부에만 영향 (예: 새로운 Use Case 추가)

결론

  • 실무 적용 팁: Use Cases를 중심으로 설계하고, 외부 의존성을 Ports와 Adapters로 분리하여 테스트와 유지보수를 용이하게 하세요. 예: @Repository 어노테이션을 통해 DB 인터페이스를 분리하고, Mockito로 외부 의존성을 모킹하여 테스트 가능.