
Kotlin Spring Boot로 간단한 웹서비스를 만들어보며 전체적인 개발 흐름을 이해하고자 이 글을 작성했다. 공식문서를 참고해 Kotlin Spring Boot 프로젝트 생성부터 RESTful API를 제작해보려 한다.
코틀린은 JVM, 안드로이드, 자바스크립트 및 네이티브를 대상으로 하는 정적 타입 지정 언어다. 여기서 정적 타입 언어란 컴파일 시점에 타입이 결정되는 언어로, 자바 또한 정적 타입 지정 언어를 말한다. 젯브레인즈에서 개발한 오픈소스로, JVM 기반의 언어이면서 자바(Java)와 100% 호환되도록 설계되었다. 멀티 플랫폼(Cross-Platform) 언어인 코틀린은 안드로이드 및 iOS 앱 개발, 서버 개발, 웹 개발을 비롯해 임베디드와 IoT, 데이터 사이언스에 이르는 폭넓은 사용성을 목표로 하고 있다. 현재는 안드로이드 앱과 서버 개발에 가장 활발하게 쓰이고 있다.
1. Null 안정성
코틀린은 모든 변수를 not-null로 정의하기 때문에 자바 버그의 일반적인 원인인 Null 포인터 예외를 방지하는 데 도움이 된다.
2. 간결함
코틀린은 자바에 비해 구문이 간결해서 가독성 좋은 코드를 쉽게 작성할 수 있다.
3. 자바와의 호환성
코틀린은 자바와 완벽히 호환되어 상호 운용할 수 있다. 코틀린으로 자바 코드를 호출하거나 라이브러리를 이용할 수 있다.
자바(JAVA)는 원래 인도네시아 섬 이름이다. 이 섬에서 나는 커피의 이름 또한 자바로, 여기서 이름을 딴 에스프레소 커피로 유명한 커피 체인점 이름이기도 하다. 이처럼 코틀린도, 자바의 유래에 맞춰서 코틀린이라는 섬에서 이름을 따왔다.


다음은 Kotlin 언어를 사용하여 플레이어를 나타내는 클래스를 정의한 것이다. 코드 중 자바와 비교해 생소한 부분을 살펴보고자 한다.
class Player(val name: String, val health: Int = 20) {
var nickname: String? = null
}
val(value): 읽기 전용 프로퍼티로, 한 번 값을 할당하면 변경할 수 없다.var(variable) : 변경 가능한 프로퍼티다.String? = null : String?은 문자열 또는 null이 될 수 있는 타입을 나타낸다. 초기값으로 null이 할당되어 있으므로, 닉네임을 설정하지 않은 경우에는 null로 유지된다. 코틀린은 기본적으로 null이 될 수 없는 타입으로, 물음표(?)를 붙여야만 null이 될 수 있는 타입이 된다.val health: Int = 20 : 코틀린에서는 기본 인자를 제공하고 있다.코틀린으로 스프링부트 프로젝트를 시작하기 전 필요한 것은 다음과 같다.
먼저, Spring Initializer에 접속한 후 다음과 같이 선택한다.

Generate 클릭 후 다운 받은 zip 파일을 IntelliJ에서 열어준다.
start.spring.io를 사용했기 때문에 build.gradle.kts 파일은 이미 설정되어 있을 것이다.
아마 파일은 다음과 비슷할 것이다. 혹시 모르니 이와 한 번 더 체크해보자.
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("org.springframework.boot") version "3.2.1"
id("io.spring.dependency-management") version "1.1.4"
kotlin("jvm") version "1.9.21"
kotlin("plugin.spring") version "1.9.21"
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java {
sourceCompatibility = JavaVersion.VERSION_17
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("org.jetbrains.kotlin:kotlin-reflect")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs += "-Xjsr305=strict"
jvmTarget = "17"
}
}
tasks.withType<Test> {
useJUnitPlatform()
}
프로젝트가 생성되었다면, Spring boot 어플리케이션을 개발할 준비가 된 것입이다. 간단하게 컨트롤러를 생성해보자.
package com.example.demo
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController
@RestController
class HelloController {
@GetMapping("/")
fun index(@RequestParam("name") name: String) = "Hello, $name!"
}}
DemoApplication.kt 파일을 열고 main() 메서드 옆에 있는 녹색 실행(실행) 아이콘을 클릭하면 어플리케이션이 실행된다.

