들어가기 전
스프링부트를 이용해 간단한 스프링부트 프로젝트를 시작하고, JDBC를 사용하여 프로젝트에 데이터베이스를 추가하고 구성해보자.
코틀린으로 스프링부트 프로젝트를 시작하기 전 필요한 것은 다음과 같다.
JDK (JDK8 이상 권장)
IntelliJ IDEA (Ultimate 버전이 있으면 편하지만 필자는 Community 버전으로 진행한다)
Gradle (최신 버전 권장)
start.spring.io를 이용해 스프링부트 프로젝트를 만들자
먼저, Spring Initializer에 접속한 후 다음과 같이 선택한다.
Project : Gradle-Kotlin
Language : Kotlin
Spring Boot : SNAPSHOT 또는 M2 M3가 붙지 않은 최신 버전 선택
버전 옆에 SNAPSHOT이라고 적혀 있는 것은 아직 만들고 있는 버전이며, 간혹 M1이라고 적혀있는 것은 정식으로 릴리즈되지 않은 버전이다. 따라서 SNAPSHOT, M1이 아닌 버전 중 선택하면 된다.
Project Meta Data
Group : 보통 기업명 -
com.example
Artifact : 빌드 결과물의 이름 -
demo
(버전 정보를 생략한 빌드 결과물 이름, jar 또는 war 파일명 / Group 내에서 artifact가 중복될 수 없음.)name : 프로젝트 이름 -
demo
(Artifact를 입력하면 자동으로 채워지며, 원하는 다른 이름으로 변경할 수 있음.)Description : 설명 -
Demo project for Spring Boot
Package name : 패키지 이름 - com.example.demo
Packaging : Jar
Java : 17
Dependency
Web / Spring Web
SQL / Spring Data JDBC
SQL / H2 Database
Generate 클릭 후 다운 받은 zip 파일을 IntelliJ에서 열어준다.
build.gradle.kts 파일 설정
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 어플리케이션을 개발할 준비가 된 것이다. 간단하게 컨트롤러를 생성해보자.
src/main/kotlin/com/example/{프로젝트명}
폴더에서HelloController.kt
파일을 생성하고 다음과 같이 작성한다.
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!"
}}
@RestController
어노테이션은HelloController
가 HTTP 요청을 다루는 컨트롤러임을 Spring에게 알려준다.메소드
index()
를 정의하고,@GetMapping
어노테이션을 사용해 이 메소드가/hello
엔드포인트와 매핑되도록 설정했다.이 엔드포인트로 GET 요청이 들어오면 () 메소드가 "Hello, $name!"이라는 문자열을 반환한다.
- "Hello, $name!" 표현식은 Kotlin에서 문자열 템플릿이라고 불린다. 문자열 템플릿은 내장된 표현식을 포함하는 문자열 리터럴입니다. 이는 문자열 연결 연산에 대한 편리한 대체 수단이다.
/?name={이름}
로 접근하고name
이라는 요청 매개변수를 제공하면, 해당 매개변수 값은index()
함수를 호출하는 인자로 사용된다.index()
함수에는 하나의 문장만 포함되어 있기 때문에 단일 표현식 함수로 나타낼 수 있다.- 단일 표현식 함수(single expression function) : 코틀린에서 함수가 하나의 표현식으로 이루어져 있는 경우, 중괄호(
{}
)와return
키워드를 생략할 수 있다.
- 단일 표현식 함수(single expression function) : 코틀린에서 함수가 하나의 표현식으로 이루어져 있는 경우, 중괄호(
컴파일러는 등호 기호(=) 오른쪽의 문장의 결과를 살펴보고 반환 타입을 추론한다. "Hello, $name!" 표현식의 타입은
String
이므로, 함수의 반환 타입도String
이다.
실행해보기
DemoApplication.kt
파일을 열고 main()
메서드 옆에 있는 녹색 실행(실행) 아이콘을 클릭하면 어플리케이션이 실행된다.
- 어플리케이션을 실행하고
http://localhost:8080?name={이름}
GET 요청을 보내면 다음과 같은 응답을 확인할 수 있다.