들어가며
Red Hat은 JBoss EAP(Enterprise Application Platform) 7.0을 release한 지 8년이 지난 2024년 2월 5일, JBoss EAP 8.0을 release했다.
JBoss EAP는 On-Premise, Cloud와 같은 다양한 환경에서 Java EE, Jakarta EE 애플리케이션을 배포, 관리하는 미들웨어 플랫폼으로, Clustering, Messaging 등의 기능을 필요한 경우에만 활성화 할 수 있는 모듈식 구조와 Standalone Mode를 하나의 프로세스로도 서비스 가능한 특성이 있어 Cloud Native한 특징을 가진다.
JBoss EAP 8.0은 Jakarta EE 10 스팩과 향상된 보안 기능을 지원하기 위해 출시되었으며, JBoss EAP 8.0은 UpStream Project 특징이 있는 오픈소스 Wildfly 27이상과 대응된다.
Wildfly 오픈소스 프로젝트에서 최신 사양을 선적용하고 검증하여 JBoss EAP에 반영함으로 다른 WAS(Web Application Server) 보다 앞서 최신 사양을 지원하며 더욱 높은 안정성을 보장한다.
JBoss EAP 7.0는 8.0와 비교하여 많은 차이점이 있지만, JBoss EAP 7.x 버전의 꾸준한 업데이트로 최신 버전 JBoss EAP 7.4.16와 JBoss EAP 8.0은 많은 부분이 유사하다. 따라서 현재 JBoss EAP 8.0 Documentation은 현대화 작업이 진행 중이기 때문에 JBoss EAP 8.0을 사용하기 위해서는 JBoss EAP 7.4.x 버전의 Documentation을 참고하면 도움이 될 수 있다.
이 글은 JBoss 7.0 버전과의 차이점을 중점으로, 신규 버전의 JBoss EAP에 대한 정보 제공을 통해 JBoss EAP 8.0을 사용하여 서비스를 개발·운영하고자 하는 분들에게 유용한 도움을 주고자 한다.
버전 별 주요 특징
WAS 운용에서 중요하게 고려해야 하는 것은 지원하는 JAVA 버전을 체크하는 것이다. 따라서 JBoss EAP 8.0을 설치 및 활용하려면 사전에 Application의 JDK 버전을 확인하는 과정과, Application이 javax 패키지가 아니라 jakarta 패키지를 사용했는지 확인하는 과정이 필요하다. 상용 WAS 중 아직 JDK 11 까지만 지원하는 제품이 많기 때문에 JBoss EAP 8.0은 JDK 11과 17을 지원 함으로 JDK 17로 개발을 진행했거나 진행할 계획이라면 좋은 선택지가 될 수 있다. 하지만 JBoss EAP 8.1 버전부터는 JDK 17만 호환될 계획임을 RedHat에서 공지하고 있다. 해당 내용을 참고하면서 버전 별 지원 스팩에 유의하여 적합한 WAS를 운용하는 것이 중요하다.
Life Cycle Duration
JBoss EAP 8.x 버전은 Long-life Product로 분류되어 RedHat의 Long-life Product Life Cycle 정책에 따라 정식 Release 이후 4년간의 Full Support, 3년간의 Maintenance Suuport, 3년에서 6년간의 Extended Life Support를 지원한다.
추가 및 변경 된 기능
1. Domain 모드 Naming 규칙 변경
Domain 모드에서 사용하는 주요 명칭이 변경되었다. 공학 분야에서 주로 통용되던 master와 slave의 명칭은 최근 서양 사회를 중심으로 논란이 되고 있어, 여러 제품에서 primary와 secondary와 같은 중립적인 명칭으로 대체되는 움직임을 보이고 있다. 이러한 흐름을 RedHat에서도 반영하고 있는 것으로 생각된다. 또한 blacklist와 whitelist의 명칭을 blocklist, allowlist로 대체하여 더 직관적으로 해당 명칭을 사용할 수 있게 하였다. 기존 JBoss EAP 6.x, 7.x 버전 Domain 모드를 사용하고 있다면 업그레이드할 때 주의가 필요하다.
2. Patch 방법 변경 및 추가
JBoss EAP 8.0부터 jboss-eap-installation-manager.sh 파일이 추가되었다. RedHat 공식 다운로드 페이지에서 jboss-eap-installation-manager.sh 파일을 다운로드 받아 해당 스크립트를 활용하여 JBoss EAP를 설치할 수 있다. 기존의 JBoss EAP 7.x 이하에서 사용하던 CLI 명령어 patch apply의 경우 installer update로 변경되었으며 CLI 명령어를 사용해 패치를 진행할 수 있다. 또한, 가능한 모든 방식으로 설치된 JBoss EAP에 있는 ${JBOSS_HOME}/bin/jboss-eap-installation-manager.sh 을 사용하여 패치를 진행할 수도 있다. JBoss EAP 8.x 버전이 되며 가장 달라진 점은 패치 방식이 Online 방식과 Offline 방식이 생겼다는 점 이다. 두 가지 방식 중 사용자가 원하는 방식으로 진행할 수 있다.
2.1 jboss-eap-installation-manager.sh 를 활용한 패치
2.1.1 Online 방식
JBoss EAP 신규 업데이트를 패치 파일을 직접 다운로드 하지 않고 온라인으로 업데이트 리스트를 확인하여 적용할 수 있게 기능이 추가되었다. 신규 업데이트 리스트를 확인하고 적용하기 위해선 인터넷 접속이 가능한 환경이어야 한다.
2.1.2 Offline 방식
로컬서버에 repository를 구축한 후, 해당 repository의 패치 파일을 활용하여 업데이트하는 방식입니다. 해당 방식으로 패치를 하기 위해선 JBoss EAP가 종료되어 있는 상태여야 한다.
2.1.3 복원 방법 (rollback)
진행되었던 패치 히스토리를 검색하여 원하는 시점의 Version으로 복원할 수 있다. 복원을 진행하기 위해선 JBoss EAP가 종료되어 있는 상태여야 한다.
2.2 CLI 명령어를 활용한 패치
2.2.1 Online 방식
JBoss EAP 7.x 버전에서 진행했던 패치 방식과 동일하게 CLI 명령어를 통한 패치도 가능하다. 다만 7.x 버전에서 사용되었던 patch 명령어가 deprecated 됨에 따라 installer 명령어를 사용해야 하다. Online 방식은 인터넷이 가능한 환경이라면 패치를 패치 파일 없이 적용할 수 있다.
2.2.2 Offline 방식
기존과 같이 패치 파일을 다운로드하여 적용하는 방법입니다. 앞서 설명대로 patch apply 대신 installer update 명령어를 사용해야 한다.
2.2.3 복원 방법 (rollback)
CLI 명령어로도 패치 롤백을 할 수 있다.
3. Picketbox, Elytron 으로 Migration
인증, 권한 부여, 암호화 기능을 하던 Picketbox가 JBoss EAP 8.0부터 deprecated 됨에 따라 Elytron으로 Migration을 진행해야 한다. RedHat에서 JBoss EAP 7.1부터 Picketbox에서 Elytron으로의 Migration을 권장해왔다. JBoss EAP 8.0에서 보안 설정과 관련한 Migration을 지원하는 elytron-tool.sh 스크립트는 ${JBOSS_HOME}/bin/ 경로에 위치하고 있고, 보안 설정에 대한 자세한 Migration 가이드는 RedHat 공식 Documentation 참고가 필요하다. Elytron 보안 사용의 장점 중 하나는 서버와 애플리케이션 전반에 걸쳐 일관된 보안 솔루션을 제공한다는 것이다.
4. TLSv1.3 Protocol 지원
JBoss EAP 8.0부터 Protocol TLSv1.3을 지원한다. 7.x 버전에 지원했던 보안 규칙 설정이(picktbox) 8.x 버전으로 업그레이드되면서 Elytron 으로 Migration 되었다. 따라서 SSL 인증서를 적용하기 위해선 바뀐 설정 방법으로 SSL 설정을 진행해야 하며, TLS 1.3 버전을 사용하기 위해선 Linux 8 이상, JDK 11 이상 버전을 가진 환경에 JBoss EAP가 설치되어야 한다. TLSv1.3 Protocol은 cipher-suite-names 옵션을 설정하여 활성화할 수 있고, 기본적으로 비활성화되어 있다. TLSv1.3 Protocol은 Elytron Subsystem에서 cipher-suite-names= “TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256” 와 같이 알고리즘을 설정해서 활성화할 수 있다. JDK 11을 사용하는 환경에서 TLS 1.3 요청 수가 매우 많은 경우 TLS 1.2에 비해 성능(처리량 및 응답 시간) 저하가 발생할 수 있기 때문이다. 최신 JDK 버전으로 업그레이드하면 성능이 향상될 수 있다.
5. JGroups 버전 업그레이드
jgroups 버전이 3.6.12.Final에서 5.2.18.Final으로 업그레이드되었다. 이는 JBoss EAP에서 jgroups subsystem 버전이 4.0에서 9.0으로 업그레이드됐음을 나타낸다. jgroups 업그레이드에 따른 주요 변경점은 프로토콜 버전 업그레이드이다. FD_SOCK, FD_ALL, VERIFY_SUSPECT, FRAG3 의 프로토콜이 FD_SOCK2, FD_ALL3, VERIFY_SUSPECT2, FRAG4 로 버전 업그레이드 되었고, 기존에 없던 RED 프로토콜이 추가되었다. FD_SOCK2는 한 개의 Thread를 사용하게 로직이 변경되어 세 개의 Thread를 사용하는 (1. 다른 노드에게 Ping 메시지를 보내 상태를 체크 2. Ping 메시지를 수신 받는다면 정상 상태 3. Ping 메시지를 받지 못한다면 의심 상태로 분류하여 VERIFY_SUSPECT2 프로토콜로 요청) FD_SOCK에 비교하여 더 적은 오버헤드를 갖는다. VERIFY_SUSPECT2 프로토콜은 충돌하는 두 개의 SUSPECT 이벤트를 한 번에 전송하게 변경되었는데, 기존에 충돌하는 두 개의 SUSPECT 이벤트를 개별적으로 전송하던 방식과 비교하여 빠른 처리 속도를 보여준다. 이외에도 추가된 RED 프로토콜과 FD_ALL3, FRAG4 프로토콜의 업그레이드로 클러스터링 기능의 신뢰성과 성능 향상을 기대할 수 있다.
6. Infinispan 웹 세션 선호도 옵션 및 affinity-cookie 설정
JBoss EAP 8.0에서 웹 세션 선호도 및 affinity-cookie 추가 옵션을 통해 더욱 효과적으로 로드 밸런싱을 할 수 있게 되었다. 웹 세션 선호도 옵션은 JBoss EAP 7.0 버전에서는 Primary-owner로만 고정되어 따로 설정할 수 없었고, JBoss EAP 7.3 이상부터 적용 가능했지만 옵션 초기에는 standalon-*.xml 파일 등 수동으로 설정해야 했으며, 이후 버전에서는 CLI를 통해서도 설정 가능했다. 하지만 JBoss EAP 8.0부터 WebConsole, CLI 두 가지 방법을 통해 설정이 가능하게 변경되었다. 따로 설정하지 않을 시 Default 설정은 Primary-owner이며 아래와 같이 네 가지의 선호도 옵션이 있다. 현재 운영 환경에 맞는 옵션을 선택하여 적용할 수 있다.
7. PROTOSTREAM Mashaller 추가
default cache container의 marshaller가 JBOSS에서 PROTOSTRAM으로 변경되었다. PROTOSTRAEM은 Google Protocol Buffer인 Protobuf을 마샬링 하기 위한 Java API이다. PROTOSTREAM은 JBOSS Marshalling와 비교하여 몇 가지 장점을 가지고 있다. 컴파일 동안 마샬링 스키마를 구축하여 더 적은 메모리 공간을 사용하여 효율적이며, reflection(반사)에 의존하지 않기 때문에 더 빠른 속도를 보여준다. 또한 임의 코드 실행 문제를 해결하고 Protobuf 스키마가 존재하는 메시지만 읽을 수 있는 등 향상된 보안 성능을 갖는다. 이전 JBoss EAP 7.x 버전에서는 JBOSS mashaller만 사용하기 때문에 mashaller에 대해 설정 및 검색하는 방법이 존재하지 않았지만, JBoss EAP 8.0부터 설정 및 검색이 가능해졌다. PROTOSTRAM mashaller가 기본 설정값이며 RedHat 권장 설정값이라서 변경이 필요한 경우는 검토가 필요하다. 해당 marshaller 옵션을 제거하면 marshaller=LEGACY로 설정이 된다. LEGACY는 JBoss EAP 7.3 이전 버전의 동작을 가지는 marshaller이므로 엔진의 동작이 달라질 수 있으니 mashaller 설정 변경에 주의를 해야 한다.
8. WebConsole non-heap memory 모니터링 기능 추가
JBoss EAP 8.0은 Heap Memory와 마찬가지로 Non-Heap Memory도 모니터링 할 수 있도록 WebConsole에 Non-Heap Memory 그래프가 추가되었다. WebConsole을 사용하는 운영 환경이라면 더욱 많은 정보를 얻을 수 있다.
마치며
IT 산업은 클라우드 기술의 발전으로 인해 기존의 3-Tier 인프라 구조에서 클라우드로 많은 서비스가 마이그레이션 되면서 큰 변화를 겪고 있다. 이에 따라 MSA(Microservices Architecture)와 Serverless와 같은 기술들이 주목 받고 있으며, 유연성과 확장성을 제공하여 현대적인 애플리케이션 개발의 핵심 요소로 자리 잡고 있다.
그럼에도 불구하고, WEB/WAS(Web Application Server)는 3-Tier 인프라뿐만 아니라 클라우드 환경에서도 여전히 중요한 역할을 하고 있다. WEB/WAS는 안정성, 성능, 보안 측면에서 오랜 기간 검증된 솔루션으로, 서비스 및 애플리케이션을 안정적으로 지원하다. JBoss EAP는 하이브리드 클라우드 및 멀티 클라우드 전략을 통해 기존 인프라와의 원활한 통합을 가능하게 하여 클라우드 전환을 고려하는 기업들에게 중요한 이점을 제공한다.
JBoss EAP의 다양한 기능과 이점을 이해하면, 이를 바탕으로 효과적인 인프라 설계 및 운영 전략을 수립할 수 있다. 이 리포트가 신규, 차세대 프로젝트에서 WAS 도입 및 전환을 계획하는 Infra 담당자들에게 유용한 지침이 되기를 바란다. 앞으로도 WEB/WAS의 미래 발전 방향과 최신 기술 트렌드에 대한 정보를 제공하는데 노력하겠다.
# References
- https://access.redhat.com/support/policy/updates/jboss_notes
- https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/8.0/html/release_notes_for_red_hat_jboss_enterprise_application_platform_8.0/index
- https://access.redhat.com/articles/112673
- https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.0/html/7.0.0_release_notes/index
- https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.4/html/7.4.0_release_notes/index
- http://www.jgroups.org/manual5/#_verify_suspect
- https://github.com/belaban/JGroups
- https://docs.wildfly.org/wildfly-proposals/clustering/web/WFLY-13904_ProtoStream_support_for_distributed_web_applications.html
민준영 프로
소프트웨어사업부 OSS사업팀
에스코어에서 미들웨어 엔지니어로 근무하고 있으며, 삼성 그룹사 및 국내 주요 대기업, 공공기관의 미들웨어 설계 및 기술지원을 담당하고 있다.
Register for Download Contents
- 이메일 주소를 제출해 주시면 콘텐츠를 다운로드 받을 수 있으며, 자동으로 뉴스레터 신청 서비스에 가입됩니다.
- 뉴스레터 서비스 가입 거부 시 콘텐츠 다운로드 서비스가 제한될 수 있습니다.
- 파일 다운로드가 되지 않을 경우 s-core_mktg@samsung.com으로 문의해주십시오.