Kotlin으로 Spring Boot 프로젝트 생성하기
이것은 Spring Boot와 Kotlin 시작하기 튜토리얼의 첫 번째 부분입니다:
Kotlin으로 Spring Boot 프로젝트 생성하기
Spring Boot 프로젝트에 데이터 클래스 추가하기
Spring Boot 프로젝트에 데이터베이스 지원 추가하기
Spring Data CrudRepository를 사용하여 데이터베이스 액세스하기
이 튜토리얼의 첫 번째 부분은 IntelliJ IDEA에서 프로젝트 마법사(Project Wizard)를 사용하여 Gradle로 Spring Boot 프로젝트를 생성하는 방법을 보여줍니다.
이 튜토리얼은 Gradle을 빌드 시스템으로 사용할 것을 요구하지 않습니다. Maven을 사용하더라도 동일한 단계를 따를 수 있습니다.
시작하기 전에
IntelliJ IDEA Ultimate Edition의 최신 버전을 다운로드하여 설치하세요.
IntelliJ IDEA Community Edition 또는 다른 IDE를 사용하는 경우, 웹 기반 프로젝트 생성기를 사용하여 Spring Boot 프로젝트를 생성할 수 있습니다.
Spring Boot 프로젝트 생성하기
IntelliJ IDEA Ultimate Edition에서 프로젝트 마법사를 사용하여 Kotlin으로 새 Spring Boot 프로젝트를 생성하세요:
IntelliJ IDEA에서 File | New | Project를 선택하세요.
왼쪽 패널에서 New Project | Spring Boot를 선택하세요.
New Project 창에서 다음 필드와 옵션을 지정하세요:
Name: demo
Language: Kotlin
Type: Gradle - Kotlin
이 옵션은 빌드 시스템과 DSL을 지정합니다.
Package name: com.example.demo
JDK: Java JDK
이 튜토리얼은 Amazon Corretto 버전 23을 사용합니다. JDK가 설치되어 있지 않다면, 드롭다운 목록에서 다운로드할 수 있습니다.
Java: 17
Java 17이 설치되어 있지 않다면, JDK 드롭다운 목록에서 다운로드할 수 있습니다.
모든 필드를 지정했는지 확인하고 Next를 클릭하세요.
튜토리얼에 필요한 다음 의존성(dependency)을 선택하세요:
- Web | Spring Web
- SQL | Spring Data JDBC
- SQL | H2 Database
Create를 클릭하여 프로젝트를 생성하고 설정하세요.
IDE가 새 프로젝트를 생성하고 엽니다. 프로젝트 의존성을 다운로드하고 가져오는 데 시간이 걸릴 수 있습니다.
이후, Project view에서 다음 구조를 확인할 수 있습니다:
생성된 Gradle 프로젝트는 Maven의 표준 디렉터리 레이아웃과 일치합니다:
- 애플리케이션에 속하는 패키지와 클래스는
main/kotlin
폴더 아래에 있습니다. - 애플리케이션의 진입점은
DemoApplication.kt
파일의main()
메서드입니다.
- 애플리케이션에 속하는 패키지와 클래스는
프로젝트 Gradle 빌드 파일 살펴보기
build.gradle.kts
파일을 엽니다: 이 파일은 애플리케이션에 필요한 의존성 목록을 포함하는 Gradle Kotlin 빌드 스크립트입니다.
Gradle 파일은 Spring Boot의 표준이지만, kotlin("plugin.spring")
과 같은 kotlin-spring Gradle 플러그인을 포함하여 필요한 Kotlin 의존성도 포함합니다.
다음은 모든 부분과 의존성에 대한 설명이 포함된 전체 스크립트입니다:
// build.gradle.kts
plugins {
kotlin("jvm") version "1.9.25" // The version of Kotlin to use
kotlin("plugin.spring") version "1.9.25" // The Kotlin Spring plugin
id("org.springframework.boot") version "3.4.5"
id("io.spring.dependency-management") version "1.1.7"
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jdbc")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin") // Jackson extensions for Kotlin for working with JSON
implementation("org.jetbrains.kotlin:kotlin-reflect") // Kotlin reflection library, required for working with Spring
runtimeOnly("com.h2database:h2")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}
kotlin {
compilerOptions {
freeCompilerArgs.addAll("-Xjsr305=strict") // `-Xjsr305=strict` enables the strict mode for JSR-305 annotations
}
}
tasks.withType<Test> {
useJUnitPlatform()
}
보시다시피, Gradle 빌드 파일에는 몇 가지 Kotlin 관련 아티팩트가 추가되어 있습니다:
plugins
블록에는 두 개의 Kotlin 아티팩트가 있습니다:kotlin("jvm")
– 프로젝트에서 사용할 Kotlin 버전을 정의하는 플러그인kotlin("plugin.spring")
– Kotlin 클래스에open
수정자를 추가하여 Spring Framework 기능과 호환되도록 하는 Kotlin Spring 컴파일러 플러그인
dependencies
블록에는 몇 가지 Kotlin 관련 모듈이 나열되어 있습니다:com.fasterxml.jackson.module:jackson-module-kotlin
– Kotlin 클래스 및 데이터 클래스의 직렬화 및 역직렬화를 지원하는 모듈org.jetbrains.kotlin:kotlin-reflect
– Kotlin 리플렉션 라이브러리
의존성 섹션 다음에는
kotlin
플러그인 구성 블록을 볼 수 있습니다. 여기에서 컴파일러에 추가 인수를 추가하여 다양한 언어 기능을 활성화하거나 비활성화할 수 있습니다.
Kotlin 컴파일러 옵션에 대한 자세한 내용은 에서 확인할 수 있습니다.
생성된 Spring Boot 애플리케이션 살펴보기
DemoApplication.kt
파일을 엽니다:
// DemoApplication.kt
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)
}
클래스 선언하기 – class DemoApplication
패키지 선언과 임포트 문 바로 뒤에 첫 번째 클래스 선언인 class DemoApplication
을 볼 수 있습니다.
Kotlin에서 클래스에 멤버(프로퍼티 또는 함수)가 포함되지 않으면 클래스 본문({}
)을 완전히 생략할 수 있습니다.
@SpringBootApplication 애노테이션
@SpringBootApplication
애노테이션은 Spring Boot 애플리케이션의 편의 애노테이션입니다. 이 애노테이션은 Spring Boot의 자동 구성, 컴포넌트 스캔을 활성화하고 "애플리케이션 클래스"에 추가 구성을 정의할 수 있도록 합니다.
가변 인자 – args: Array<String>
runApplication()
함수의 선언을 확인하면, 함수의 매개변수가 [vararg
수정자]로 표시되어 있는 것을 볼 수 있습니다: vararg args: String
. 이는 함수에 가변 개수의 String 인자를 전달할 수 있음을 의미합니다.
스프레드 연산자 – (*args)
args
는 String 배열로 선언된 main()
함수의 매개변수입니다. String 배열이 있고 그 내용을 함수에 전달하고자 할 때, 스프레드 연산자(배열 앞에 별표 기호 *
를 붙입니다)를 사용하세요.
컨트롤러 생성하기
애플리케이션은 실행할 준비가 되었지만, 먼저 로직을 업데이트해 봅시다.
Spring 애플리케이션에서 컨트롤러는 웹 요청을 처리하는 데 사용됩니다. 동일한 패키지에 DemoApplication.kt
파일 옆에 다음과 같이 MessageController
클래스를 포함하는 MessageController.kt
파일을 생성하세요:
// MessageController.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 MessageController {
@GetMapping("/")
fun index(@RequestParam("name") name: String) = "Hello, $name!"
}
@RestController 애노테이션
Spring에게 MessageController
가 REST 컨트롤러임을 알려야 하므로, @RestController
애노테이션으로 표시해야 합니다.
이 애노테이션은 DemoApplication
클래스와 동일한 패키지에 있기 때문에 이 클래스가 컴포넌트 스캔에 의해 감지될 것임을 의미합니다.
@GetMapping 애노테이션
@GetMapping
은 HTTP GET 호출에 해당하는 엔드포인트를 구현하는 REST 컨트롤러의 함수를 표시합니다:
@RequestParam 애노테이션
함수 매개변수 name
은 @RequestParam
애노테이션으로 표시됩니다. 이 애노테이션은 메서드 매개변수가 웹 요청 매개변수에 바인딩되어야 함을 나타냅니다.
따라서 루트에서 애플리케이션에 접근하고 /?name=<your-value>
와 같이 "name"이라는 요청 매개변수를 제공하면, 해당 매개변수 값이 index()
함수를 호출하는 인자로 사용됩니다.
단일 표현식 함수 – index()
index()
함수는 하나의 문장만 포함하므로, [단일 표현식 함수]로 선언할 수 있습니다.
이는 중괄호를 생략하고 등호(=
) 뒤에 본문을 지정할 수 있음을 의미합니다.
함수 반환 타입에 대한 타입 추론
index()
함수는 반환 타입을 명시적으로 선언하지 않습니다. 대신, 컴파일러는 등호(=
)의 오른쪽에 있는 문장의 결과를 보고 반환 타입을 추론합니다.
Hello, $name!
표현식의 타입은 String
이며, 따라서 함수의 반환 타입도 String
입니다.
문자열 템플릿 – $name
Hello, $name!
표현식은 Kotlin에서 [문자열 템플릿]이라고 불립니다.
문자열 템플릿은 포함된 표현식을 포함하는 문자열 리터럴입니다.
이는 문자열 연결 연산을 편리하게 대체할 수 있습니다.
애플리케이션 실행하기
이제 Spring 애플리케이션을 실행할 준비가 되었습니다:
DemoApplication.kt
파일에서main()
메서드 옆의 거터에 있는 녹색 Run 아이콘을 클릭하세요:터미널에서
./gradlew bootRun
명령을 실행할 수도 있습니다.이렇게 하면 컴퓨터에서 로컬 서버가 시작됩니다.
애플리케이션이 시작되면 다음 URL을 여세요:
texthttp://localhost:8080?name=John
"Hello, John!"이 응답으로 출력되는 것을 볼 수 있습니다:
다음 단계
이 튜토리얼의 다음 부분에서는 Kotlin 데이터 클래스와 이를 애플리케이션에서 사용하는 방법에 대해 알아볼 것입니다.