Kotlin Ktor start.io 사용해서 프로젝트 생성하기
07 Jan 2020 | Kotlin ktorKtor start.io
Spring Boot
같은 경우는 Spring Initializer라는 사이트를 이용해서
초기 프로젝트를 손쉽게 생성할 수 있습니다.
Ktor
도 비슷한 역할을 해주는 사이트가 있습니다.
이런 사이트를 이용해서 프로젝트를 생성할 시 좋은 점은 원하는 라이브러리를 찾기가 쉬우며, 각 라이브러리간 버전 차이로 발생하는 문제를 최소화할 수 있기 때문에 가급적 사용하는 것을 추천합니다.
위 사이트를 통해서 만들어진 build.gradle
예제입니다.
build.gradle
buildscript { repositories { jcenter() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } apply plugin: 'kotlin' apply plugin: 'application' group 'com.snowdeer' version '0.0.1-SNAPSHOT' mainClassName = "io.ktor.server.netty.EngineMain" sourceSets { main.kotlin.srcDirs = main.java.srcDirs = ['src'] test.kotlin.srcDirs = test.java.srcDirs = ['test'] main.resources.srcDirs = ['resources'] test.resources.srcDirs = ['testresources'] } repositories { mavenLocal() jcenter() maven { url 'https://kotlin.bintray.com/ktor' } } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" implementation "io.ktor:ktor-server-netty:$ktor_version" implementation "ch.qos.logback:logback-classic:$logback_version" implementation "io.ktor:ktor-server-core:$ktor_version" implementation "io.ktor:ktor-server-host-common:$ktor_version" implementation "io.ktor:ktor-gson:$ktor_version" testImplementation "io.ktor:ktor-server-tests:$ktor_version" }
resources/application.conf
ktor { deployment { port = 8080 port = ${?PORT} } application { modules = [ com.snowdeer.ApplicationKt.module ] } }
resources/logback.xml
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="trace"> <appender-ref ref="STDOUT"/> </root> <logger name="org.eclipse.jetty" level="INFO"/> <logger name="io.netty" level="INFO"/> </configuration>
Application.kt
package com.snowdeer import io.ktor.application.* import io.ktor.response.* import io.ktor.request.* import io.ktor.routing.* import io.ktor.http.* import io.ktor.http.content.* import io.ktor.gson.* import io.ktor.features.* import org.slf4j.event.* fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args) @Suppress("unused") // Referenced in application.conf @kotlin.jvm.JvmOverloads fun Application.module(testing: Boolean = false) { install(ContentNegotiation) { gson { } } install(CallLogging) { level = Level.INFO filter { call -> call.request.path().startsWith("/") } } install(CORS) { method(HttpMethod.Options) method(HttpMethod.Put) method(HttpMethod.Delete) method(HttpMethod.Patch) header(HttpHeaders.Authorization) header("MyCustomHeader") allowCredentials = true anyHost() // @TODO: Don't do this in production if possible. Try to limit it. } routing { get("/") { call.respondText("HELLO WORLD!", contentType = ContentType.Text.Plain) } // Static feature. Try to access `/static/ktor_logo.svg` static("/static") { resources("static") } get("/json/gson") { call.respond(mapOf("hello" to "world")) } } }