inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 2

핵사고날 아키텍처 기반으로 멀티 모듈 설계 시 질문드립니다..

2

chanboklee

작성한 질문수 2

0

안녕하세요!
강의를 열심히 듣다가 돌연 멀티 모듈이라는 주제로 생각하다가 질문을 남깁니다!
현재 강의에서는 application 레이어에서 repository를 가지고 있는데요!
멀티 모듈로 설계 시에도 동일하게 application 레이어에 repository를 가지는 게 일반적인가요?
검색을 하거나 하면 adapter에 persistence 쪽이나 infra 레이어 쪽에 가지고 있어야 한다는 내용이 보이는거 같아서요. 토비님께서는 어떻게 생각하시는지 궁금합니다!
또한, 보통 멀티 모듈로 프로젝트를 구성하실 때 어떤 방식으로 접근하시는지도 궁금합니다!
긴 글 읽어주셔서 감사합니다.

java spring spring-boot jpa 리팩터링 ddd

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. chanboklee님께서 질문하신 내용은 헥사고날 아키텍처에서 Repository의 위치멀티 모듈 구성 방식에 대한 질문으로 이해했습니다.

헥사고날 아키텍처에서는 일반적으로 다음과 같이 구성할 수 있습니다.

  • Application 레이어: Repository 인터페이스(Port) 정의
  • Adapter 또는 Infrastructure 레이어: JPA, MyBatis 등을 사용하는 Repository 구현체(Adapter) 작성
  • Domain 레이어: 핵심 비즈니스 규칙과 도메인 모델에 집중

따라서 Repository 인터페이스를 application 레이어에 두고, 실제 영속성 기술을 사용하는 구현체를 persistence 또는 infrastructure 모듈에 두는 구조는 의존성 역전 원칙에 부합합니다. 중요한 기준은 Repository라는 이름이나 패키지 위치 자체보다, 도메인 및 애플리케이션 코드가 JPA와 같은 구체적인 기술에 직접 의존하지 않는가입니다.

다만 멀티 모듈 구성에 정답이 하나만 있는 것은 아닙니다. 애플리케이션 단위로 모듈을 나눌 수도 있고, 도메인이나 애그리거트 단위로 나눌 수도 있습니다. 프로젝트의 규모, 팀 구조, 배포 단위, 모듈 간 결합도 등을 고려하여 선택해야 하며, 어떤 구조를 선택하든 각 모듈의 책임과 의존 방향을 명확히 하는 것이 중요합니다.

관련하여 다음 기존 답변들이 질문과 밀접합니다.

멀티 모듈 구성

멀티 모듈과 DDD·헥사고날 아키텍처를 함께 적용할 때의 접근 방법을 다룬 답변입니다. 지식공유자님께서는 Gradle 멀티 모듈 구성이나 도메인 중심의 모듈 분리 등 여러 접근 방법이 있으며, 모든 상황에 적합한 이상적인 멀티 모듈 구조는 없다고 설명하셨습니다. 선택한 구조의 이점과 단점, 트레이드오드를 고려해야 한다는 내용도 확인하실 수 있습니다.

의존성 방향과 관련된 질문이 있습니다.

Application 레이어에 Repository 인터페이스를 두고 Persistence 레이어에 구현체를 두는 구조에서, 의존성 방향과 헥사고날 아키텍처의 관계를 설명한 답변입니다. DIP를 적용하면 코드상의 의존 방향이 application을 향할 수 있으며, 이것은 헥사고날 아키텍처 또는 DIP가 적용된 레이어드 아키텍처로 이해할 수 있다는 내용입니다.

어플리케이션 , 도메인 계층질문

Application 레이어와 Domain 레이어의 역할 경계, Repository 인터페이스를 Application 레이어에 두는 이유, 여러 애그리거트의 로직을 조합하는 방법에 대해 설명한 답변입니다. 애플리케이션 서비스는 도메인 로직을 직접 구현하기보다는 필요한 애그리거트를 조회하고 도메인 기능을 호출하는 오케스트레이션 역할을 담당할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

자료 다운로드 문제

0

13

1

인넬리제이 무료버전

0

15

1

안녕하세요 질문있습니다.!

0

18

2

DataSourceUtils.releaseConnection 할때요 SQLException e 사용하는 이유등

0

26

1

강의 기다리고 있습니다!

0

30

0

@Modifying에 관하여

1

28

1

4강 카드뉴스 자동화 자료가 안보입니다!!

0

33

2

수업자료 오타

0

20

1

Post, PostEntity에서 User, UserEntity 의존

0

30

1

이클립스 스프링 환경설정 오류

0

50

2

4강 카드뉴스 자동화 자료

4

73

1

내부 객체 직접 접근에 관하여.

0

55

1

라이브 강의 영상 녹화본이 있을까요?

0

73

1

presentation error

0

44

1

인증이 늦었습니다ㅜㅜ 확인부탁드립니다

0

69

1

9월 8일 세션 진행한 거는 없었을까요

0

57

1

CertificationServiceTest

0

37

1

FlushModeType.COMMIT (12:45) 예시코드 질문

0

39

1

미션1 진행방법 관련

1

61

1

클로드코드 명령어 - 대화&세션관리부분 강의자료 빈폴더

0

42

1

InvalidCurriculumException DIP 적용 여부 문의

0

42

2

설계 트레이드 오프 링크 접속 안됨

0

105

2

헥사고날 아키텍처와 DDD를 적용할 때, 화면에 강하게 연관된 조회 데이터를 어떻게 다루는 게 좋은지 궁금합니다.

0

154

2

Request DTO에서 Entity를 생성할 때 의존성 방향을 반대로 하면 어떨까요?

0

136

2