- [Kotlin] BuildSrc2025년 08월 29일
- 아몬드맛빼빼로
- 작성자
- 2025.08.29.:58
반응형
BuildSrc?
Kotlin으로 Springboot 개발을 많이 하다보면 아무래도 Maven보단 Gradle을 많이 쓰게 될 것이다.Gradle과 Kotlin을 동시에 쓴다면 프로젝트 설정 및 종속성 관리에 대한 한가지 팁 같은 것이 있는데 바로 buildSrc 사용이다.
쉽게 설명하자면 기존에는 build.gradle.kts과 같은 파일에서 문자열로 하나하나 입력하여 설정하던 것을 Kotlin DSL을 이용하여 더 가독성 좋고 유지보수성 좋게 설정할 수 있는 것이다.
사용법은?
사용법 역시 아주 간단하다.Gradle은 빌드 시 루트 디렉터리에 buildSrc라는 이름의 디렉터리가 있다면 자동으로 컴파일해 빌드 스크립트의 클래스 패스에 삽입한다.이를 위하여 디렉터리를 루트 디렉터리에 생성 후 build.gradle.kts만 추가해주면 된다.
plugins { `kotlin-dsl` } repositories { mavenCentral() }해당 파일을 추가하는 이유는 디렉터리 내부에서 Kotlin DSL을 사용할 것이기 때문에 해당 플러그인이 없다면 Kotlin DSL로 작성된 파일을 Gradle에 통합할 수 없기 때문이다.이를 위하여 Kotlin DSL 플러그인과 그 플러그인을 가져올 레포지터리를 명시해준 것이다.
이렇게 추가하면 준비는 모두 끝난것이다.이제 src/main/kotlin 아래에 Kotlin DSL을 추가하면 된다.
예시
사용법에 정답은 없다,그러나 내가 사용하는 방법은 다음과 같다
object Dependencies { /* Spring Starters */ const val SPRING_WEB = "org.springframework.boot:spring-boot-starter-web" const val SPRING_SECURITY = "org.springframework.boot:spring-boot-starter-security" const val SPRING_OAUTH2_CLIENT = "org.springframework.boot:spring-boot-starter-oauth2-client" /* Spring Data */ const val SPRING_DATA_REDIS = "org.springframework.boot:spring-boot-starter-data-redis" /* Exposed ORM */ const val EXPOSED_CORE = "org.jetbrains.exposed:exposed-core:${DependencyVersions.EXPOSED_VERSION}" const val EXPOSED_DAO = "org.jetbrains.exposed:exposed-dao:${DependencyVersions.EXPOSED_VERSION}" const val EXPOSED_JDBC = "org.jetbrains.exposed:exposed-jdbc:${DependencyVersions.EXPOSED_VERSION}" const val EXPOSED_SPRING_BOOT = "org.jetbrains.exposed:exposed-spring-boot-starter:${DependencyVersions.EXPOSED_VERSION}" }종속성 관리를 위해 필요한 종속성들을 상수로 선언하고 Spring Dependency Management에서 관리되지 않거나 특정 버전을 사용해야 하는 종속성은
object DependencyVersions { const val EXPOSED_VERSION = "0.61.0" }다음과 같이 선언하여 위에 종속성 상수들을 선언할 때 끼워넣어 사용한다.
추가적으로 플러그인 역시 나는 Kotlin DSL로 관리하는데 아래와 같이 작성하여 사용한다.
object Plugins { const val SPRING_BOOT = "org.springframework.boot" const val DEPENDENCY_MANAGEMENT = "io.spring.dependency-management" const val KOTLIN_JVM = "org.jetbrains.kotlin.jvm" const val KOTLIN_SPRING = "org.jetbrains.kotlin.plugin.spring" const val KOTLIN_JPA = "org.jetbrains.kotlin.plugin.jpa" const val KOTLIN_ALLOPEN = "org.jetbrains.kotlin.plugin.allopen" const val KSP = "com.google.devtools.ksp" const val KOTEST = "io.kotest" const val KTLINT = "org.jlleitschuh.gradle.ktlint" }object PluginVersions { const val SPRING_BOOT_VERSION = "3.5.5" const val KOTLIN_VERSION = "2.2.10" const val DEPENDENCY_MANAGEMENT_VERSION = "1.1.7" const val SPRING_CLOUD_VERSION = "2025.0.0" const val KOTEST_VERSION = "6.0.1" const val KSP_VERSION = "2.2.10-2.0.2" const val KTLINT_VERSION = "13.1.0" }이렇게 한 후에 build.gradle.kts로 이동하여 아래와 같이 작성하면 된다.
plugins { id(Plugins.SPRING_BOOT) version plugin.PluginVersions.SPRING_BOOT_VERSION id(Plugins.DEPENDENCY_MANAGEMENT) version plugin.PluginVersions.DEPENDENCY_MANAGEMENT_VERSION id(Plugins.KSP) version plugin.PluginVersions.KSP_VERSION id(Plugins.KOTLIN_JVM) version plugin.PluginVersions.KOTLIN_VERSION id(Plugins.KOTLIN_SPRING) version plugin.PluginVersions.KOTLIN_VERSION id(Plugins.KOTLIN_JPA) version plugin.PluginVersions.KOTLIN_VERSION id(Plugins.KOTLIN_ALLOPEN) version plugin.PluginVersions.KOTLIN_VERSION id(Plugins.KOTEST) version plugin.PluginVersions.KOTEST_VERSION id(Plugins.KTLINT) version plugin.PluginVersions.KTLINT_VERSION } dependencies { // Spring Starters implementation(Dependencies.SPRING_WEB) implementation(Dependencies.SPRING_SECURITY) implementation(Dependencies.SPRING_OAUTH2_CLIENT) // Spring Data implementation(Dependencies.SPRING_DATA_REDIS) // Exposed ORM implementation(Dependencies.EXPOSED_CORE) implementation(Dependencies.EXPOSED_DAO) implementation(Dependencies.EXPOSED_JDBC) implementation(Dependencies.EXPOSED_SPRING_BOOT) }이렇게 작성을 완료한 후 Gradle 빌드를 실행하면 올바르게 빌드되어 실행할 수 있다.
이걸 그래서 왜 쓰는거야
사실 소규모 프로젝트이고 관리하고 설정할 정보가 많지 않다면 이러한 설정을 이원화 해버리는게 오히려 악영향을 줄 수 있을것이다.개발자의 입장에서 쓸 때 없이 나뉘어 IDE 탭을 하나 더 열어서 봐야하고 이래저래 복잡하게 될 것이다.그러나 프로젝트가 커지고 특히 멀티모듈을 도입하는 등의 변화가 있다면 일관성 있고 통일된 종속성 및 설정 관리를 하는데 충분한 도움을 줄 수 있을 것이란 점에서 이점이 있다.
'Kotlin' 카테고리의 다른 글
[Kotlin] 'Kotlin'스러운 테스트 작성하기 (0) 2025.06.10 다음글이전글이전 글이 없습니다.댓글