유저 / 상품 / 주문 으로 구성된 현재의 모노리스 서비스를 마이크로서비스로 분리하고, 각 마이크로서비스 간의 통신 및 데이터베이스 연동을 구현하고자 한다.
그러기 위해서, 첫번째로 멀티 모듈 디펜던시 관리를 하고자 하였다.
즉, 첫번째로 해야 할 작업은 모노리스 서비스를 멀티 모듈화 하는 것이다.
멀티 모듈 디펜던시 관리는 큰 규모의 프로젝트에서 모듈 간의 의존성을 체계적으로 관리하기 위해 필요하다.
모듈화는 코드의 재사용성과 유지보수성을 향상시키지만, 각 모듈이 서로 올바르게 의존하고 독립적으로 배포되려면 모듈 간의 의존성을 효과적으로 관리해야 한다. 여기서 모듈은 하나의 실행 또는 배포 가능한 어플리케이션 일 수도 있고, 특정 기능을 담은 컴포넌트일 수도 있다.
모든 코드를 user-service / product-service / order-service / app 으로 크게 네가지로 나누어서 멀티모듈화를 진행하였다.
리팩토링을 완료하였으나, 멀티 모듈로 인한 디팬던시 관리가 되어야 하는데 관리가 되지 않았다.
롬북등이 정상적으로 실행되지 않았기에, 직접적으로 모듈을 이어주려고 하였다.
File > Project Structure > Modules

여기서 각 디팬던시가 루트 build.gradle 을 상속받게 하기 위해서, 각 멀티 모듈을 클릭하고 Dpendencies 를 클릭

여기서 + 를 클릭 후 , 루트 모듈인 buyme 를 추가하였다.
이후 ok를 누르면 완료가 되는데, 여기서 오류가 발생했다.

"Content root '/Users/gimhuiseog/IdeaProjects/buyme/app' is defined for modules 'app' and 'buyme.app'. Two modules in a project cannot share the same content root." ("콘텐츠 루트 '/Users/gimhuiseog/IdeaProjects/buyme/app'는 모듈 'app' 및 'buyme.app'에 대해 정의되어 있습니다. 프로젝트의 두 모듈은 동일한 콘텐츠 루트를 공유할 수 없습니다.")
오류의 원인 1 : 두 개의 모듈이 동일한 콘텐츠 루트를 공유하려고 시도할 때 발생한다. 즉, 두 개의 모듈이 동일한 디렉터리를 루트 디렉터리로 사용하려고 하고 있어서 발생하는 충돌이었다. 즉, 기존에 있던 모노리스 서비스 때문에 모듈 간에 충돌이 일어나는 것 이었다.
오류의 원인 2 : 루트 build.gradle 에 설정이 잘못되었다.
오류 해결 방법 1 기존에 있던 모노리스 서비스의 src를 삭제한다.
오류 해결 방법 2 루트 build.gradle 설정 오류
build.gradle 을 다음과 같이 설정했어야 했다.

루트 build.gradle 의 subproject 설정 부분
이를 통해, 하위 모듈들이 루트 build.gradle 을 상속받을 수 있게 되었다.
'Project > Buy me If you can' 카테고리의 다른 글
Buyme TIL240827 MSA 환경에서 api gateway 를 통한 데이터 통신 (0) | 2024.08.29 |
---|---|
Buyme TIL240826 멀티모듈 통신오류 (0) | 2024.08.29 |
Buyme TIL240813 기술적 의사결정 - 주문 상태 및 반품 상태의 세분화와 Enum 사용 (0) | 2024.08.14 |
Buyme TIL 240810 .env 파일 세팅하기 (0) | 2024.08.10 |
Buyme TIL240809 Dockerfile/DockerCompose 세팅 (intellij 로 실행한 환경과, docker로 실행한 환경은 다르다) (0) | 2024.08.10 |