Skip to content

WAR

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 아티팩트를 포함해야 합니다:

Kotlin
Groovy
XML

Tomcat/Jetty 9.x 또는 이전 버전을 사용하는 경우, 대신 ktor-server-servlet 아티팩트를 추가하세요.

참고: Ktor 애플리케이션이 서블릿 컨테이너 내에 배포될 때는 별도의 Jetty 또는 Tomcat 아티팩트가 필요하지 않습니다.

서블릿 구성

애플리케이션에 Ktor 서블릿을 등록하려면 WEB-INF/web.xml 파일을 열고 servlet-class 속성에 ServletApplicationEngine를 할당합니다:

xml
<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>
XML

그 다음, 이 서블릿의 URL 패턴을 구성합니다:

xml
<servlet-mapping>
    <servlet-name>KtorServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

Gretty 구성

Gretty 플러그인을 사용하면 Jetty 및 Tomcat에서 서블릿 애플리케이션을 실행할 수 있습니다. 이 플러그인을 설치하려면 build.gradle.kts 파일을 열고 plugins 블록에 다음 코드를 추가하세요:

groovy
plugins {
    id("org.gretty") version "4.0.3"
}

그런 다음, 다음과 같이 gretty 블록에서 이를 구성할 수 있습니다:

groovy
gretty {
    servletContainer = "jetty11"
    contextPath = "/"
    logbackConfigFile = "src/main/resources/logback.xml"
}
groovy
gretty {
    servletContainer = "tomcat10"
    contextPath = "/"
    logbackConfigFile = "src/main/resources/logback.xml"
}

마지막으로, run 태스크를 구성합니다:

groovy
afterEvaluate {
    tasks.getByName("run") {
        dependsOn("appRun")
    }
}

War 구성

War 플러그인을 사용하면 WAR 아카이브를 생성할 수 있습니다. build.gradle.kts 파일의 plugins 블록에 다음 줄을 추가하여 설치할 수 있습니다:

groovy
plugins {
    id("war")
}

애플리케이션 실행

구성된 Gretty 플러그인을 사용하여 run 태스크를 통해 서블릿 애플리케이션을 실행할 수 있습니다. 예를 들어, 다음 명령은 jetty-war 예시를 실행합니다:

Bash
./gradlew :jetty-war:run

WAR 아카이브 생성 및 배포

War 플러그인을 사용하여 애플리케이션으로 WAR 파일을 생성하려면 war 태스크를 실행합니다. jetty-war 예시의 경우, 명령은 다음과 같습니다:

Bash
./gradlew :jetty-war:war

jetty-war.war 파일은 build/libs 디렉토리에 생성됩니다. 생성된 아카이브를 jetty/webapps 디렉토리로 복사하여 서블릿 컨테이너 내에 배포할 수 있습니다. 예를 들어, 아래 Dockerfile은 생성된 WAR을 Jetty 또는 Tomcat 서블릿 컨테이너 내에서 실행하는 방법을 보여줍니다:

Docker
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"]
Docker
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-wartomcat-war.