헤로쿠
이 튜토리얼에서는 Ktor 애플리케이션을 헤로쿠에 준비하고 배포하는 방법을 보여드립니다.
사전 요구 사항
이 튜토리얼을 시작하기 전에 다음 사전 요구 사항이 충족되었는지 확인하세요.
- 헤로쿠 계정이 있어야 합니다.
- Heroku CLI가 로컬 머신에 설치되어 있어야 합니다.
샘플 애플리케이션 생성
새 Ktor 프로젝트 생성, 열기 및 실행에 설명된 대로 샘플 애플리케이션을 생성합니다.
Ktor는 서버 생성 및 구성을 위한 두 가지 접근 방식(코드 또는 구성 파일 사용)을 제공합니다. 배포 시 유일한 차이점은 들어오는 요청을 수신하는 데 사용되는 포트를 지정하는 방법입니다.
애플리케이션 준비
1단계: 포트 구성
먼저, 들어오는 요청을 수신하는 데 사용될 포트를 지정해야 합니다. 헤로쿠는 PORT
환경 변수를 사용하므로, 애플리케이션이 이 변수의 값을 사용하도록 구성해야 합니다. Ktor 서버를 구성하는 방식에 따라 다음 중 하나를 수행하세요:
서버 구성이 코드에 지정된 경우,
System.getenv
를 사용하여 환경 변수 값을 얻을 수 있습니다.src/main/kotlin/com/example
폴더에 있는Application.kt
파일을 열고, 아래와 같이embeddedServer
함수의port
파라미터 값을 변경하세요:kotlinfun main() { embeddedServer(Netty, port = System.getenv("PORT").toInt()) { // ... }.start(wait = true) }
서버 구성이
application.conf
파일에 지정된 경우,${ENV}
구문을 사용하여 환경 변수를port
파라미터에 할당할 수 있습니다.src/main/resources
에 있는application.conf
파일을 열고, 아래와 같이 업데이트하세요:ktor { deployment { port = 8080 port = ${?PORT} } }
2단계: stage 태스크 추가
build.gradle.kts
파일을 열고, 헤로쿠에서 실행되는 실행 파일을 만들기 위해 헤로쿠가 사용하는 사용자 지정 stage
태스크를 추가하세요:
tasks {
create("stage").dependsOn("installDist")
}
installDist
태스크는 Gradle 애플리케이션 플러그인에 포함되어 있으며, 이 플러그인은 이미 샘플 프로젝트에 추가되어 있습니다.
3단계: Procfile 생성
프로젝트 루트에 Procfile을 생성하고 다음 내용을 추가하세요:
web: ./build/install/ktor-get-started-sample/bin/ktor-get-started-sample
이 파일은 stage
태스크에 의해 생성된 애플리케이션 실행 파일의 경로를 지정하며, 헤로쿠가 애플리케이션을 시작할 수 있도록 합니다. ktor-get-started-sample
을 프로젝트 이름으로 바꿔야 할 수도 있습니다.
애플리케이션 배포
Git을 사용하여 헤로쿠에 애플리케이션을 배포하려면 터미널을 열고 다음 단계를 따르세요:
이전 섹션에서 변경한 내용을 로컬에 커밋합니다:
Bashgit add . git commit -m "Prepare app for deploying"
헤로쿠 CLI에 로그인합니다:
Bashheroku login
heroku create
명령어를 사용하여 헤로쿠 애플리케이션을 생성합니다.ktor-sample-heroku
를 애플리케이션 이름으로 바꿔야 합니다:Bashheroku create ktor-sample-heroku
이 명령어는 두 가지를 수행합니다:
- 새 헤로쿠 애플리케이션을 생성합니다. 이 애플리케이션은 웹 대시보드에서 확인할 수 있습니다.
- 로컬 저장소에
heroku
라는 새 Git 리모트를 추가합니다.
애플리케이션을 배포하려면
heroku main
으로 변경 사항을 푸시합니다...Bashgit push heroku main
... 그리고 헤로쿠가 애플리케이션을 빌드하고 배포할 때까지 기다리세요:
... remote: https://ktor-sample-heroku.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy... done.