WAR
코드 예시: jetty-war, tomcat-war, tomcat-war-ssl
Ktor 애플리케이션은 Tomcat 및 Jetty를 포함한 서블릿 컨테이너 내에서 실행하고 배포할 수 있습니다. 서블릿 컨테이너 내에 배포하려면 WAR 아카이브를 생성한 다음, WAR을 지원하는 서버 또는 클라우드 서비스에 배포해야 합니다.
이 토픽에서는 다음 방법을 보여드립니다:
- 서블릿 애플리케이션에서 Ktor를 사용하도록 구성하는 방법;
- WAR 애플리케이션 실행 및 패키징을 위한 Gretty 및 War 플러그인을 적용하는 방법;
- Ktor 서블릿 애플리케이션을 실행하는 방법;
- WAR 아카이브를 생성하고 배포하는 방법.
서블릿 애플리케이션에서 Ktor 구성
Ktor를 사용하면 애플리케이션 내에서 바로 원하는 엔진(Netty, Jetty 또는 Tomcat 등)으로 서버를 생성하고 시작할 수 있습니다. 이 경우 애플리케이션은 엔진 설정, 연결 및 SSL 옵션을 제어할 수 있습니다.
위 접근 방식과 달리, 서블릿 컨테이너는 애플리케이션 라이프사이클 및 연결 설정을 제어해야 합니다. Ktor는 애플리케이션에 대한 제어 권한을 서블릿 컨테이너에 위임하는 특별한 ServletApplicationEngine 엔진을 제공합니다.
참고: Ktor 애플리케이션이 서블릿 컨테이너 내에 배포될 때는 연결 및 SSL 설정이 적용되지 않습니다. tomcat-war-ssl 샘플은 Tomcat에서 SSL을 구성하는 방법을 보여줍니다.
의존성 추가
서블릿 애플리케이션에서 Ktor를 사용하려면 빌드 스크립트에 ktor-server-servlet-jakarta
아티팩트를 포함해야 합니다:
Tomcat/Jetty 9.x 또는 이전 버전을 사용하는 경우, 대신 ktor-server-servlet
아티팩트를 추가하세요.
참고: Ktor 애플리케이션이 서블릿 컨테이너 내에 배포될 때는 별도의 Jetty 또는 Tomcat 아티팩트가 필요하지 않습니다.
서블릿 구성
애플리케이션에 Ktor 서블릿을 등록하려면 WEB-INF/web.xml
파일을 열고 servlet-class
속성에 ServletApplicationEngine
를 할당합니다:
<servlet>
<display-name>KtorServlet</display-name>
<servlet-name>KtorServlet</servlet-name>
<servlet-class>io.ktor.server.servlet.jakarta.ServletApplicationEngine</servlet-class>
<init-param>
<param-name>io.ktor.ktor.config</param-name>
<param-value>application.conf</param-value>
</init-param>
<async-supported>true</async-supported>
</servlet>
그 다음, 이 서블릿의 URL 패턴을 구성합니다:
<servlet-mapping>
<servlet-name>KtorServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Gretty 구성
Gretty 플러그인을 사용하면 Jetty 및 Tomcat에서 서블릿 애플리케이션을 실행할 수 있습니다. 이 플러그인을 설치하려면 build.gradle.kts
파일을 열고 plugins
블록에 다음 코드를 추가하세요:
plugins {
id("org.gretty") version "4.0.3"
}
그런 다음, 다음과 같이 gretty
블록에서 이를 구성할 수 있습니다:
gretty {
servletContainer = "jetty11"
contextPath = "/"
logbackConfigFile = "src/main/resources/logback.xml"
}
gretty {
servletContainer = "tomcat10"
contextPath = "/"
logbackConfigFile = "src/main/resources/logback.xml"
}
마지막으로, run
태스크를 구성합니다:
afterEvaluate {
tasks.getByName("run") {
dependsOn("appRun")
}
}
War 구성
War 플러그인을 사용하면 WAR 아카이브를 생성할 수 있습니다. build.gradle.kts
파일의 plugins
블록에 다음 줄을 추가하여 설치할 수 있습니다:
plugins {
id("war")
}
애플리케이션 실행
구성된 Gretty 플러그인을 사용하여 run
태스크를 통해 서블릿 애플리케이션을 실행할 수 있습니다. 예를 들어, 다음 명령은 jetty-war 예시를 실행합니다:
./gradlew :jetty-war:run
WAR 아카이브 생성 및 배포
War 플러그인을 사용하여 애플리케이션으로 WAR 파일을 생성하려면 war
태스크를 실행합니다. jetty-war 예시의 경우, 명령은 다음과 같습니다:
./gradlew :jetty-war:war
jetty-war.war
파일은 build/libs
디렉토리에 생성됩니다. 생성된 아카이브를 jetty/webapps
디렉토리로 복사하여 서블릿 컨테이너 내에 배포할 수 있습니다. 예를 들어, 아래 Dockerfile
은 생성된 WAR을 Jetty 또는 Tomcat 서블릿 컨테이너 내에서 실행하는 방법을 보여줍니다:
FROM jetty:11.0.25
EXPOSE 8080:8080
COPY ./build/libs/jetty-war.war/ /var/lib/jetty/webapps
WORKDIR /var/lib/jetty
CMD ["java","-jar","/usr/local/jetty/start.jar"]
FROM tomcat:10.1.41
EXPOSE 8080:8080
COPY ./build/libs/tomcat-war.war/ /usr/local/tomcat/webapps
WORKDIR /usr/local/tomcat
CMD ["catalina.sh", "run"]
전체 예시는 다음에서 찾을 수 있습니다: jetty-war 및 tomcat-war.