보안 업데이트를 계속 받고 기술 지원을 받으려면 애플리케이션을 지원되는 최신 런타임 버전으로 업그레이드해야 합니다.
기존 앱을 업그레이드하는 프로세스는 앱에서 현재 사용하는 런타임 버전에 따라 다릅니다.
자바 8: 지원되는 최신 자바 버전으로 앱을 마이그레이션해야 합니다. Java 8은 2024년 1월 31일에 지원을 종료합니다. 기존 Java 8 애플리케이션은 계속 실행되고 트래픽을 수신합니다. 그러나 지원 종료 날짜 이후에 런타임을 사용하는 새 애플리케이션을 배포하거나 기존 애플리케이션을 업데이트할 수 없습니다.
Java 2세대 런타임(지원 종료 후): 지원되는 Java 버전으로 업그레이드하려면 다음을 수행합니다.
앱을 실행할 Java 버전을 지정하여 app.yaml 파일을 업데이트합니다. 예를 들면 다음과 같습니다.
runtime:javaVERSION
여기서 VERSION은 MAJOR 버전 번호입니다.
예를 들어 최신 Java 버전인 Java 21을 사용하려면 21을 지정합니다.
자세한 내용은 Java 런타임 개요를 참조하세요.
기존 번들 서비스를 사용하는 경우 다음 중 하나에서 실행되도록 앱을 업그레이드해야 합니다.
Java Enterprise 버전 10(EE10 - 기본값, 권장): Java EE10은 javax.servlet.* API를 지원하지 않으며 Jakarta 네임스페이스와 같은 새로운 Java 아티팩트를 사용하려면 앱과 서드 파티 종속성을 업데이트해야 합니다.
Java Enterprise Edition 8(EE8): Java EE8을 사용하면 javax.servlet.* API를 사용할 수 있지만 appengine-web.xml 파일에 대한 구성을 약간 변경해야 합니다.
선택사항: Java 21에는 가상 스레드 지원이 포함됩니다. 가상 스레드를 사용 설정하려면 appengine-web.xml 파일의 system-properties 태그 내에 appengine.use.virtualthreads 속성을 추가합니다.
EE8에서 Java 17 또는 21로 업그레이드
EE8은 Java EE6 이상에 대한 하위 호환성을 제공하므로 주요 애플리케이션 구성 변경 없이 Java EE8에서 javax.servlet.* API를 계속 사용할 수 있습니다. 자바 EE8에서 애플리케이션을 실행하려면 appengine-web.xml 파일에 기본값이 아닌 app.engine.use.EE8 구성을 사용하여 새 system-properties 태그를 선언해야 합니다.
선택사항: Java 21에는 가상 스레드 지원이 포함됩니다. 가상 스레드를 사용 설정하려면 system-properties 태그 내에서 appengine.use.virtualthreads 속성을 추가합니다. 예를 들면 <property name="appengine.use.virtualthreads" value="true"/>입니다.
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["이해하기 어려움","hardToUnderstand","thumb-down"],["잘못된 정보 또는 샘플 코드","incorrectInformationOrSampleCode","thumb-down"],["필요한 정보/샘플이 없음","missingTheInformationSamplesINeed","thumb-down"],["번역 문제","translationIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-09-04(UTC)"],[[["\u003cp\u003eApplications must be upgraded to the latest supported Java runtime version to receive security updates and technical support.\u003c/p\u003e\n"],["\u003cp\u003eJava 8 applications have reached end of support and while they will continue to run, new deployments or updates to Java 8 applications are not permitted.\u003c/p\u003e\n"],["\u003cp\u003eUpgrading to a supported Java version involves updating the \u003ccode\u003eapp.yaml\u003c/code\u003e file to specify the desired Java version, such as Java 21, by using the \u003ccode\u003eruntime: javaVERSION\u003c/code\u003e configuration.\u003c/p\u003e\n"],["\u003cp\u003eIf using legacy bundled services, applications must be upgraded to either Java Enterprise Edition 10 (EE10), which requires using the \u003ccode\u003eJakarta\u003c/code\u003e namespace, or Java Enterprise Edition 8 (EE8), which requires minor \u003ccode\u003eappengine-web.xml\u003c/code\u003e configuration changes to use \u003ccode\u003ejavax.servlet.*\u003c/code\u003e APIs.\u003c/p\u003e\n"],["\u003cp\u003eJava 21 supports virtual threads, which can be enabled by adding the \u003ccode\u003eappengine.use.virtualthreads\u003c/code\u003e property in the \u003ccode\u003eappengine-web.xml\u003c/code\u003e file.\u003c/p\u003e\n"]]],[],null,["# Upgrade an existing application\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\nYou must upgrade your applications to the [latest supported runtime version](/appengine/docs/standard/lifecycle/support-schedule#java) to continue receiving security updates\nand be eligible for technical support.\n\nThe process of upgrading an existing app depends on the runtime version that\nyour app currently uses:\n\n- **Java 8** : You must migrate your app to the [latest supported Java version](/appengine/docs/standard/lifecycle/support-schedule#java). Java 8 has reached [end of support](/appengine/docs/standard/lifecycle/runtime-lifecycle#end_of_support) on January 31,2024. Your\n existing Java 8 applications will continue to run and receive traffic. However,\n you cannot deploy new or update existing applications that use runtimes [after their end of support date](/appengine/docs/standard/lifecycle/support-schedule#java).\n\n- **Java second-generation runtimes (after end of support)** : To upgrade to a\n [supported version of Java](/appengine/docs/standard/lifecycle/support-schedule#java),\n do the following:\n\n - Update the `app.yaml` file by specifying a version of Java that you want your\n app to run. For example:\n\n runtime: java\u003cvar translate=\"no\"\u003eVERSION\u003c/var\u003e\n\n Where \u003cvar translate=\"no\"\u003eVERSION\u003c/var\u003e is the `MAJOR` version number.\n For example, to use the latest Java version, Java 21,\n specify `21`.\n For more information, see the\n [Java runtime overview](/appengine/docs/standard/java-gen2/runtime).\n - If you use legacy bundled services, you must upgrade your apps to run\n on either:\n\n - Java Enterprise Edition 10 (EE10 - default, recommended): Java EE10\n does not support `javax.servlet.*` APIs and requires you to update\n your apps and third-party dependencies to use newer Java artifacts\n like the `Jakarta` namespace.\n\n - Java Enterprise Edition 8 (EE8): Java EE8 lets you use `javax.servlet.*`\n APIs, but you must make minor configuration changes\n to your `appengine-web.xml` file.\n\n See [Upgrade to Java 21 for legacy bundled services](#update_for_bundled_services) for all options.\n- **Java 17**:\n\n App Engine supports this version. To continue to upgrade to the\n latest support version, do the following:\n - Update the `app.yaml` file by specifying a version of Java that you want your\n app to run. For example:\n\n runtime: java\u003cvar translate=\"no\"\u003eVERSION\u003c/var\u003e\n\n Where \u003cvar translate=\"no\"\u003eVERSION\u003c/var\u003e is the `MAJOR` version number.\n For example, to use the latest Java version, Java 21,\n specify `21`.\n For more information, see the\n [Java runtime overview](/appengine/docs/standard/java-gen2/runtime).\n - If you use legacy bundled services, you must upgrade your apps to run\n on either:\n\n - Java Enterprise Edition 10 (EE10 - default, recommended): Java EE10\n does not support `javax.servlet.*` APIs and requires you to update\n your apps and third-party dependencies to use newer Java artifacts\n like the `Jakarta` namespace.\n\n - Java Enterprise Edition 8 (EE8): Java EE8 lets you use\n `javax.servlet.*` APIs, but you must make minor configuration changes\n to your `appengine-web.xml` file.\n\n See [Upgrade to Java 21 for legacy bundled services](#update_for_bundled_services) for all options.\n\nUpgrade to Java 21 for legacy bundled services\n----------------------------------------------\n\n| **Important:** The `javax.servlet.*` APIs reached the [end of community support](https://github.com/jetty/jetty.project/issues/7958). We recommend that you update to [EE10](#ee10).\n\n### Java runtime compatibility\n\nRefer to the following table to understand which Java versions are compatible\nwith your versions of servlet:\n\n### Upgrade to Java 21 on EE10\n\nTo use Java 21 on [Enterprise Edition 10 (EE10)](https://jakarta.ee/release/10/),\nyou must upgrade your application servlets and dependencies in your Maven and Gradle\nfiles to include the `Jakarta` namespace:\n\n1. Change the version number in your `web.xml` configuration file to `version=6.0`. For example:\n\n \u003cweb-app xmlns=\"https://jakarta.ee/xml/ns/jakartaee\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd\"\n version=\"6.0\"\u003e\n ...\n \u003c/web-app\u003e\n\n2. Rename your application servlets and dependencies from `javax.servlet.*` to\n `jakarta.servlet.*`:\n\n import jakarta.servlet.ServletException;\n import jakarta.servlet.annotation.WebServlet;\n import jakarta.servlet.http.Cookie;\n import jakarta.servlet.http.HttpServlet;\n import jakarta.servlet.http.HttpServletRequest;\n import jakarta.servlet.http.HttpServletResponse;\n\n @WebServlet(name = \"viewer\", urlPatterns = {\"/view\"})\n public class MyServlet extends HttpServlet {\n ......\n\n3. Update your remaining application third-party dependencies to newer Java artifacts\n depending on the `Jakarta` namespace.\n\n4. Add the following system property in your [`appengine-web.xml`](/appengine/docs/standard/java-gen2/config/appref-xml#system_properties) file:\n\n \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n \u003cappengine-web-app xmlns=\"http://appengine.google.com/ns/1.0\"\u003e\n \u003cruntime\u003ejava21\u003c/runtime\u003e \u003c!-- or java17 --\u003e\n \u003csystem-properties\u003e\n \u003cproperty name=\"appengine.use.EE10\" value=\"true\"/\u003e\n \u003c/system-properties\u003e\n \u003capp-engine-apis\u003etrue\u003c/app-engine-apis\u003e\n \u003c/appengine-web-app\u003e\n\n5. Optional: Java 21 includes support for virtual threads. To enable\n virtual threads, you add the\n `appengine.use.virtualthreads` property within the `system-properties` tag\n in your [`appengine-web.xml`](/appengine/docs/standard/java-gen2/config/appref-xml#system_properties)\n file.\n\n### Upgrade to Java 17 or 21 on EE8\n\nYou can continue using `javax.servlet.*` APIs on Java EE8 without major application\nconfiguration changes, because EE8 offers backward compatibility for Java EE6\nand later. To run your applications on Java EE8, you must declare a new\n`system-properties` tag in your\n[`appengine-web.xml`](/appengine/docs/standard/java-gen2/config/appref-xml#system_properties)\nfile with the non-default `app.engine.use.EE8` configuration: \n\n \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n \u003cappengine-web-app xmlns=\"http://appengine.google.com/ns/1.0\"\u003e\n \u003cruntime\u003ejava21\u003c/runtime\u003e \u003c!-- or java17 --\u003e\n \u003csystem-properties\u003e\n \u003cproperty name=\"appengine.use.EE8\" value=\"true\"/\u003e\n \u003c/system-properties\u003e\n \u003capp-engine-apis\u003etrue\u003c/app-engine-apis\u003e\n \u003c/appengine-web-app\u003e\n\nOptional: Java 21 includes support for virtual threads. To enable\nvirtual threads, you add the `appengine.use.virtualthreads` property\nwithin the `system-properties` tag. Example:\n`\u003cproperty name=\"appengine.use.virtualthreads\" value=\"true\"/\u003e`"]]