[Spring] Java 21 외장 톰캣 버전 설정

1. 문제 상황

Java21 버전 업 중, 인텔리제이 내장 톰캣으로는 정상적으로 실행되지만, 커스텀 옵션을 사용 중인 외장톰캣을 그대로 사용 시 정상적으로 구동되지 않는 현상이 발견되었다.

2. 해결

먼저, 빌드 및 path 등 기존 설정들은 문제가 없는 것을 확인하였고, 로컬 톰캣에서 정상적으로 구동됨을 확인하였기에 다른 부분을 추가로 확인해 보았다. 버전업 영향도 파악기간 중 기존에 톰캣 8.5 버전과 호환되는 것을 확인하였으나, 공식 홈페이지에서 재확인해보았다.

톰캣 8.5 버전의 자바 지원버전을 보면 "7 and later"로 되어있어 7 이후 버전을 다 사용 가능한 것으로 이해했었으나, 다른 버전을 시도.

그중 jdk21 버전과 정확히 일치하는 최신 톰캣 11.0.x 버전을 시도하였고, 톰캣을 11 버전대로 업그레이드 후 실행 시 정상 실행됨을 확인.

  • It is not unusual for the initial early access builds to contain bugs that can cause problems for web applications running on Tomcat.
  • If the new Java version introduces new language features then the default JSP compiler may not support them immediately. Switching the JSP compiler to javac may enable these new language features to be used in JSPs.
  • If you do discover an problem using a Java early access build, please ask for help. The Tomcat user's mailing list is probably the best place to start.

 

톰캣 11 버전이 필수인 것인가를 확인해 보던 중, 신규 자바 버전에 새로운 기능이 추가되면 버전 호환성 표와는 같아도 일부 기능이 호환되지 않는 것은 정상적인 현상이라는 내용 확인. 또한 이번 Java 변경 사항 중 Jakarta EE로의 전환이 가장 큰 이슈 중 하나이기에, 해당 내용을 적용할 수 있는 최저 버전을 찾아보기로 하였다.

Alpha releases may contain large amounts of untested/missing functionality required by the specification and/or significant bugs and are not expected to run stably for any length of time.

 

또한 톰캣의 알파버전은 공지된 대로 중대한 버그들이 많이 발견될 수 있는 상태이기에 현재 11 버전을 라이브로 도입하는 것은 위험하다.

Apache Tomcat 11.0.x is the current focus of development. It builds on Tomcat 10.1.x and implements the Servlet 6.1, JSP 4.0, EL 6.0, WebSocket 2.2 and Authentication 3.1 specifications (the versions required by Jakarta EE 11 platform).

 

(톰캣 11 버전은 개발을 한창 진행 중인 듯하다. 2023/12/18 기준)

 

결국 jdk21과 호환 가능한 최신 안정화버전을 찾아보기로 하였다. jdk21에 맞춘 jakartaEE 플랫폼을 사용한 최저 버전을 확인해 보면

 

9점대 버전이고, 가장 최신의 stable(안정화된) 버전은 10.1.x버전이기에 10.1.x버전으로 시도를 하였고 정상 구동됨을 확인하였다.

 

 

 

 

참고

https://tomcat.apache.org/whichversion.html