모든 서비스 인스턴스가 공유하는 공통 코드와 라이브러리, 그리고 의존성을 효율적으로 관리하기 위해 별도의 공통 모듈을 개발하여 활용할 수 있습니다.
plugins {
id 'java-library' // 프로젝트를 자바 라이브러리로 설정 (api 키워드 사용 가능)
id 'maven-publish' // 빌드된 아티팩트를 Maven 저장소에 배포하기 위한 플러그인
id 'org.springframework.boot' version '4.0.4'
id 'io.spring.dependency-management' version '1.1.7'
}
group = 'com.github.yonggyo1125'
version = '0.0.1'
java {
toolchain { languageVersion = JavaLanguageVersion.of(21) }
}
bootJar { enabled = false } // 실행 가능한 jar 생성 비활성화 (라이브러리이므로 필요 없음)
jar {
enabled = true
archiveClassifier.set('') // 일반 jar 생성
}
repositories {
mavenCentral()
maven { url '<https://repo.spring.io/milestone>' } // 스프링 부트 마일스톤 버전 사용을 위한 저장소
}
ext {
set('springCloudVersion', "2025.1.1")
}
dependencies {
api 'org.springframework.boot:spring-boot-starter-validation'
api 'org.springframework.boot:spring-boot-starter-data-jpa'
api 'org.springframework.boot:spring-boot-starter-kafka'
api 'org.springframework.boot:spring-boot-starter-security'
api 'org.springframework.boot:spring-boot-starter-webmvc'
api 'org.springframework.cloud:spring-cloud-starter-config'
api 'org.springframework.cloud:spring-cloud-starter-loadbalancer'
api 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
api 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'
api 'org.springframework.cloud:spring-cloud-starter-openfeign'
api "org.springframework.boot:spring-boot-starter-aop:4.0.0-M2"
api "io.github.resilience4j:resilience4j-spring-boot3:2.2.0"
api 'io.github.resilience4j:resilience4j-circuitbreaker'
api 'io.github.resilience4j:resilience4j-retry'
api 'org.springdoc:springdoc-openapi-starter-webmvc-ui:3.0.2'
api "com.github.danielwegener:logback-kafka-appender:0.2.0-RC2"
api 'net.logstash.logback:logstash-logback-encoder:7.4'
api 'com.querydsl:querydsl-jpa:5.1.0:jakarta'
annotationProcessor 'com.querydsl:querydsl-apt:5.1.0:jakarta'
annotationProcessor 'jakarta.annotation:jakarta.annotation-api'
annotationProcessor 'jakarta.persistence:jakarta.persistence-api'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
}
publishing {
publications {
gpr(MavenPublication) {
from components.java
artifactId = 'common'
}
}
repositories {
maven {
name = "GitHubPackages" // 저장소 별칭
url = uri("<https://maven.pkg.github.com/yonggyo1125/spartahub-common>") // GitHub Packages 저장소 주소
credentials {
username = System.getenv("GPR_USER") // 환경 변수에서 GitHub 사용자 ID
password = System.getenv("GPR_TOKEN") // 환경 변수에서 GitHub Personal Access Token(Classic) 로드
}
}
}
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
// QueryDSL Q클래스 생성 경로 설정
def querydslDir = layout.buildDirectory.dir("querydsl").get().asFile
sourceSets {
main.java.srcDirs += [ querydslDir ]
}
tasks.withType(JavaCompile) {
options.getGeneratedSourceOutputDirectory().set(file(querydslDir))
}
clean.doLast {
file(querydslDir).deleteDir()
}
dependencies 블록에는 프로젝트 전반에 공유될 공통 의존성을 api 방식으로 추가합니다. 이때 implementation으로 선언된 의존성은 공통 모듈 내부에서만 유효하며, 해당 모듈을 참조하는 하위 프로젝트에서는 접근할 수 없다는 점에 유의해야 합니다. 그 외 공통 모듈 내부 전용 의존성들은 각 프로젝트의 필요에 따라 별도로 설정해주어야 합니다.resources/META-INF/spring경로에 파일 생성

공통 모듈의 빈(Bean)은 수동으로 등록하며, 이를 설정하기 위한 구성 클래스는 다음과 같이 정의합니다.