본문 바로가기
Server/🌱 Spring Boot (java)

[Gradle] common을 사용하는 멀티-모듈 프로젝트에서 순환참조 문제 해결 및 최적화

by 코딩하는 동현😎 2025. 1. 24.

Spring Boot 프로젝트에서 여러 모듈을 관리할 때, 순환참조 문제는 자주 발생할 수 있는 이슈 중 하나입니다. 특히, 멀티 모듈 프로젝트에서는 공통 모듈(common)과 다른 모듈들(producer, consumer) 간의 의존성을 관리하는 데 주의가 필요합니다. 이번 글에서는 common 모듈에서 순환참조 문제를 해결한 방법을 다뤄보겠습니다.


문제의 원인

producer나 consumer에서 common 모듈을 사용하는 것은 자연스러운 일입니다. common 모듈은 여러 모듈에서 공통으로 사용하는 클래스나 설정을 포함하고 있기 때문에 다른 모듈들이 이를 의존하는 구조입니다. 하지만 문제는 common 모듈에서 producer나 consumer에 대한 의존성을 추가하려고 할 때 발생합니다.

이렇게 의존성을 추가하면 common 모듈은 producer나 consumer 모듈을 참조하게 되며, 반대로 producer와 consumer는 common 모듈을 참조하므로 순환 참조가 발생하게 됩니다. 이 문제를 해결하려면 의존성 관리 방식을 개선할 필요가 있습니다.


문제 해결: bootJar 비활성화

순환참조 문제를 해결하기 위한 한 가지 방법은 common 모듈에서 bootJar 작업을 비활성화하는 것입니다. Spring Boot의 bootJar는 해당 모듈을 실행 가능한 JAR 파일로 패키징하는 작업을 수행합니다. 그러나 우리가 common 모듈을 라이브러리로 활용하고자 할 때, 실행 가능한 JAR 파일을 생성할 필요는 없습니다.

따라서, common 모듈의 bootJar를 비활성화하고 대신 일반 JAR 파일을 생성하도록 설정하는 방식으로 의존성을 간소화할 수 있습니다. 이렇게 하면 common 모듈이 Spring Boot 실행 파일 형태로 패키징되지 않고, 다른 모듈에서 라이브러리 형태로 활용될 수 있습니다.

 

해결 방법

common 모듈의 build.gradle 파일에서 bootJar 작업을 비활성화하고, jar 작업을 활성화하는 설정을 추가합니다:

// common/build.gradle

jar {
    enabled = true // JAR 파일 생성
}

bootJar {
    enabled = false // bootJar 작업 비활성화
}

이 설정을 통해 common 모듈은 실행 가능한 JAR 파일을 생성하지 않고, 일반 JAR 파일만 생성됩니다. 이렇게 하면 common 모듈을 라이브러리처럼 활용할 수 있게 되어 순환 참조 문제를 해결할 수 있습니다.

 

 

장점

  • 의존성 관리 간소화: common 모듈을 라이브러리 형태로 활용하면서, producer와 consumer는 common 모듈에 의존하지만, common 모듈은 producer나 consumer에 의존하지 않게 되어 순환 참조를 방지할 수 있습니다.
  • 빌드 최적화: common 모듈이 실행 가능한 JAR로 패키징되지 않으므로 빌드 시간과 패키지 크기를 줄일 수 있습니다.
  • 유지보수 용이성: 실행 가능한 JAR 파일이 아닌 일반 JAR 파일을 생성함으로써, 공통 모듈을 다른 프로젝트에서도 쉽게 라이브러리로 활용할 수 있습니다.

멀티 모듈 프로젝트에서 순환참조 문제는 의존성 관리 방식을 신중히 설정해야 해결할 수 있는 문제입니다. common 모듈에서 bootJar를 비활성화하고 일반 JAR 파일로 패키징하는 방법은 이 문제를 깔끔하게 해결할 수 있는 좋은 방법입니다. 이렇게 설정하면 common 모듈을 다른 모듈들과 독립적으로 관리하면서도 필요한 기능을 모두 공유할 수 있게 됩니다.

 

 

추천 설정

common 모듈에서 bootJar 작업을 비활성화하고, 다른 모듈들(producer, consumer)에서 공통 모듈을 의존성으로 추가하는 방식으로 멀티 모듈 프로젝트를 더욱 효율적으로 관리할 수 있습니다.

반응형

댓글