26장 Tomcat·JDK·javax·jakarta 경계를 업그레이드 행렬로 잠근다
Tomcat major 버전만 올려 해결할 수 없는 경계가 있다. Tomcat 9 계열의 Java EE API는 주로 javax.*, Tomcat 10 이후 Jakarta EE API는 jakarta.*를 사용한다. Apache Tomcat 공식 migration 안내는 이 패키지 변경을 큰 비호환으로 설명하며 애플리케이션 재컴파일이 필요할 수 있다고 밝힌다. 변환 도구는 탐색과 임시 전환에 유용하지만 사용자 코드, 서드파티 라이브러리, JSP 태그, 직렬화 데이터의 호환을 대신 증명하지 않는다.
2026년 8월 9일 Tomcat 공식 migration 페이지는 현재 지원 계열로 9.0.x, 10.1.x, 11.0.x를 안내한다. 실제 선택은 현재 패치 릴리스, 보안 공지, 필요한 Servlet/JSP 사양, JDK 지원 범위를 출간·배포 시점에 다시 대조한다. 구버전 설정 파일 전체를 새 major의 conf에 덮어쓰지 않고 새 기본 설정에서 필요한 차이만 이식한다.
| 축 | 현재 | 후보 | 확인할 증거 |
|---|---|---|---|
| JDK | 서버 실제 버전 | 목표 LTS | class file, JVM 옵션, TLS provider |
| Tomcat | major·patch | 지원 patch | migration guide, 기본 설정 diff |
| Servlet API | javax 또는 jakarta |
목표 namespace | import, web.xml, taglib |
| Framework | Spring 등 실제 버전 | 호환 버전 | 공식 compatibility, 통합 테스트 |
| JDBC driver | 공용/앱 번들 | 검증 버전 | DB·JDK·pool 호환 |
| session | 직렬화 객체 | 새 classpath | 역직렬화·failover 테스트 |
WAR의 class file 수준은 javap -verbose 또는 빌드 설정으로 확인하고 서버 JVM과 대조한다. UnsupportedClassVersionError가 나면 JDK를 무작정 바꾸지 말고 빌드 target과 운영 표준을 함께 정한다.
실습 26 세 갈래 업그레이드 리허설
현재 유지, 동일 major patch upgrade, Jakarta 전환 세 경로를 표로 만든다. 각 경로에 변경 파일, 테스트, rollback 가능성, 세션·DB 호환, 중단 시간을 적는다. 한 번에 JDK·Tomcat major·framework·DB schema를 모두 바꾸는 경로는 원인 격리가 어려우므로 분리안을 함께 제시한다.