Kotlin Spring Boot로 RESTful 웹 서비스 만들기 - [1] 스프링부트 시작하기 (IntelliJ IDEA Community)

·

3 min read

Kotlin Spring Boot로 RESTful 웹 서비스 만들기 - [1] 스프링부트 시작하기 (IntelliJ IDEA Community)

들어가기 전

스프링부트를 이용해 간단한 스프링부트 프로젝트를 시작하고, 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() 함수에는 하나의 문장만 포함되어 있기 때문에 단일 표현식 함수로 나타낼 수 있다.

  • 컴파일러는 등호 기호(=) 오른쪽의 문장의 결과를 살펴보고 반환 타입을 추론한다. "Hello, $name!" 표현식의 타입은 String이므로, 함수의 반환 타입도 String이다.

실행해보기

DemoApplication.kt 파일을 열고 main() 메서드 옆에 있는 녹색 실행(실행) 아이콘을 클릭하면 어플리케이션이 실행된다.

  • 어플리케이션을 실행하고 http://localhost:8080?name={이름} GET 요청을 보내면 다음과 같은 응답을 확인할 수 있다.

참고 자료