• 티스토리 홈
  • 프로필사진
    아몬드맛빼빼로
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
아몬드맛빼빼로
  • 프로필사진
    아몬드맛빼빼로
    • 분류 전체보기 (46)
      • Java (8)
      • C (3)
      • Springboot (7)
      • Kotlin (2)
      • 회고 (5)
      • Backend (13)
      • 기타 (5)
      • DevOps (3)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
# Home
# 공지사항
#
# 태그
# 검색결과
# 방명록
  • [Kotlin] BuildSrc
    2025년 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
    다음글
    다음 글이 없습니다.
    이전글
    이전 글이 없습니다.
    댓글
조회된 결과가 없습니다.
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
목차
표시할 목차가 없습니다.
    • 안녕하세요
    • 감사해요
    • 잘있어요

    티스토리툴바