본문 바로가기
Kotlin

spring boot, gradle 설정에 kotlin 환경 설정하기.

by oncerun 2023. 7. 4.
반응형

 

우선 다음과 같이 build.gradle 파일에 코틀린 플러그인을 설정해주어야 한다.

https://plugins.gradle.org/plugin/org.jetbrains.kotlin.jvm

 

Gradle - Plugin: org.jetbrains.kotlin.jvm

Version 1.9.0-RC (latest) Created 19 June 2023. Kotlin JVM plugin plugins { id("org.jetbrains.kotlin.jvm") version "1.9.0-RC" } buildscript { repositories { maven { url = uri("https://plugins.gradle.org/m2/") } } dependencies { classpath("org.jetbrains.kot

plugins.gradle.org

 

 

org.jetbrains.kotlin.jvm 플러그인을 사용하면 다음과 같은 기능들을 사용할 수 있습니다. 

 

1. Kotlin 컴파일러를 통합할 수 있습니다. 

 

코틀린 소스 코드를 컴파일하고 실행 가능한 Java 바이트 코드로 변환할 수 있습니다.

빌드 도구는 라이브러리의 종속성 관리와 소스 코드를 상황에 따른 바이너리 코드로 변환하고, 테스트를 실행해 주며, 

변환된 코틀린 코드를 패키징하고, 목적에 맞게 산출물로 만들어주는 역할을 합니다. 

 

플러그인을 통해 코틀린 소스 디렉터리를 인식하고 컴파일 작업을 진행할 수 있도록 도와줍니다. 

 

 

2. Kotlin 라이브러리에 대한 종속성을 관리할 수 있습니다. 

 

 

3. Kotlin 테스트 지원

 

Kotlin으로 작성된 테스트 코드를 실행할 수 있습니다. 플러그인은 테스트 실행을 위한 구성을 자동으로 처리합니다.

 

추가적으로 코틀린 스크립트 작성, 코틀린 스타일의 Gradle 빌드 스크립트 작성 등이 가능합니다. 

 

 

현재 플러그인의 가장 최신 버전은 1.9.0-RC입니다. 

 

RC는 릴리즈 후보로 베타 테스트 단계 이후에 출시되는 버전입니다. 따라서 그 이전 버전인 1.8.22 버전을 사용하여 구성해 보겠습니다.

 

https://plugins.gradle.org/plugin/org.jetbrains.kotlin.jvm/1.8.22

 

Gradle - Plugin: org.jetbrains.kotlin.jvm

Version 1.8.22 Created 07 June 2023. Kotlin JVM plugin plugins { id("org.jetbrains.kotlin.jvm") version "1.8.22" } buildscript { repositories { maven { url = uri("https://plugins.gradle.org/m2/") } } dependencies { classpath("org.jetbrains.kotlin:kotlin-gr

plugins.gradle.org

 

 

다음은 코틀린 라이브러리를 추가합니다.

 

https://docs.spring.io/spring-boot/docs/3.1.1/reference/pdf/spring-boot-reference.pdf

 

해당 파일의 7.11. Kotlin Support 해당 섹션을 참고하였습니다.

 

이 중 Requiredments 섹션을 읽어보면 다음과 같습니다.

 

스프링 부트는 최소 코틀린 1.7.x 이상이 필요하며, dependecy management를 통해 적합한 코틀린 버전을 관리합니다. 

 

코틀린을 사용하려면 org.jetbrains.kotlin:kotlin-stdlib 및 org.jetbranins.kotlin:kotlin-reflect가 클래스 패스에 존재해야 합니다. 

 

코틀린에서 JSON 데이터를 직렬화/역직렬화하려면 Jackson의 코틀린 모듈이 필요합니다.  이 모듈은 클래스 패스에 발견되면 자동으로 등록된다고 합니다. 

 

실제 코틀린을 사용하는 gradle 프로젝트를 보면 jpa, jackson 등 다양한 라이브러리를 받기 위해 여러 플러그인을 추가하는 부분을 확인할 수 있었습니다.

https://github.com/sdeleuze/spring-boot-kotlin-demo

 

GitHub - sdeleuze/spring-boot-kotlin-demo: Spring Boot Kotlin project with a REST Webservice and Spring Data

Spring Boot Kotlin project with a REST Webservice and Spring Data - GitHub - sdeleuze/spring-boot-kotlin-demo: Spring Boot Kotlin project with a REST Webservice and Spring Data

github.com

https://github.com/spring-guides/tut-spring-boot-kotlin

 

GitHub - spring-guides/tut-spring-boot-kotlin: Building web applications with Spring Boot and Kotlin :: Learn how to easily buil

Building web applications with Spring Boot and Kotlin :: Learn how to easily build and test web applications with Spring, Kotlin, Junit 5 and JPA - GitHub - spring-guides/tut-spring-boot-kotlin: Bu...

github.com

 

 

프로젝트에 맞게 적절한 라이브러리를 가져왔다면 다음은 컴파일 옵션을 설정해야 합니다. 

 

이는 컴파일된 코틀린 코드가 실행될 JVM 버전을 지정합니다. 예를 들어 jvmTarget = 1.8로 설정하면 Java 8의 JVM에서 실행되는 코드를 생성합니다.

 

 

이를 추가한 설정은 다음과 같습니다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
    implementation 'org.jetbrains.kotlin:kotlin-reflect'
    runtimeOnly 'com.h2database:h2'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

compileKotlin {
    kotlinOptions{
        jvmTarget = "11"
    }
}


compileTestKotlin {
    kotlinOptions{
        jvmTarget = "11"
    }
}

`

 

2023-07-04 추가.

 

Kotlin Support  섹션에는 다음과 같은 글이 존재합니다.

  • Since Kotlin classes are final by default, you are likely to want to configure kotlin-spring plugin in order to automatically open Spring annotated classes so that they can be proxied.

코틀린은 기본적으로 클래스가 final이고, 상속이 불가능합니다. 

 

스프링 부트 2.0 부터 CGLIB를 기본으로 사용합니다.  그렇기에 스프링 빈을 제대로 사용하기 위해선 상속을 할 수 있어야 합니다. ( 프록시를 사용하는 경우)

 

이를 위해 자동적으로 상속 가능하도록 만들어 주는데, 이를 위해선 kotlin-spring plugin이 필요하다라는 설명입니다. 

 

 

 

 

반응형

'Kotlin' 카테고리의 다른 글

왜 reflect.jar 파일이 별도로 존재하지?  (0) 2023.07.06
Using JPA with Kotlin in a Spring Boot Application  (0) 2023.07.05
JUnit5 @JvmStatic  (0) 2023.07.04
Backing Property  (0) 2023.07.03
Kotlin 테스트 작성을 위한 빌드 업  (0) 2023.01.18

댓글