서버 엔진
Ktor 서버 애플리케이션을 실행하려면 먼저 서버를 생성하고 구성해야 합니다. 서버 구성에는 다음과 같은 다양한 설정이 포함됩니다.
- 네트워크 요청 처리를 위한 엔진.
- 서버에 접근하는 데 사용되는 호스트 및 포트 값.
- SSL 설정.
지원되는 플랫폼
아래 표는 각 엔진이 지원하는 플랫폼을 나열합니다.
엔진 | 플랫폼 | HTTP/2 |
---|---|---|
Netty | JVM | ✅ |
Jetty | JVM | ✅ |
Tomcat | JVM | ✅ |
CIO (Coroutine-based I/O) | JVM, Native, GraalVM, JavaScript, WasmJs | ✖️ |
ServletApplicationEngine | JVM | ✅ |
의존성 추가
원하는 엔진을 사용하기 전에 해당 의존성을 빌드 스크립트에 추가해야 합니다.
ktor-server-netty
ktor-server-jetty-jakarta
ktor-server-tomcat-jakarta
ktor-server-cio
아래는 Netty에 대한 의존성을 추가하는 예시입니다.
서버 생성 방법 선택
Ktor 서버 애플리케이션은 두 가지 방법으로 [생성 및 실행]할 수 있습니다. 코드에서 서버 매개변수를 빠르게 전달하는 embeddedServer를 사용하거나, 외부 application.conf
또는 application.yaml
파일에서 구성을 로드하는 EngineMain을 사용하는 방법입니다.
embeddedServer
embeddedServer()
함수는 특정 유형의 엔진을 생성하는 데 사용되는 엔진 팩토리를 받습니다. 아래 예시에서는 Netty
팩토리를 전달하여 Netty 엔진으로 서버를 실행하고 8080
포트에서 수신 대기합니다.
import io.ktor.server.response.*
import io.ktor.server.routing.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*
fun main(args: Array<String>) {
embeddedServer(Netty, port = 8080) {
routing {
get("/") {
call.respondText("Hello, world!")
}
}
}.start(wait = true)
}
EngineMain
EngineMain
은 서버 실행을 위한 엔진을 나타냅니다. 다음 엔진을 사용할 수 있습니다.
io.ktor.server.netty.EngineMain
io.ktor.server.jetty.jakarta.EngineMain
io.ktor.server.tomcat.jakarta.EngineMain
io.ktor.server.cio.EngineMain
EngineMain.main
함수는 선택한 엔진으로 서버를 시작하고 외부 설정 파일에 지정된 애플리케이션 모듈을 로드하는 데 사용됩니다. 아래 예시에서는 애플리케이션의 main
함수에서 서버를 시작합니다.
package com.example
import io.ktor.server.application.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)
fun Application.module() {
routing {
get("/") {
call.respondText("Hello, world!")
}
}
}
ktor {
deployment {
port = 8080
}
application {
modules = [ com.example.ApplicationKt.module ]
}
}
ktor:
deployment:
port: 8080
application:
modules:
- com.example.ApplicationKt.module
빌드 시스템 작업을 사용하여 서버를 시작해야 하는 경우, 필요한 EngineMain
을 메인 클래스로 구성해야 합니다.
application {
mainClass.set("io.ktor.server.netty.EngineMain")
}
mainClassName = "io.ktor.server.netty.EngineMain"
<properties>
<main.class>io.ktor.server.netty.EngineMain</main.class>
</properties>
엔진 구성
이 섹션에서는 다양한 엔진별 옵션을 지정하는 방법을 살펴봅니다.
코드에서
embeddedServer
함수는 configure
매개변수를 사용하여 엔진별 옵션을 전달할 수 있도록 합니다. 이 매개변수에는 모든 엔진에 공통적이며 ApplicationEngine.Configuration 클래스에 의해 노출되는 옵션이 포함됩니다.
아래 예시는 Netty
엔진을 사용하여 서버를 구성하는 방법을 보여줍니다. configure
블록 내에서 connector
를 정의하여 호스트와 포트를 지정하고, 다양한 서버 매개변수를 사용자 지정합니다.
connectors.add()
메서드는 지정된 호스트(127.0.0.1
) 및 포트(8080
)로 커넥터를 정의합니다.
이러한 옵션 외에도 다른 엔진별 속성을 구성할 수 있습니다.
Jetty
Jetty 특정 옵션은 JettyApplicationEngineBase.Configuration 클래스에 의해 노출됩니다.
Jetty 서버는 configureServer 블록 내부에서 구성할 수 있으며, 이 블록은 Server 인스턴스에 대한 접근을 제공합니다.
idleTimeout
속성을 사용하여 연결이 닫히기 전까지 유휴 상태를 유지할 수 있는 시간을 지정합니다.
Tomcat
Tomcat을 엔진으로 사용하는 경우 configureTomcat 속성을 사용하여 구성할 수 있으며, 이 속성은 Tomcat 인스턴스에 대한 접근을 제공합니다.
설정 파일에서
EngineMain
을 사용하는 경우 ktor.deployment
그룹 내에서 모든 엔진에 공통적인 옵션을 지정할 수 있습니다.