[SpringBoot] 프로젝트가 여러개일때, 공통 호출 로직에 대한 프로젝트 분리 및 JAR파일로 의존성 추가 하는 방법 3가지
Spring Boot + Gradle 환경에서
공통 코드를 별도 프로젝트로 분리 → JAR 생성 → 다른 5개 프로젝트에서 의존성으로 추가
하는 가장 일반적이고 안정적인 방법 정리
공통 코드 전용 프로젝트 생성
새로 common-module 같은 프로젝트를 하나 만든다.
common-module
└ src/main/java/... (공통 코드)
build.gradle (Kotlin DSL 아닐 때 Groovy 기준)
plugins {
id 'java'
}
group = 'com.mycompany'
version = '1.0.0'
java {
sourceCompatibility = '17'
targetCompatibility = '17'
}
dependencies {
// 필요한 의존성 추가
}
여기서는 Spring Boot plugin을 쓰지 않는다.
공통 모듈은 Boot JAR이 아니라 Plain JAR 이어야 한다.
JAR 생성
프로젝트 루트에서 실행:
gradlew clean build
그러면 다음에 JAR 파일이 만들어짐:
common-module/build/libs/common-module-1.0.0.jar
기존 5개 프로젝트에서 사용하는 방법 (3가지 방식)
방법 1: 로컬 JAR 직접 추가하기 (가장 간단)
5개 프로젝트 각각 build.gradle 에 아래 추가:
dependencies {
implementation files('libs/common-module-1.0.0.jar')
}
그리고 libs 폴더에 jar 파일을 넣기만 하면 됨.
project-A/
└ libs/
└ common-module-1.0.0.jar
✔ 장점: 간단
✖ 단점: 버전 관리 어렵고, JAR 업데이트 시 프로젝트마다 복사해야 함
방법 2: Gradle Local Repository(mavenLocal) 활용하기
공통 모듈을 local Maven repository 에 publish하여 사용.
1) common-module/build.gradle 에 publish 설정 추가
apply plugin: 'maven-publish'
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
}
2) publish 명령 실행
gradlew publishToMavenLocal
→ JAR 파일이 자동으로 로컬 저장소에 배포됨:
C:\Users\내계정\.m2\repository\com\mycompany\common-module\1.0.0\
3) 기존 5개 프로젝트 build.gradle 에 다음 추가
repositories {
mavenLocal()
}
dependencies {
implementation 'com.mycompany:common-module:1.0.0'
}
✔ 장점: JAR 파일 복사 필요 없음
✔ 적당한 규모에서 가장 많이 쓰는 방식
✖ CI/CD 환경에서는 따로 설정 필요
방법 3: 회사 Nexus/Artifactory/Maven Repository 에 배포
기업 환경에서는 대부분 이 방식을 씀.
common-module 에 publishing 설정 후
gradlew publish
그리고 5개 프로젝트에서는:
repositories {
maven { url 'https://mycompany-nexus/repository/maven-releases/' }
}
dependencies {
implementation 'com.mycompany:common-module:1.0.0'
}
✔ 장점: 배포/버전관리 최고
✖ 단점: 사내 Maven 서버가 필요
방법 4: Multi-Module Gradle Project 만들기 (추천 가능)
5개 프로젝트 + common 모듈을 하나의 Gradle 멀티모듈로 구성하는 방법도 있다.
root-project/
settings.gradle
common-module/
project1/
project2/
...
settings.gradle:
include 'common-module'
include 'project1'
include 'project2'
...
각 프로젝트에서:
implementation project(':common-module')
✔ 장점: 공통 모듈 변경 → 전체 프로젝트 즉시 반영
✖ 단점: 모든 프로젝트를 한 repo에서 관리해야 함
주의할 점 / 팁
버전 호환 테스트: 공통 모듈 새 버전 나올 때마다 적어도 하나 이상의 서비스에서 먼저 테스트해보는 브랜치를 두는 게 좋음.
공통 모듈에 너무 많은 것을 넣지 마: 핵심 로직 + 유틸 + 설정 정도가 적당. 너무 비대하면 의존성이 복잡해지고 변경 관리 어려워짐.
스프링 빈 정의 시 패키지 구조 설계 중요: 컴포넌트 스캔 경로를 고려해서 공통 모듈이 서비스 모듈에 제대로 스캔되도록 해야 함.
문서화: 각 공통 API, 유틸, 설정이 어떤 목적으로 있는지 문서화해두면 (코드 주석 + README) 서비스 개발자들이 헷갈리지 않음.

