Skip to content

파일을 통한 설정

Ktor를 사용하면 호스트 주소와 포트,

모듈
모듈을 사용하면 경로를 그룹화하여 애플리케이션을 구성할 수 있습니다.
로드 등 다양한 서버 매개변수를 구성할 수 있습니다. 설정은 서버를 생성한 방식에 따라 달라집니다.
embeddedServer 또는 EngineMain
애플리케이션 배포 요구 사항에 따라 서버를 생성하는 방법을 알아보세요.
.

EngineMain의 경우, Ktor는 HOCON 또는 YAML 형식을 사용하는 설정 파일에서 구성을 로드합니다. 이 방법은 서버를 구성하는 데 더 많은 유연성을 제공하며 애플리케이션을 다시 컴파일하지 않고도 구성을 변경할 수 있도록 합니다. 또한, 명령줄에서 애플리케이션을 실행하고 해당 명령줄 인수를 전달하여 필요한 서버 매개변수를 재정의할 수 있습니다.

개요

EngineMain을 사용하여 서버를 시작하면 Ktor는 resources 디렉터리에 있는 application.*이라는 파일에서 자동으로 설정 설정을 로드합니다. 두 가지 설정 형식이 지원됩니다:

  • HOCON ( application.conf )

  • YAML ( application.yaml )

    NOTE

    YAML 설정 파일을 사용하려면 ktor-server-config-yaml

    의존성
    기존 Gradle/Maven 프로젝트에 Ktor 서버 의존성을 추가하는 방법을 알아보세요.
    을 추가해야 합니다.

설정 파일은 최소한 ktor.application.modules 속성을 사용하여 지정된

로드할 모듈
모듈을 사용하면 경로를 그룹화하여 애플리케이션을 구성할 수 있습니다.
을 포함해야 합니다. 예를 들면 다음과 같습니다:

shell
yaml

이 경우 Ktor는 아래 Application.kt 파일의 Application.module 함수를 호출합니다:

kotlin

로드할 모듈 외에도 미리 정의된 (예: 포트 또는 호스트, SSL 설정 등) 설정과 사용자 지정 설정을 포함하여 다양한 서버 설정을 구성할 수 있습니다. 몇 가지 예를 살펴보겠습니다.

기본 설정

아래 예시에서 서버 수신 포트는 ktor.deployment.port 속성을 사용하여 8080으로 설정됩니다.

shell
yaml

엔진 설정

EngineMain을 사용하는 경우, ktor.deployment 그룹 내에서 모든 엔진에 공통적인 옵션을 지정할 수 있습니다.

shell
yaml

Netty

ktor.deployment 그룹 내의 설정 파일에서 Netty 관련 옵션도 구성할 수 있습니다:

shell
yaml

SSL 설정

아래 예시는 Ktor가 8443 SSL 포트에서 수신하도록 활성화하고, 별도의 security 블록에서 필요한

SSL 설정
필수 의존성: io.ktor:ktor-network-tls-certificates 코드 예시: ssl-engine-main, ssl-embedded-server
을 지정합니다.

shell
yaml

사용자 지정 설정

미리 정의된 속성을 지정하는 것 외에도 Ktor는 설정 파일에 사용자 지정 설정을 유지할 수 있도록 합니다. 아래 설정 파일에는 JWT 설정을 유지하는 데 사용되는 사용자 지정 jwt 그룹이 포함되어 있습니다.

shell
yaml

코드에서 이러한 설정을 읽고 처리할 수 있습니다.

미리 정의된 속성

아래는 설정 파일 내에서 사용할 수 있는 미리 정의된 설정 목록입니다.

ktor.deployment.host

호스트 주소.

예시 : 0.0.0.0

ktor.deployment.port

수신 포트. 이 속성을 0으로 설정하여 서버를 임의 포트에서 실행할 수 있습니다.

예시 : 8080, 0

ktor.deployment.sslPort

수신 SSL 포트. 이 속성을 0으로 설정하여 서버를 임의 포트에서 실행할 수 있습니다.

예시 : 8443, 0

NOTE

SSL에는 아래에 나열된 추가 옵션이 필요합니다.

ktor.deployment.watch

자동 재로드에 사용되는 감시 경로.

ktor.deployment.rootPath

서블릿
WAR 아카이브를 사용하여 서블릿 컨테이너 내에서 Ktor 애플리케이션을 실행하고 배포하는 방법을 알아보세요.
컨텍스트 경로.

예시 : /

ktor.deployment.shutdown.url

종료 URL. 이 옵션은

종료 URL
코드 예시: %example_name%
플러그인을 사용합니다.

ktor.deployment.shutdownGracePeriod

서버가 새 요청 수신을 중지하기 위한 최대 시간(밀리초).

ktor.deployment.shutdownTimeout

