개발노트

[MSA] SpringBoot 멀티 모듈 프로젝트 구성 본문

MSA

[MSA] SpringBoot 멀티 모듈 프로젝트 구성

ddong-kka 2025. 2. 10. 12:10

개요

MSA 강의를 수강중 각 서버마다 중복되는 모듈이 나오면 서버마다 새로 생성해줘야하는 불편함을  느꼈다.

때마침 다른 수강생분께서 이 문제를 해결하는 글을 올려주셔서 참고해 내가 이해하기 편하게 다시 정리해보려한다.

 


 

프로젝트 구성

 

기존의 프로젝트들과 동일한 패키지 경로의 프로젝트를 하나 생성해준다.

com.spring-cloud.eureka.** 경로로 구성해왔지만 지금 생성하는 프로젝트는 최상위 모듈로 사용할것이기 때문에

나는 com.spring-cloud.eureka로 프로젝트를 생성했다.

 

그 다음 기존의 프로젝트들을 하위 모듈로 가져온다. 프로젝트안에 그냥 넣으면된다.(나는 그렇게 돌아갔다)

방금 생성한 project 라는 이름의 프로젝트를 최상위 모듈로 사용하고 기존의 프로젝트들을 하위 모듈로 사용해

서로 공유를 하게 하는 방법이다.

 

기존의 프로젝트들이 gradle 이면 최상위 모듈도  gradle로 생성해줘야한다.

 


최상위 모듈의 settings.gradle 설정

 

 

나는 여기서 바보처럼 시간을 날렸다. 당연한건데 진짜 바보같았다

apllication.yml에서 설정한 applicaiton.name이 아니라 프로젝트 파일명을 include 해야한다.

 


사용할 모듈 의존성 추가

 

나는 order 에서 product의 외래키 관계로 연결하고 product에 잇는 dto를 가져와 사용하려한다.

위에서 설명한 최상위 모듈의 settings.gradle 에 등록한 이름을 의존성으로 추가해준다.

동일한 이름으로 의존성을 추가해야한다.

implementation project (:연결한 프로젝트 이름)

 

결과 확인

 

다른 하위 모듈의 클래스를 성공적으로 가져와 사용할 수 있다.

출저 블로그 글에서 언급하신 것처럼, 모노리포 환경에서는 당연하게 import해서 클래스를 가져와 사용하는 것이 당연했지만 MSA에서는 그런 방식이 당연하지 않았다 이러한 과정을 통해, MSA에서도 하위 모듈의 클래스를 가져와 사용하는 방법이 있다는 것을 알게 되었다.

 

 

참고한 블로그

출처 : https://sunro1994.tistory.com/305 

 

[MSA] 멀티 모듈에서 중복되는 코드를 서브모듈끼리 공유하는 방법

멀티 모듈을 모노 리포지터리로 구성하여 사용하던 중 FeignClient를 사용한 모듈 간 통신 중에 의문이 하나 들었다.모듈 간 통신하는 과정에서 전달하는 DTO는 형태가 동일한데 이걸 굳이 각 모듈

sunro1994.tistory.com