헥사고날 아키텍처 구조 설명

2026. 2. 12. 17:03·개발/spring boot
728x90
반응형

 

1. 패키지 구조 (Standard Layout)

가장 일반적으로 사용되는 패키지 구성은 **내부(Domain/Application)**와 **외부(Infrastructure/Adapter)**를 엄격히 나누는 방식입니다.

  • adapter (외부 영역)
    • in: 외부에서 시스템으로 들어오는 요청 처리 (예: web, api)
    • out: 시스템에서 외부로 나가는 요청 처리 (예: persistence, external-service)
  • application (내부 영역)
    • port: 인터페이스 정의
      • in: 유스케이스 인터페이스 (Input Port)
      • out: 저장소나 외부 통신을 위한 인터페이스 (Output Port)
    • service: 비즈니스 로직 구현체 (Use Case 구현)
  • domain (핵심 영역)
    • 비즈니스 엔티티와 순수 도메인 로직 (외부 라이브러리 의존성 없음)

2. Controller부터 흐름도 (Data Flow)

핵사고날 아키텍처의 핵심은 **"의존성은 항상 안쪽(Domain)으로 향한다"**는 것입니다. 흐름을 따라가 보시죠.

① Adapter In (Controller)

사용자의 요청을 받는 시작점입니다.

  • Web Adapter에 속한 Controller가 HTTP 요청을 받습니다.
  • 입력값의 유효성 검사(Validation)를 수행한 뒤, 이를 Input Port(Interface)로 전달합니다.

② Port In (Use Case)

  • 애플리케이션이 수행할 작업의 목록(Interface)입니다.
  • Controller는 구현체가 무엇인지 알 필요 없이 이 인터페이스에만 의존합니다.

③ Service (Use Case Implementation)

  • 인터페이스를 구현한 실제 비즈니스 로직입니다.
  • 도메인 엔티티를 불러와 비즈니스 규칙을 실행합니다.
  • 데이터를 저장하거나 외부 시스템을 호출해야 한다면 Port Out을 호출합니다.

④ Port Out

  • 데이터베이스 저장이나 외부 API 호출을 위한 인터페이스입니다.

⑤ Adapter Out (Persistence/External)

  • Port Out 인터페이스를 실제로 구현한 영역입니다.
  • 예를 들어, JPA를 사용하여 DB에 저장하거나 RestTemplate으로 타사 API를 호출하는 로직이 여기 담깁니다.

3. 요약: 컴포넌트 간 관계

단계 구성 요소 역할

Trigger Controller 요청 접수 및 응답 반환
Boundary Input Port 애플리케이션 진입로 (Interface)
Logic Service 핵심 비즈니스 로직 수행
Boundary Output Port 외부 인프라 연결 통로 (Interface)
Execution Repository/Client 실제 DB 저장 및 외부 통신

핵심 포인트: Controller(In)와 DB Repository(Out)는 서로를 전혀 모릅니다. 둘 사이의 모든 소통은 중간의 Port를 통해서만 이루어지기 때문에, 나중에 DB를 MySQL에서 MongoDB로 바꾸더라도 비즈니스 로직(Service)은 한 줄도 고칠 필요가 없게 됩니다.

 

728x90
반응형

'개발 > spring boot' 카테고리의 다른 글

헥사고날 아키텍처 — 싱글 모듈에서 멀티 모듈로  (0) 2026.03.05
self-invocation 때문에 서비스 검증(@Validated)이 안 걸리는 문제 코드와, 실무에서 제일 흔한 해결책인 검증이 필요한 메서드를 다른 빈으로 분리 방법  (0) 2026.02.26
(Spring) sso 외부 인증 토큰을 검증하고 세션에 사용자 정보를 저장하는 흐름  (0) 2026.01.07
resolveLocale(req)가 하는 일 - 이 요청의 언어/국가(locale)를 어떻게 정할까?  (0) 2025.10.15
Authentication을 SecurityContext 저장하는 사용방  (0) 2025.10.13
'개발/spring boot' 카테고리의 다른 글
  • 헥사고날 아키텍처 — 싱글 모듈에서 멀티 모듈로
  • self-invocation 때문에 서비스 검증(@Validated)이 안 걸리는 문제 코드와, 실무에서 제일 흔한 해결책인 검증이 필요한 메서드를 다른 빈으로 분리 방법
  • (Spring) sso 외부 인증 토큰을 검증하고 세션에 사용자 정보를 저장하는 흐름
  • resolveLocale(req)가 하는 일 - 이 요청의 언어/국가(locale)를 어떻게 정할까?
nix-be
nix-be
  • nix-be
    NiX
    nix-be
  • 전체
    오늘
    어제
    • 홈
      • 책
        • 오브젝트
      • 성장
        • jpa Querydsl 정리
        • 코딩테스트
        • 스프링 핵심 원리 - 기본편
      • 인프라
        • linux
        • vmware
        • CI&CD
        • 네트워크
        • docker
      • 개발
        • spring boot
        • spring security
        • JPA
        • java
        • thymeleaf
        • 이슈
        • jquery
        • javascript
        • 안드로이드
        • MyBatis
        • git
        • 과제
      • DB
        • postgreSql
        • mysql
        • redis
      • 잡다한것
        • 프로그램
        • 일상 관련
        • 프로젝트-주차관리
      • 회사
        • 티
        • 피
  • 블로그 메뉴

    • 홈
    • 개발
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
nix-be
헥사고날 아키텍처 구조 설명
상단으로

티스토리툴바