Tomcat 10.1.42 Release Note 요약 및 정리
안녕하세요
이번 블로그 내용은 Tomcat 10.1.42 릴리즈 내용 정리를 해보도록 하겠습니다.
-
tomcat에서 모듈 네임스페이스 추가
기존 java:comp 네임스페이스와 유사한 java:module 네임스페이스를 추가했습니다.
- 개요
java:comp와 관리 방식이나 사용 문법은 동일하지만, 그 범위만 애플리케이션 전체가 아닌 ‘모듈 단위’로 좁혀진 것이라고 이해하면 됩니다.
기존 개발자들이 별도의 공부 없이도 바로 적응할 수 있도록 설계된 것입니다.
- 개선사항
Jakarta EE / Java EE 표준은 java:comp, java:module, java:app, java:global 네임스페이스를 구분해서 정의해요.
풀스택 EE 서버(JBoss, WildFly, GlassFish 등)에서 제공하는 예제 코드나 라이브러리들은 java:module을 사용하는 경우가 많습니다.
java:module을 쓰면 코드를 다른 EE 서버로 옮길 때 호환성이 좋아집니다.
코드에서 조회 시
| // 기존 방식
// 새 네임스페이스 (동일 동작)
|
-
HTTP 요청 파라미터 개수 제한 기능 추가
- 개요
요청경로(path)에 파라미터를 붙이는 방식중 ;(세미콜론)을 구분자로 쓰는데,
예시)
http://example.com/app/list;category=book;id=123
예전 톰캣은 경로 안에 ;가 들어오면 첫 번째 세미콜론까지만 해석하고,
그 뒤에 오는 추가 파라미터들은 무시하거나 전부 문자열로만 처리했습니다.
- 개선사항
이제 톰캣은 세미콜론(;)으로 구분된 여러 개의 매개변수를 모두 인식하고 처리할 수 있습니다.
예를 들어 이런 URL이 있을 때,
http://example.com/app/list;category=book;id=123;sort=asc
서블릿에서 HttpServletRequest.getParameter(“category”), getParameter(“id”), getParameter(“sort”) 를 호출하면 각각 book / 123 / asc 가 정상적으로 나옵니다.
-
톰캣 매개변수 개수 제한
- 개요
톰캣에서 매개변수 개수 제한: HTTP 요청의 매개변수 개수를 제한하는
ParameterLimitValve를 추가하여 보안을 강화했습니다.
- 개선사항
ParameterLimitValve는 HTTP 요청에서 넘어오는 파라미터(쿼리·폼·multipart 항목 등)의 ‘개수’를 URL별로 제한해 과도한 리소스 소모나 DoS를 막고,
제한 초과 시엔 400 응답으로 차단하는 톰캣의 새 Valve입니다.
⦁ 설정방법
conf/context.xml
<Context>
|
WEB-INF/parameter_limit.config:
/api/.*=200
|
위 설정이면
– /api/* 최대 200개 파라미터 허용
– /admin/.*=50 요청 파라미터 최대 50개만 허용
– /upload/.* = 40,10,2048 요청 파라미터 최대 40개, multipart 파트 최대 10개, 각 파트의 헤더 최대 2048 bytes (2KB) 제한
-
Rewrite map 파일에서 라인 끝 주석 허용
- 개요
예전 Tomcat에서는 맵 파일의 각 줄에 주석을 달 수 없었습니다.
주석(#) 넣으면 Tomcat이 파싱하다가 에러 나거나 잘못 인식해 버렸습니다.
그래서 설명을 적을 수 없으니, 긴 매핑 파일을 관리할 때 “이 줄은 왜 있는지, 무슨 용도인지” 알기 어려웠습니다.
- 개선사항
텍스트 형태의 리라이트 맵(rewrite map) 파일에서 줄 끝에 주석을 달 수 있게 되어 가독성이 높아졌습니다.
예시)
$ vi url.map
/old-page1 /new-page1 # 캠페인 종료로 새 주소로 리다이렉트
|
-
TaskQueue 리팩토링
# RetryableQueue란?
큐에 넣은 작업(Task)을 실패 시 다시 시도(retry)할 수 있는 기능을 가진 큐입니다.
단순히 FIFO(First-In-First-Out) 큐가 아니라 실패 처리, 우선순위, 재시도 로직까지 내장할 수 있습니다.
- 개선사항
파일 처리 개선: 텍스트 형태의 리라이트 맵(rewrite map) 파일에서 줄 끝에 주석을 달 수 있게 되어 가독성이 높아졌습니다.
-
Multipart 요청 제어 강화
Connector에 새로운 옵션 인 maxPartCount와 maxPartHeaderSize 를 추가하여 파일 업로드와 같은 멀티파트 요청을 더 세밀하게 제어할 수 있습니다.
maxPartCount : 멀티파트 요청에서 허용되는 부분(part) 수 최대치
maxPartHeaderSize: 각 부분의 헤더 최대 크기(byte)

출처: https://tomcat.apache.org/tomcat-11.0-doc/config/http.html
⦁ 설정방법
server.xml
<Connector port="8080"
|
-
JSP 컴파일 실패 시 재컴파일 대상(reload)으로 정확히 마킹
/hello.jsp 문법 오류 → 컴파일 실패 → 오류 페이지 반환
JSP 파일 수정 → 다음 요청 시 Jasper가 자동으로 다시 컴파일 시도
수정 사항이 반영되어 정상 실행 가능
-
기타사항
의존성 업데이트
– 내부적으로 사용하는 여러 라이브러리들을 최신 버전으로 업데이트했습니다.
- Tomcat Native: 2.0.9
- Apache Commons FileUpload: 1.6.0
- EasyMock: 5.6.0
- Checkstyle: 10.25.0
버그 수정 및 사소한 개선
– 저장된 요청의 직렬화 문제, 관리자 웹 애플리케이션의 오류 보고 기능 개선 등 다양한 버그를 수정하고 자잘한 기능을 개선했습니다. 또한 일본어 번역도 개선되었습니다.
이번 10.1.42 릴리스는
새로운 기능 보다는 운영중에 일어 날수 있는 사고에 대한 예방적인 측면이 더 돋보이는 릴리즈였네요.
글 읽어 주셔서 감사합니다.
자유롭게 댓글을 달아주세요! 언제나 환영합니다.
기타 문의: info@neoclova.co.kr
네오클로바 기술블로그 홈 바로가기: https://neoclova.net
네오클로바 홈페이지: http://neoclova.co.kr