서버가 완전히 중지될 때까지 기다릴 최대 시간(밀리초).

ktor.deployment.callGroupSize

애플리케이션 호출을 처리하는 데 사용되는 스레드 풀의 최소 크기.

ktor.deployment.connectionGroupSize

새 연결을 수락하고 호출 처리를 시작하는 데 사용되는 스레드 수.

ktor.deployment.workerGroupSize

연결 처리, 메시지 구문 분석 및 엔진의 내부 작업을 수행하기 위한 이벤트 그룹의 크기.

ktor.deployment.sslPort를 설정한 경우, 다음

SSL 관련
필수 의존성: io.ktor:ktor-network-tls-certificates 코드 예시: ssl-engine-main, ssl-embedded-server
속성을 지정해야 합니다:

ktor.security.ssl.keyStore

SSL 키 저장소.

ktor.security.ssl.keyAlias

SSL 키 저장소의 별칭.

ktor.security.ssl.keyStorePassword

SSL 키 저장소의 비밀번호.

ktor.security.ssl.privateKeyPassword

SSL 개인 키의 비밀번호.

환경 변수

설정 파일에서 ${ENV} / $ENV 구문을 사용하여 매개변수를 환경 변수로 대체할 수 있습니다. 예를 들어, PORT 환경 변수를 ktor.deployment.port 속성에 다음과 같이 할당할 수 있습니다:

shell
yaml

이 경우, 환경 변수 값이 수신 포트를 지정하는 데 사용됩니다. 런타임에 PORT 환경 변수가 존재하지 않으면, 다음과 같이 기본 포트 값을 제공할 수 있습니다:

shell
yaml

코드에서 설정 읽기

Ktor를 사용하면 코드에서 설정 파일 내에 지정된 속성 값에 접근할 수 있습니다. 예를 들어, ktor.deployment.port 속성을 지정했다면...

shell
yaml

... ApplicationEnvironment.config를 사용하여 애플리케이션 설정에 접근하고 다음과 같이 필요한 속성 값을 얻을 수 있습니다:

kotlin

이것은 설정 파일에 사용자 지정 설정을 유지하고 해당 값에 접근해야 할 때 특히 유용합니다.

명령줄

EngineMain을 사용하여 서버를 생성하는 경우, 명령줄에서

패키징된 애플리케이션
Ktor Gradle 플러그인을 사용하여 실행 가능한 단일 JAR(fat JAR)을 생성하고 실행하는 방법을 알아보세요.
을 실행하고 해당 명령줄 인수를 전달하여 필요한 서버 매개변수를 재정의할 수 있습니다. 예를 들어, 설정 파일에 지정된 포트를 다음과 같이 재정의할 수 있습니다:

shell

사용 가능한 명령줄 옵션은 다음과 같습니다:

-jar

JAR 파일 경로.

-config

resourcesapplication.conf / application.yaml 대신 사용되는 사용자 지정 설정 파일 경로.

예시 : java -jar sample-app.jar -config=anotherfile.conf

참고 : 여러 값을 전달할 수 있습니다. java -jar sample-app.jar -config=config-base.conf -config=config-dev.conf. 이 경우 모든 설정이 병합되며, 오른쪽 설정의 값이 우선권을 가집니다.

-host

호스트 주소.

-port

수신 포트.

-watch

자동 재로드에 사용되는 감시 경로.

SSL 관련
필수 의존성: io.ktor:ktor-network-tls-certificates 코드 예시: ssl-engine-main, ssl-embedded-server
옵션:

-sslPort

수신 SSL 포트.

-sslKeyStore

SSL 키 저장소.

해당하는 명령줄 옵션이 없는 미리 정의된 속성을 재정의해야 하는 경우, -P 플래그를 사용하세요. 예를 들면 다음과 같습니다:

또한 -P 플래그를 사용하여 사용자 지정 속성을 재정의할 수 있습니다.

예시: 사용자 지정 속성을 사용하여 환경 지정 방법

서버가 로컬에서 실행 중인지 또는 프로덕션 환경에서 실행 중인지에 따라 다른 작업을 수행하고 싶을 수 있습니다. 이를 위해 application.conf / application.yaml에 사용자 지정 속성을 추가하고, 서버가 로컬에서 실행 중인지 프로덕션에서 실행 중인지에 따라 값이 달라지는 전용 환경 변수로 초기화할 수 있습니다. 아래 예시에서는 KTOR_ENV 환경 변수가 사용자 지정 ktor.environment 속성에 할당됩니다.

yaml

런타임에 코드에서 설정을 읽어 ktor.environment 값에 접근하고 필요한 작업을 수행할 수 있습니다:

kotlin

전체 예시는 다음에서 찾을 수 있습니다: engine-main-custom-environment .