GraalVM
샘플 프로젝트: graalvm
Ktor 서버 애플리케이션은 다양한 플랫폼을 위한 네이티브 이미지를 생성하기 위해 GraalVM을 활용할 수 있으며, 당연히 GraalVM이 제공하는 더 빠른 시작 시간 및 기타 이점들을 누릴 수 있습니다.
현재 GraalVM을 활용하려는 Ktor 서버 애플리케이션은 애플리케이션 엔진으로 CIO를 사용해야 합니다.
GraalVM 준비
GraalVM을 설치하고 시스템 경로(path)에 설치 디렉터리를 추가하는 것 외에도, 모든 의존성이 포함(bundle)되도록 애플리케이션을 준비해야 합니다. 즉, fat JAR를 생성해야 합니다.
리플렉션 설정
GraalVM은 Ktor와 같이 리플렉션(reflection)을 사용하는 애플리케이션에 대해 몇 가지 요구 사항이 있습니다. 특정 타입 정보가 포함된 JSON 파일을 제공해야 합니다. 이 설정 파일은 native-image 도구의 인자로 전달됩니다.
native-image 도구 실행
fat JAR가 준비되면, native-image CLI 도구를 사용하여 네이티브 이미지를 생성하는 단계만 남습니다. 이는 Gradle 플러그인으로도 수행할 수 있습니다. build.gradle.kts 파일의 예시는 여기에서 확인할 수 있습니다. 단, 사용하는 의존성이나 프로젝트의 패키지 이름 등에 따라 일부 옵션이 달라질 수 있음에 유의하세요.
결과 바이너리 실행
쉘 스크립트가 오류 없이 실행되면 네이티브 애플리케이션을 얻게 되며, 이 샘플의 경우 이름은 graal-server입니다. 이를 실행하면 Ktor 서버가 시작되고 https://0.0.0.0:8080에서 응답합니다.
//: # (
코드 예제: deployment-ktor-plugin
)