JEUS 8.6
본 장에서는 JEUS 8.6 릴리즈에서 추가된 새로운 기능에 대해 간략히 설명한다.
1. 신규 기능
JEUS 8.6에서는 Jakarta EE 8의 주요 기능을 완벽히 지원함으로써, 개발 생산성을 획기적으로 향상 시켰다. 또한 Jakarta EE 8에서 향상된 여러 기술을 사용하여 보다 안정적인 환경을 제공한다.
1.1. Server
-
NodeManager 기능 추가
-
기존 HostManager를 제거하고 안정화된 NodeManager를 도입하였다.
-
-
start-node/stop-node 기능 추가
-
Node 단위로 서버를 기동 및 정지할 수 있는 jeusadmin 명령이 추가되었다.
-
-
CloudServer 기능 추가
-
CloudServer 기동용 startCloudServer 스크립트 및 관련 기능이 추가되었다.
-
-
Managed Server 단독 기동 시 NodeManager 모니터링 관리를 받을 수 있는 기능 추가
-
jeus.server.nodemanager.monitoring-standalone-ms 프로퍼티를 true로 하거나 기동 시 -monNM 옵션을 추가하고 기동 할 경우 NodeManager 모니터링 관리를 받을 수 있도록 기능이 추가되었다.
-
-
임시 암호 파일에 서버 구분을 Launcher PID로 하는 기능 추가
-
jeus.server.identifies-by-launcher-pid 프로퍼티를 true로 할 경우 임시 암호 파일에 서버 구분을 Server PID 에서 Launcher PID로 변경하는 기능이 추가되었다.
-
-
애플리케이션 배포 실패 시 서버를 종료하는 기능 추가
-
jeus.server.boot.all-apps-running 프로퍼티를 true로 설정할 경우 애플리케이션 배포 실패 시 STANDBY가 아닌 SHUTDOWN으로 종료하는 기능이 추가되었다.
-
-
nodes.xml 파일 동기화 여부를 출력하는 기능 추가
-
jeus.filetransfer.config.log.level 프로퍼티를 CONFIG 레벨로 변경할 경우 nodes.xml 파일 동기화에 대한 로그가 출력되도록 추가되었다.
-
-
NodeManager를 통해 서버 기동 시 MS 기동 스크립트 수행 전 shell 스크립트를 수행하는 기능 추가
-
Nodemanager 부팅 스크립트에 jeus.nodemanager.use.msboot 프로퍼티를 true로 할 경우 서버 기동 시 스크립트를 통해 기동하는 기능이 추가되었다.
-
-
잘못된 jeus property 로그 중 무시할 property 지정 기능 추가
-
jeus.ignore.check.properties 옵션 통해 잘못된 property 지정하여 무시할 수 있는 기능이 추가되었다.
-
1.2. Servlet
-
HTTP/2 보안 취약점 방어 로직 추가
-
MadeYouReset 외 HTTP/2 보악 취약점 방어 로직이 추가되었다.
-
-
<added-classpath> 기능 확장
-
디렉터리 path 지정 시, 디렉터리 내 jar 파일을 web module classloader에 올리도록 기능이 추가되었다.
-
-
request URL에 %nn이 디코딩되지 않도록 하는 옵션 추가
-
request URL에 %nn 인코딩 값이 들어올 경우, %nn이 디코딩되지 않도록 하는 옵션이 추가되었다.
-
jeus.servlet.request.doNotDecodePercentInUrl 옵션이 추가되었다.
-
-
hot swap 실패 시 auto-reload 수행하지 않는 옵션 추가
-
hot swap 실패 시 auto-reload를 수행하지 않는 옵션이 추가되었다.
-
jeus.servlet.loader.ignoreAutoReloadAfterHotSwapFailed 옵션이 추가되었다.
-
-
Partitioned Cookie 지원 옵션 추가
-
cookie가 secure일 경우에만 옵션 추가 시 Partitioned attribute가 붙는 기능이 추가되었다.
-
-
ThreadInfo에 한 시간 평균 사용량과 MAX 사용량 표시 기능 추가
-
Average thread count (1h): 한 시간 동안 평균 사용량 확인 기능이 추가되었다.
-
Real max thread count: threadpool max 사용량 확인 기능이 추가되었다.
-
-
Compression 기능 추가
-
Compression 기능이 추가되었으며 jeus-web-dd.xml의 content-encoding으로 설정할 수 있다.
-
jeus-web-dd.xml의 content-encoding으로 설정할 수 있다.
-
-
websocket session의 RemoteEndpoint.Async를 사용하여 메시지를 쓰는 경우 메시지를 저장할 Queue의 최대 크기를 제한하는 기능 추가
-
jeus.websocket.maxMessagePartQueueSize 옵션이 추가되었다.
-
-
tld 파일 스킵 기능 추가
-
jeus.servlet.jsp.JarScannerImpl.scanTldListenerExcept property가 추가되었다.
-
jeus-web-dd.xml의 property 설정으로 적용할 수 있다.
-
-
Content-Type 응답 헤더 기능 추가
-
jeus.servlet.response.defaultContentType 옵션이 추가되었다.
-
1.3. SessionServer
-
Redis Sentinel 기능 지원
-
Redis Sentinel이 지원되도록 추가되었다.
-
-
standard edition에 Redis 지원
-
standard edition 라이선스 환경에서 Redis가 지원되도록 추가되었다.
-
-
Hazelcast Cluster 기능 지원
-
Hazelcast Cluster 연동 시 다수의 cluster-member(N개)와 연동할 수 있는 기능이 추가되었다.
-
-
Redis 사용 시 local session을 사용하지 않는 옵션 추가
-
redis-use-local-session 옵션이 추가되었다.
-
domain.xml의 session-storage 하위 property에 설정하여 적용할 수 있다.
-
-
Session Sticky Routing key를 설정하는 기능 추가
-
기본값 Domain/Server로 적용되던 Sticky 값을 임의의 값으로 지정할 수 있는 기능이 추가되었다.
-
1.4. IO
-
cipher-suite 입력으로 OpenSSL에서 제공하는 Cipher String 방식 일부 도입
-
OpenSSL에서 제공하는 필터링 방식인 cipher string(alias, operation) 기능이 추가되었다.
-
-
SSL 연결 시 DirectByteBuffer 대신 HeapByteBuffer를 사용할 수 있도록 옵션 제공
-
jeus.io.ssl.useHeapByteBuffer 적용 시 HeapByteBuffer로 할당할 수 있는 기능이 추가되었다.
-
-
세부 그룹별 조회가 가능하도록 group 옵션 제공
-
show-current-scf-view 명령어에 -group 옵션을 추가하여 세부 그룹별 조회가 가능하도록 기능이 추가되었다.
-
1.5. JDBC
-
Database listener가 down 되었을 경우 datasource의 유효성 체크 기능 추가
-
jeus.jdbc.monitoring.check-db-server-port-period 옵션이 추가되었다.
-
-
서버 기동 시 bind 되어있는 datasource에 대해 초기화 작업을 할 수 있는 기능 추가
-
jeus.jdbc.connection-pool.initialization-on-boot 옵션이 추가되었다.
-
-
datasource의 getConnection 요청 없어도 masterServer에서 Database를 감지하여 failback을 할 수 있는 기능 추가
-
jeus.jdbc.config.auto-failback-period 옵션이 추가되었다.
-
-
datasource connection pool max 임계치 모니터링 옵션 추가
-
getConnection 요청을 보냈을 때 connectionpool의 max 값만큼 [CPOOL-0034] 로그가 출력되도록 로그가 추가되었다.
-
jeus.jdbc.log-connection-active-ratio 옵션이 추가되었다.
-
-
databaseName을 serviceName으로 쓸 수 있는 기능 추가
-
jeus.jdbc.config.database-name-as-service-name 옵션이 추가되었다.
-
jeus.jdbc.config.exclude.database-name-as-service-name 옵션이 추가되었다.
-
1.6. WebAdmin
-
WebAdmin UI 개선
-
새로운 UI가 적용 되었다.
-
-
WebAdmin context path를 변경하는 기능 추가
-
jeus.webadmin.ui.contextpath 프로퍼티 통해 context path를 변경하는 기능이 추가되었다.
-
-
WebAdmin 로그인 유지 기간을 설정하는 timeout 기능 추가
-
Master Server에 webadmin.auth.refresh.seconds 옵션을 추가하여 WebAdmin 로그인 유지 기간을 설정하는 기능이 추가되었다.
-
-
게스트 계정에 ServerStarterRole, ConfigurationReadOnlyRole 권한 부여하여 서버 기동이 가능하도록 기능 추가
-
게스트 계정에 ServerStarterRole, ConfigurationReadOnlyRole 권한을 부여하여 버튼을 통해 매핑한 서버 기동/종료가 가능하도록 기능이 추가되었다.
-
-
WebAdmin 타이틀 변경 기능 추가
-
webadmin.web.browser.title 프로퍼티를 통해 사용자가 WebAdmin 타이틀을 변경하는 기능이 추가되었다.
-
-
Monitoring 탭 내 Thread에서 서버 별 Thread Dump 출력 기능 추가
-
Thread Monitoring에서 Thread Dump를 출력하는 버튼이 추가되었다.
-
-
Monitoring 탭 내 Thread에서 Thread Pool 선택 시 즐겨찾기 기능 추가
-
Thread Monitoring에서 Thread Pool을 선택할 경우 드롭박스에 자주 사용하는 리스트를 추가하는 즐겨찾기 기능이 추가되었다.
-
2. 변경 기능
2.1. Servlet
-
xml parsing schema에 classpath 추가
-
tomcat과 동일하게 xml 상에 classpath:org/spring/*.xsd와 같이 classpath를 인식하도록 수정하였다.
-
-
특정 옵션이 annotations 혹은 web-fragment와 web.xml과 충돌 시, web.xml 값이 가장 높은 우선순위를 가지도록 변경
-
<load-on-startup>, <async-supported>, <enabled>, <run-as> 옵션이 annotations 혹은 web-fragment와 web.xml과 충돌 시, web.xml 값이 가장 높은 우선순위를 가지도록 변경하였다.
-
-
Forwarded와 X-Forwarded 헤더 처리를 위한 필터 제공
-
ForwardedFilter에서 처리할 수 있도록 <init-param> 파라미터가 추가되었다.
-
-
use-nio 기본값 변경
-
WebtoB connector 추가 시 use-nio 기본값을 false로 변경하였다.
-
2.2. SessionServer
-
[R_SESSION-6100], [R_SESSION-6102] 로그 레벨 변경
-
[R_SESSION-6100], [R_SESSION-6102] 로그 레벨이 INFO에서 FINE으로 변경되었다.
-
-
Redis 8 버전 호환을 위한 라이브러리 업데이트
-
Reids 8 버전 호환을 위해 라이브러리가 lettuce 6 버전으로 변경되었다.
-
3. 버그수정
3.1. Server
-
library path 옵션 사용 시 기동 실패 현상 수정
-
java.library.path 옵션 사용 시 공백이 포함된 경우 기동 실패하는 현상이 수정되었다.
-
-
log rotation에 valid-size 설정 시 정상 동작하지 않는 현상 수정
-
log rotation 옵션으로 valid-size 사용 시 로그 파일이 3GB가 초과할 경우 동작하지 않는 문제가 수정되었다.
-
-
Ant Task 통한 서버 기동 시 기동 실패 현상 수정
-
Ant Task 사용하여 Boot/Down 시 서버가 정상 동작하지 않는 현상이 수정되었다.
-
-
preceding-command 비정상 동작 수정
-
preceding-command가 작동하지 않는 버그가 수정되었다.
-
-
graceful 서버 종료 시 서버 상태가 FAILED되는 현상 수정
-
timeout 시간 내 리소스가 정리되지 않을 경우 서버 상태가 FAILED되는 현상이 수정되었다.
-
-
NodeManager 통해 서버 기동 시 masterurl 노출 현상 수정
-
NodeManager를 통해 서버를 기동할 경우 booting arguments 내 masterurl 값이 노출되는 문제가 수정되었다.
-
-
list-nodes command 사용 시 간헐적으로 멈추는 현상 수정
-
이중화 환경에서 list-nodes command 사용 시 15분간 멈추는 현상이 수정되었다.
-
-
nodes.xml 파일 동기화가 되지 않는 현상 수정
-
이중화 환경에서 동기화 시 domains 디렉터리가 없는 경우 nodes.xml은 동기화 하지 않아 서버 기동이 실패하는 현상이 수정되었다.
-
-
노드매니저 재기동 시 이미 기동중인 master를 재기동하여 exception이 발생하는 현상 수정
-
노드매니저 재기동 시 master가 비정상 종료되지 않고 이미 기동 중임에도 서버 기동을 시도하여 exception이 발생하는 현상이 수정되었다.
-
-
logback 옵션에 따라 제우스 로거 설정을 초기화하여 로그 출력 되지 않는 문제 수정
-
logback의 resetJUL로 인해 제우스 로그가 초기화되는 상황에서만 startCloudServer 기동 스크립트에 jeus.logging.prevent.logback.resetJUL=true 옵션을 추가하여 jeus 로그가 정상 출력되도록 수정되었다.
-
-
라이브러리 설치 시 java.lang.IllegalArgumentException 발생 현상 수정
-
install-library 설치 시 java.lang.IllegalArgumentException 에러가 발생하지 않고 정상 설치되도록 수정되었다.
-
3.2. IO
-
SCF HYBRID 시 서버가 내려갔다고 인지하기 전에 기동 시 NPE가 발생하는 현상 수정
-
HYBRID 시 서버가 내려갔다고 인지하기 전에 기동하면 NPE가 발생하는 문제가 수정되었다.
-
-
SCF 초기화 중 다른 서버가 STOPPED 상태를 보냈을 때 NPE가 발생하는 현상 수정
-
SCF 초기화 중에 Leader가 결정되지 않은 상태에서 다른 서버가 STOPPED 상태를 보냈을 때 NPE가 발생할 수 있는 문제가 수정되었다.
-
-
SSL 연결 중 BUFFER_OVERFLOW의 복호화에 대해 올바른 수행을 하도록 수정
-
SSL record가 한번에 수신되지 않을 때 BUFFER_UNDERFLOW 후 나머지 SSL record가 정상적으로 복호화되도록 수정되었다.
-
-
Selector 교체 로그가 지속적으로 쌓이는 현상 수정
-
Selector 비정상적으로 교체되는 현상이 수정되었다.
-
-
부팅 Thread에서 연결 완료를 무한히 기다리는 현상 수정
-
설정된 detection-timeout 이상으로는 기다리지 않도록 수정되었다.
-
3.3. JDBC
-
connection-pool-info 명령어 수행 시 NPE가 발생하는 현상 수정
-
connection-pool-info 명령어 수행 시 동기화가 고려되지 않아 NPE가 발생하는 현상이 수정되었다.
-
-
Datasource의 Id/Password 동적 변경 시 Hang이 걸리는 현상 수정
-
Id/Password 동적 변경 시 Hang이 걸리는 현상이 수정되었다.
-
vendor를 설정하지 않은 Datasource의 password 변경 시 Hang이 걸리지 않고 변경되도록 수정되었다.
-
-
Datasource의 user, password를 설정하지 않고 property에 설정했을 경우 NPE가 발생하는 현상 수정
-
Datasource의 user, password를 설정하지 않고 property에 설정했을 때 test-data-source-config 수행 시 NPE가 발생하는 현상이 수정되었다.
-
-
DB2 사용 시 commit(), rollback() 전에 close 할 경우 에러가 발생하는 현상 수정
-
DB2 autocommit이 false인 경우, commit(), rollback() 전에 close 요청이 들어오면 에러가 발생하는 현상이 수정되었다.
-
-
Connection Pool size 동적 변경 후 업데이트 시 NPE가 발생하는 현상 수정
-
connection pool의 min, max, step size 동적 변경 후 getConnection 시 NPE가 발생하는 현상이 수정되었다.
-
3.4. JMS
-
JMS Engine Shutdown 과정 시 Exception이 발생하는 현상 수정
-
JMS Engine Shutdown 과정에서 이미 Close 된 Engine에 메시지를 보내려고 해 Exception이 발생하는 현상이 수정되었다.
-
-
JMS Destination 정보 조회 시 옵션에 따라 Remaining Messages가 다른 현상 수정
-
Message Fail back 이후에 Destination 조회 시 -n 옵션에 따른 Remaining Messages가 다르게 count 되는 현상이 수정되었다.
-
-
JMS Engine 부팅 시 local address구분이 되지 않는 현상 수정
-
JMS Engine 부팅 시 일부 목록에서 service channel이 누락되어 local client를 인식하지 못하는 현상이 수정되었다.
-
-
서버 재기동 후 JMS Messages 복구 시 순서 보장이 되지 않는 현상 수정
-
서버를 재기동 시 Messages가 순서에 맞지 않게 들어오는 현상이 수정되었다.
-
-
간헐적으로 JMS Messages 이동이 안되는 현상 수정
-
Destination간 혹은 Destination과 JEUSMQ_DLQ간 메시지 이동이 간헐적으로 실패하는 현상이 수정되었다.
-
-
간헐적으로 Consumer 연결이 종료되지 않는 현상 수정
-
Consumer 연결 종료를 요청해도 특정 메소드 문제로 종료되지 않는 현상이 수정되었다.
-
-
Max Pending Limit 비정상 동작 수정
-
JMS Resource 내 Max Pending Limit 기능이 정상 동작하지 않아 롤백 메시지가 비정상적으로 출력되는 문제가 수정되었다.
-
3.5. Servlet
-
AsyncServlet 스펙 수정
-
AsyncServlet Spec에 맞지 않는 부분이 수정되었다.
-
-
EL에 맞지 않는 구문 사용 시 NPE가 발생하는 문제 수정
-
EL 표현식이 parameter의 value로 사용되고, 해당 value가 null일 때 NPE가 발생하는 문제가 수정되었다.
-
-
META-INF/MANIFEST.MF에 Class-Path 설정 시 빈 디렉터리가 생성되는 문제 수정
-
META-INF/MANIFEST.MF에 Class-Path 설정 시 빈 디렉터리 생성되는 문제가 수정되었다.
-
-
web.xml 2.3에서 taglib 사용 시 deploy가 되지 않는 문제 수정
-
web.xml 2.3에서 taglib 사용 시 deploy가 되도록 수정되었다.
-
-
ipv6 환경에서 Webtob가 재연결되지 않는 문제 수정
-
ipv6 환경에서 jeus-webtob 간 재연동 시 재연결이 되지 않는 문제가 수정되었다.
-
-
Ajp13에서 SocketTimeoutException 발생하는 문제 수정
-
웹서버가 empty packet을 보내는 경우 EOF로 판단하도록 수정되었다.
-
-
Cookie 사용 시 스펙에 맞게 동작하도록 수정
-
Request cookie의 domain이 첫글자에 숫자와 영문자를 허용하도록 수정되었다.
-
cookie 버전이 1인 경우 sameSite 적용이 되도록 수정되었다.
-
-
X-Forwarded-Host 헤더에 value가 하나 이상일 경우 NumberFormatException 발생 수정
-
X-Forwarded-Host 헤더에 하나 이상의 value가 들어올 경우 첫 번째 것을 선택하도록 수정되었다.
-
-
특정 Async 요청 처리 시 complete() 호출하지 않는 문제 수정
-
앱에서 비동기 요청이 동작하는 thread가 지정한 timeout 보다 오래 멈춰있을 때, 서블릿 컨테이너에서 정상적으로 complete()를 호출하지 않는 버그가 수정되었다.
-
Async Servlet을 dispatch 하지 않는 경우 WebtoB Connection이 reconnecting으로 남는 문제가 수정되었다.
-
-
request에 문제가 있을 때 read event를 끌 수 있도록 수정
-
request에 문제가 있을 때 다른 thread에서 에러 메시지를 쓰는데 exception 발생 시 read event를 끌 수 있도록 수정되었다.
-
-
default content type 옵션이 적용되지 않는 문제 수정
-
response의 getWriter 및 characterEncoding관련 api를 호출하지 않고도 default content type이 적용되도록 수정되었다.
-
-
wjp로 connection:close인 요청이 들어 올 경우 response가 connection:keep-alive로 나가는 문제 수정
-
Webtob connector를 통해 connection 헤더 값이 close인 요청이 들어 올 경우 response가 connection:keep-alive로 나가는 문제가 수정되었다.
-
-
Selector thread 과점유 현상 수정
-
Selector thread가 과점유할 수 있는 문제가 수정되었다.
-
-
Async 통한 websocket 사용 시 OOM 발생 현상 수정
-
비정상적인 websocket client가 message를 읽지 않아 OOM이 발생하는 현상이 수정되었다.
-
-
wjp-websocket 사용 시 재 연결 안 되는 현상 수정
-
wjp-websocket upgrade 이후, upgrade protocol 통신이 정상적으로 종료되거나 중간에 문제가 있을 경우 연결을 맺지 못 하는 문제가 수정되었다.
-
-
SSL 통신 중 tag mismatch와 같은 SSLException 로그가 발생하는 현상 수정
-
간헐적으로 버퍼가 오염되어 복호화 작업 중 오류가 발생하는 문제가 수정되었다.
-
-
HTTP/2 MadeYouReset (CVE-2025-8671) 취약점 해결
-
클라이언트가 다량의 Window Update Frame을 보낼 수 있는 취약점 해결
-
-
setHeader에서 content-length 설정 시, Transfer-encoding: chunked와 Content-Length 둘 다 출력되는 현상 해결
-
setHeader에서 content-length를 설정하는 경우 Transfer-encoding: chunked와 Content-Length 둘 다 출력되는 현상을 해결하였다.
-
3.6. SessionServer
-
failover을 위해 backup에서 local로 upgrade하는 과정에서 primaryServer가 null로 되는 문제 수정
-
local session에서 primary server가 null이 되지 않도록 수정되었다.
-
-
Hazelcast cluster 연동 시, session의 MaxInactiveInterval 값이 0일 때 다른 서버에서 session 요청 시 발생하던 HazelcastSerializationException 문제 수정
-
session의 MaxInactiveInterval이 0인 경우 클러스터 간 세션 직렬화 과정에서 예외가 발생하던 현상을 해결하여, 다른 서버에서 요청 시 오류가 발생하지 않도록 수정되었다.
-
-
Hazelcast와 연결되지 않은 상황에서 session 호출 시 NPE 현상 수정
-
hazelcast와 연결되지 않은 상황에서 session 호출시 local에서 세션이 생성되도록하여 NPE 문제가 수정되었다.
-
-
context-path에 따른 SerializationException: Deserialize session attribute failed 발생 현상 수정
-
context-path의 끝에 / 없이 request 시 exception 발생하지 않도록 수정되었다.
-
-
primary server로 session update 실패 시 내부적으로 보유하던 session을 지우지 못하는 현상 수정
-
primary server로 session update 실패 했을 경우 보유한 세션을 삭제하도록 수정되었다.
-
-
Redis server event log가 다량 출력되는 문제 수정
-
jeus.session.redis.connection 로그 레벨을 ALL 설정 시 출력, OFF 설정 시 미출력되도록 수정되었다.
-