๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—…๊ทธ๋ ˆ์ด๋“œ

๋ณด์•ˆ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ณ„์† ๋ฐ›๊ณ  ๊ธฐ์ˆ  ์ง€์›์„ ๋ฐ›์œผ๋ ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง€์›๋˜๋Š” ์ตœ์‹  ๋Ÿฐํƒ€์ž„ ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด ์•ฑ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ์•ฑ์—์„œ ํ˜„์žฌ ์‚ฌ์šฉํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

  • ์ž๋ฐ” 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 ํŒŒ์ผ์— ๋Œ€ํ•œ ๊ตฌ์„ฑ์„ ์•ฝ๊ฐ„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

        ๋ชจ๋“  ์˜ต์…˜์— ๋Œ€ํ•œ ๊ธฐ์กด ๋ฒˆ๋“ค ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด ์ž๋ฐ” 21๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ์—์„œ ํ™•์ธํ•˜์„ธ์š”.

  • Java 17:

    App Engine์€ ์ด ๋ฒ„์ „์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์†ํ•ด์„œ ์ตœ์‹  ์ง€์› ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    • ์•ฑ์„ ์‹คํ–‰ํ•  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 ํŒŒ์ผ์— ๋Œ€ํ•œ ๊ตฌ์„ฑ์„ ์•ฝ๊ฐ„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      ๋ชจ๋“  ์˜ต์…˜์— ๋Œ€ํ•œ ๊ธฐ์กด ๋ฒˆ๋“ค ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด ์ž๋ฐ” 21๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ์—์„œ ํ™•์ธํ•˜์„ธ์š”.

๊ธฐ์กด ๋ฒˆ๋“ค ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด ์ž๋ฐ” 21๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ

Java ๋Ÿฐํƒ€์ž„ ํ˜ธํ™˜์„ฑ

๋‹ค์Œ ํ‘œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜๋Š” Java ๋ฒ„์ „์„ ํ™•์ธํ•˜์„ธ์š”.

Enterprise ๋ฒ„์ „(EE) ์ž๋ฐ” ๋ฒ„์ „ ์„œ๋ธ”๋ฆฟ ํ˜ธํ™˜์„ฑ
EE7 11 2.5 ๋˜๋Š” 3.1 EE7์—๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›์ด ์—†์Šต๋‹ˆ๋‹ค. Java 11์€ ์ง€์› ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์—ฌ ์ตœ์‹  ๋ฒ„์ „์˜ Java๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
EE7 17 2.5 ์ด์ƒ EE7์—๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›์ด ์—†์Šต๋‹ˆ๋‹ค. ์•ฑ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์—ฌ EE8์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
EE8 17/21 2.5 ์ด์ƒ ์ž๋ฐ” EE8์€ ์ž๋ฐ” EE6 ์ด์ƒ๊ณผ ํ•˜์œ„ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ EE8์—์„œ Java 21๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
EE10 17/21 6.0(๊ถŒ์žฅ) Java 21์€ ๊ธฐ๋ณธ์ ์œผ๋กœ EE10์„ ์‹คํ–‰ํ•˜๋„๋ก ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. Java EE10์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Jakarta ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ํฌํ•จํ•˜๋„๋ก ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ธ”๋ฆฟ ๋ฐ ์ข…์† ํ•ญ๋ชฉ์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ EE10์—์„œ ์ž๋ฐ” 21๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

EE10์—์„œ Java 21๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ

Enterprise ๋ฒ„์ „ 10(EE10)์—์„œ ์ž๋ฐ” 21์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Jakarta ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ํฌํ•จํ•˜๋„๋ก Maven ๋ฐ Gradle ํŒŒ์ผ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ธ”๋ฆฟ ๋ฐ ์ข…์† ํ•ญ๋ชฉ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. web.xml ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ version=6.0์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

        <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
          version="6.0">
          ...
        </web-app>
    
  2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ธ”๋ฆฟ ๋ฐ ์ข…์† ํ•ญ๋ชฉ ์ด๋ฆ„์„ javax.servlet.*์—์„œ jakarta.servlet.*๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

         import jakarta.servlet.ServletException;
         import jakarta.servlet.annotation.WebServlet;
         import jakarta.servlet.http.Cookie;
         import jakarta.servlet.http.HttpServlet;
         import jakarta.servlet.http.HttpServletRequest;
         import jakarta.servlet.http.HttpServletResponse;
    
         @WebServlet(name = "viewer", urlPatterns = {"/view"})
         public class MyServlet extends HttpServlet {
        ......
    
  3. Jakarta ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋”ฐ๋ผ ๋‚จ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํƒ€์‚ฌ ์ข…์† ํ•ญ๋ชฉ์„ ์ƒˆ๋กœ์šด Java ์•„ํ‹ฐํŒฉํŠธ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

  4. appengine-web.xml ํŒŒ์ผ์— ๋‹ค์Œ ์‹œ์Šคํ…œ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

     <?xml version="1.0" encoding="utf-8"?>
     <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
        <runtime>java21</runtime> <!-- or java17 -->
        <system-properties>
          <property name="appengine.use.EE10" value="true"/>
        </system-properties>
        <app-engine-apis>true</app-engine-apis>
     </appengine-web-app>
    
  5. ์„ ํƒ์‚ฌํ•ญ: 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 ํƒœ๊ทธ๋ฅผ ์„ ์–ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

   <?xml version="1.0" encoding="utf-8"?>
   <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
      <runtime>java21</runtime> <!-- or java17 -->
      <system-properties>
        <property name="appengine.use.EE8" value="true"/>
      </system-properties>
      <app-engine-apis>true</app-engine-apis>
   </appengine-web-app>

์„ ํƒ์‚ฌํ•ญ: Java 21์—๋Š” ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ ์ง€์›์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด system-properties ํƒœ๊ทธ ๋‚ด์—์„œ appengine.use.virtualthreads ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด <property name="appengine.use.virtualthreads" value="true"/>์ž…๋‹ˆ๋‹ค.