Kotlin + Spring Boot 2.1.0 + Thymeleaf + IntelliJ IDEA + Gradle에서 Hello World

개요



IntelliJ IDEA에서 Kotlin + Spring Boot 2.1.0 + Thymeleaf를 사용하여 Hello World를 표시하는 프로그램을 작성합니다.

환경


  • IntelliJ IDEA 커뮤니티 버전 2018.2.5
  • Kotlin plugin version 1.3.0-release-IJ2018.2-1
  • Gradle 4.8.1
  • Spring Boot 2.1.0
  • Thymeleaf 3.0.11

  • Spring Initializr로 프로젝트의 병아리 생성



    Spring Initializr 에서 다음 내용을 지정하여 "Generate Project"한다.
  • Generate a "Gradle Project"with "Kotlin"and Spring Boot "2.1.0"
  • Group: com.example
  • Artifact: demo
  • Dependencies: Web, Thymeleaf



  • 프로젝트의 zip 파일을 다운로드할 수 있다.

    프로젝트 파일



    다운로드한 zip 파일을 확장합니다.
    ├── build.gradle
    ├── gradle
    │   └── wrapper
    │       ├── gradle-wrapper.jar
    │       └── gradle-wrapper.properties
    ├── gradlew
    ├── gradlew.bat
    ├── settings.gradle
    └── src
        ├── main
        │   ├── kotlin
        │   │   └── com
        │   │       └── example
        │   │           └── demo
        │   │               └── DemoApplication.kt
        │   └── resources
        │       ├── application.properties
        │       ├── static
        │       └── templates
        └── test
            └── kotlin
                └── com
                    └── example
                        └── demo
                            └── DemoApplicationTests.kt
    

    빌드 파일 build.gradle



    이번에는 Kotlin 1.3.0을 사용하고 있기 때문에 kotlinVersion = '1.3.0'으로 다시 작성해도 좋지만 수정하지 않아도 좋다.
    buildscript {
        ext {
            kotlinVersion = '1.2.70'
            springBootVersion = '2.1.0.RELEASE'
        }
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
            classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}")
            classpath("org.jetbrains.kotlin:kotlin-allopen:${kotlinVersion}")
        }
    }
    
    apply plugin: 'kotlin'
    apply plugin: 'kotlin-spring'
    apply plugin: 'eclipse'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'
    
    group = 'com.example'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = 1.8
    compileKotlin {
        kotlinOptions {
            freeCompilerArgs = ["-Xjsr305=strict"]
            jvmTarget = "1.8"
        }
    }
    compileTestKotlin {
        kotlinOptions {
            freeCompilerArgs = ["-Xjsr305=strict"]
            jvmTarget = "1.8"
        }
    }
    
    repositories {
        mavenCentral()
    }
    
    
    dependencies {
        implementation('org.springframework.boot:spring-boot-starter-thymeleaf')
        implementation('org.springframework.boot:spring-boot-starter-web')
        implementation('com.fasterxml.jackson.module:jackson-module-kotlin')
        implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
        implementation("org.jetbrains.kotlin:kotlin-reflect")
        testImplementation('org.springframework.boot:spring-boot-starter-test')
    }
    

    애플리케이션 클래스 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)
    }
    

    IntelliJ IDEA로 프로젝트 만들기



    IntelliJ IDEA에서 Import Project에서 build.gradle을 지정합니다.



    Use auto-import 를 체크하고 임포트.



    병아리 프로그램 실행



    IntelliJ IDEA 메뉴에서 View → Tool Windows → Gradle에서 Gradle 창을 엽니 다.



    Gradle 창에서 Tasks → application → bootRun을 마우스 오른쪽 버튼으로 클릭하고 Run 'demo [bootRun]'을 선택하여 실행합니다.



    실행하면 Run 창에 다음과 같은 Spring Boot 메시지가 표시됩니다.
      .   ____          _            __ _ _
     /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
     \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::        (v2.1.0.RELEASE)
    

    그 후, 「Tomcat started on port(s): 8080 (http) with context path ''」나 「Started DemoApplicationKt」라고 하는 로그가 표시된다.

    http://localhost:8080에 액세스하면 다음과 유사한 메시지가 표시됩니다. 서버가 기동하고 있지만, 프로그램의 내용이 없는 상태가 되어 있다.
    Whitelabel Error Page
    
    This application has no explicit mapping for /error, so you are seeing this as a fallback.
    

    Hello World 코드 추가



    두 개의 HelloController.kt 파일과 hello_name.html 파일을 추가하여 Hello World를 구현합니다.



    Controller 클래스 추가



    다음 HelloController 클래스를 src/main/kotlin/com/example/demo/HelloController.kt에 추가합니다.


    package com.example.demo
    
    import org.springframework.stereotype.Controller
    import org.springframework.ui.Model
    import org.springframework.web.bind.annotation.PathVariable
    import org.springframework.web.bind.annotation.ResponseBody
    import org.springframework.web.bind.annotation.RequestMapping
    import org.springframework.web.bind.annotation.RequestMethod
    
    @Controller
    class HelloController {
    
        @RequestMapping(value = ["/hello"], method = [RequestMethod.GET])
        @ResponseBody
        fun hello_world(): String {
            return "hello, world"
        }
    
        @RequestMapping(value = ["/hello/{name}"], method = [RequestMethod.GET])
        fun hello_name(@PathVariable name: String, model: Model): String {
            model.addAttribute("name", name)
            return "hello_name" // Thymeleaf テンプレートファイル名
        }
    }
    

    Thymeleaf 템플릿 파일 추가



    다음 HTML 템플릿 파일을 src/main/resources/templates/hello_name.html에 추가합니다.
    <!DOCTYPE html>
    <html lang="ja">
    <head>
        <meta charset="UTF-8">
        <title>Hello, [[${name}]]</title>
    </head>
    <body>
    <p>Hello, [[${name}]]</p>
    </body>
    </html>
    

    Hello World 프로그램 실행



    다시 프로그램을 실행합니다.



    http://localhost:8080/hello에 액세스하면 "hello, world"로 표시됩니다.



    http://localhost:8080/hello/hoge에 액세스하면 "Hello, hoge"가 표시됩니다.



    URL의 "hoge"부분은 어떤 문자열든지 지정할 수 있다.



    참고 자료


  • IntelliJ IDEA: The Java IDE for Professional Developers by JetBrains
  • Spring Boot
  • 좋은 웹페이지 즐겨찾기