Gradle + Kotlin + Spring을 시작했습니다.

Gradle + Kotlin + Spring을 시작했습니다.

2022-10-06 last update

8 minutes reading gradle Kotlin spring
Kotlin은 좋은 것 같은 이야기를 잘 듣기 때문에, 시작에 Kotlin을 농락하기 위한 환경으로서,
Spring과 Gradle에서 실행 환경을 만들 때의 메모입니다.

이번 목표



간단하게 문자열만을 반환하는 GET API를 만들어 보자.

병아리 만들기



먼저 프로젝트의 병아리를 만듭니다.
Spring Initializr 에서 사쿠토 만들기

설정은 아래 이미지를 참조하십시오.



↑에서 생성된 프로젝트 시점에서 메인 파일이 이미 Kotlin에 상태로 만들어졌습니다.
package com.example.demo

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class DemoApplication

fun main(args: Array<String>) {
    runApplication<DemoApplication>(*args)
}



Gradle 설정하기



프로젝트의 루트 바로 아래에 gradle.build.kts라는 파일이 있으며 이것이 gradle의 구성 파일입니다.
파일 이름을 보면 알 수 있지만 kotlin에서 gradle 설정을 작성합니다.

초기라고 API의 기능을 제공해도 되지 않기 때문에, 그것을 사용하기 위한 패키지를 사용할 수 있도록(듯이) 합니다.
또, 나중에 DB에도 접속하고 싶기 때문에 커넥터도 추가해 둡니다.

그래서 dependencies 에 추가합니다.
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import sun.security.pkcs.PKCS8Key.version

plugins {
    id("org.springframework.boot") version "2.2.5.RELEASE"
    id("io.spring.dependency-management") version "1.0.9.RELEASE"
    kotlin("jvm") version "1.3.61"
    kotlin("plugin.spring") version "1.3.61"
}

group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-jooq")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("mysql:mysql-connector-java") // 追加
    implementation("org.springframework.boot:spring-boot-starter-web") // 追加

    testImplementation("org.springframework.boot:spring-boot-starter-test") {
        exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "1.8"
    }
}

이어서 DB 설정도 해 둡니다.src/main/redources/application.properties 에 다음을 추가합니다.

spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=root

API 만들기



이제 빌드 주위에 준비가 되었으므로 Kotlin의 코드를 실제로 써 갑니다.
간단한 문자열을 반환하는 간단한 API를 만들므로 다음과 같은 느낌이 듭니다.

package com.example.demo.presentation.controller

import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RequestMethod
import org.springframework.web.bind.annotation.RestController

@RestController
class HelloController {

    @RequestMapping(value = ["/hello"],method = [RequestMethod.GET])
    fun helloRouter(): String {
        return "hello";
    }
}

실제로 쓰고 생각한 것은
RequestMapping의 value와 method가 배열에서만 받을 수 있었다는 것입니다.

실행해보기



프로젝트의 루트로 이동하여 다음 명령을 실행
./gradlew bootRun

이제 항상 서버가 멈추기 때문에,
성공하면

<==========---> 80% EXECUTING [7m 23s]
> IDLE
> :compileKotlin > Resolve files of :compileClasspath > jackson-datatype-jdk8-2.10.2.jar
> IDLE
> IDLE
> :bootRun
> IDLE

이런 느낌으로 머무릅니다.
↓에 액세스하고, hello라는 문자가 나오면 성공입니다.
http://localhost:8080/hello

마지막으로



환경 구축과 단순한 API만이었지만, gradle이 kotlin이 되어 있거나,
어노테이션의 인수의 형태가 다르거나 여러가지 바뀌고 있다고 느꼈습니다.
조금 배워 가고 싶습니다.