인사이트

인사이트리포트

디지털프렌스포메이션 최신 정보 및 트렌드를 제공합니다.

SW 테크놀로지

Java EE에서 Jakarta EE로의 전환

2021.09.01이창명
다운로드

자바 기술자라면 Java EE(Java Platform, Enterprise Edition) 또는 J2EE(Java 2 Platform, Enterprise Edition)를 들어봤을 것이다. 자바를 이용한 서버 개발 플랫폼으로 한 때 엔터프라이즈 자바 기술을 선도하며 막강한 영향력을 발휘했지만 기술 변화와 시장 요구에 제때 대응하지 못하면서 현재는 명맥만 유지하는 암울한 상황에 처해있다. 그럼에도 불구하고 자바EE는 가장 성공적인 상업용 표준 플랫폼의 하나이며 대부분의 웹 애플리케이션 서비스를 위한 미들웨어 기술로 꾸준히 사용되고 있다.

2018년 자바EE는 자카르타(Jakarta)EE로 명칭을 바꾸고 새로운 변화에 나섰다. 본 아티클에서는 오픈소스 기반으로 변경된 자카르타EE의 현재 모습을 살펴보고 미래를 전망해보겠다.

 

 

Java EE(Java Platform, Enterprise Edition)

자바EE는 1999년 썬 마이크로시스템즈가 J2EE(Java 2 Enterprise Edition) 명으로 발표한 분산 애플리케이션 개발 목적의 산업 표준 플랫폼이다. 기업용 애플리케이션을 개발·실행하기 위한 기술과 환경을 제공하며 서블릿(Servlet), JSP, EJB, JDBC, JNDI, JMX, JTA 등의 알려진 기술을 포함하고 있다. 자바EE의 주요 목적은 특정 운영체제와 미들웨어에 종속되지 않고 정보 교환 및 애플리케이션 호환이 가능한 플랫폼을 제공하는 것이다.

자바EE의 기술 사양은 자바SE(Java Platform, Standard Edition)와 동일하게 자바 커뮤니티 프로세스(Java Community Process, JCP)의 표준화 과정을 통해 만들어진다. 새로운 기술 요건들은 자바 스펙 요구서(Java Specification Request, JSR)라는 표준 명세로 제안되며 해당 명세가 구현될 수 있음을 증명하는 참조 구현(Reference Implementations; RI)과 구현을 검증할 수 있는 기술 호환성 키트(Technology Compatibility Kits; TCK)가 제공된다. 이러한 명세들이 모여서 하나의 자바EE 버전이 정의되며 각 벤더들은 해당 명세를 구현하여 호환 구현(Compatible Implementations, CI)을 만든다. 이렇게 만들어진 호환 구현 제품이 웹 애플리케이션 서버(Web Application Server, WAS)이며 대표적으로 글래스피시(GlassFish), 제이보스(JBoss) EAP, 오픈 리버티(Open Liberty), 파야라(Payara), 웹로직(WebLogic), 와일드플라이(Wildfly) 등의 제품이 있다.

 

그림 1 자바EE 플랫폼 사양 다이어그램입니다. Web Profile 내에 Servlet, JSP, JSF, CDI, EJB, JTA, JPA, Beas Validation이 있습니다. 그 외에 JAX-WS, JAX-RS, JASPIC, JNDI, JAX-RPC, JAXB, JACC, RMI, JAXR, JMS, JCA, DEPLOY., SAAJ, JAAS, JavaMail, MGMT.이 있습니다.

 

자바EE는 출시 초창기에 기업용 자바 플랫폼이라는 새로운 생태계를 열며 큰 성과를 이뤘지만 현재는 상업용 플랫폼의 한계와 스프링 프레임워크(Spring Framework) 등 오픈소스 SW의 발전으로 빛을 잃어가고 있다. 더군다나 자바EE의 릴리즈 주기가 2년에서 4년으로 길어지면서 빠르게 변화하는 기술 트렌드를 반영하지 못한 것도 인기가 시들해진 이유 중 하나이다.

오라클은 2017년 자바EE 8 릴리즈를 마지막으로 오픈소스 SW를 지원하는 비영리 단체인 이클립스 재단에 자바EE 프로젝트를 이관했다. 썬 마이크로시스템즈를 인수한 오라클이 사실상 자바EE의 수익화에 실패하면서 기술 주도권을 포기한 것으로 판단된다.

 

그림2 자바EE 버전 히스토리입니다. 1999년~2003년까지 J2EE(Servlet, JSP, EJB1,2, JMS), 2006년 5월 Java EE 5(EJB3, JPA, JSF, JAX-WS), 2009년 12월 Java EE 6(CDI, JAX-RS, Bean Validation, Web Profile), 2013년 4월 Java EE 7(JSON-P, HTML5, Web Socket, Batch), 2017년 9월 Java EE 8(JSON-8, Security, HTTP/2), 2019년 9월 Jakarta EE 8(Java EE 8, compatibility release), 2020년 11월 Jakarta EE 9(Jakarta.* namespace transition)입니다. 이 중 J2EE, Java EE 5, Java EE 6는 썬 마이크로시스템즈 소유였고 Java EE 7, Java EE 8은 오라클, Jakarta EE 8과 9는 이클립스 재단이 관리합니다.

 

새로운 시작, Jakarta EE(Jakarta, Enterprise Edition)

이클립스 재단으로 이관된 자바EE의 공식 명칭은 자카르타EE, 프로젝트 명은 EE4J(Eclipse Enterprise for Java)로 변경되었다. 자카르타EE는 기존 JCP 정책이 아닌 오픈소스 기반의 자카르타EE 사양 프로세스(Jakarta EE Specification Process, JESP)라는 개방적이고 중립적인 정책을 따른다. 오라클이 자바EE 프로젝트는 이관했지만 자바 상표권은 여전히 보유하고 있기 때문에 자바 네임스페이스 사용에 제약이 있었다. 이러한 이유로 자카르타EE에서는 자바 네임스페이스가 Jakarta로, API 패키지명은 javax.* 에서 Jakarta.* 로 변경되었다. 2020년 12월 발표한 자카르타의 네임스페이스 변화는 기존 개발자들에게 다소 혼란을 줄 것으로 예상된다. 이와 별개로 기존 사양 중 XML Registries, XML RPC, Deployment 등 일부 관련 없는 기술들은 자카르타EE에서 사라졌다.

 

표1 자바EE와 자카르타EE 용어 비교입니다. 자바 EE의 Java Servlet, javax.servlet은 자카르타 EE에서 Jakarta Servlet, kakarta.servlet입니다. 자바 EE의 JavaServer Pages(JSP), javax.servlet.jsp는 자카르타 EE의 Jakarta Server Pages, jakarta.servlet.jsp입니다. 자바 EE의 JavaServer Faces(JSF), javax.faces는 Jakarta EE에서 Jakarta Server Faces, jakarta.faces입니다. 자바 EE의 Java Message Service(JMS), javax.jms는 자카르타 EE에서 Jakarta Messaging, jakarta.jms입니다. 자바 EE의 Java Persistence API(JPA), javax.persistence는 자카르타 EE의 jakarta Persistence, jakarta.persistence입니다. 자바 EE의 Java Transaction API(JTA), javax.transaction은 자카르타 EE의 Jakarta Transaction, jakarta.transaction입니다. 자바 EE의 Enterprise JavaBeans(EJB), javax.ejb는 자카르타 EE의 Jakarta Enterprise Beans, jakarta.ejb입니다. 자바 EE의 Java Mail, javax.mail은 자카르타 EE의 jakarta Mail, jakarta.mail입니다.

 

자카르타EE는 자바EE를 대체하지 않았고 둘 다 공존하고 있다. 자카르타EE는 자바EE 8에서 하드포크된 새로운 플랫폼으로 기존 자바EE와 호환되지 않는다. 자바EE는 계속 유지되지만 8 버전을 마지막으로 더 이상의 릴리즈와 추가 기능은 제공되지 않고 있다. 개발자는 자바EE를 계속 사용할 것인지 아니면 자카르타EE로 마이그레이션 할 것인지를 선택해야 한다. 다행히도 자카르타EE로 마이그레이션을 지원하는 도구가 제공되고 자바EE에 대한 패치도 계속 나올 것이기 때문에 당장 큰 이슈는 없을 것으로 예상된다.

자카르타EE의 핵심 목표는 ‘클라우드 네이티브 환경을 위한 엔터프라이즈 자바 기술’로 마이크로서비스, 컨테이너 등의 최신 기술 트렌드를 반영하고자 한다. 이클립스 재단은 이전부터 마이크로서비스를 위한 표준 플랫폼으로 마이크로프로파일(MicroProfile) 프로젝트를 진행하고 있었기에 동일 선상에서 EE4J 프로젝트와 협력하고 통합할 것으로 예상된다. 최신 버전인 자카르타EE 9 릴리즈에는 새로운 기술 사양을 포함하고 있지 않다. 자카르타 네임스페이스 변경을 완료하고 관련 없는 사양을 정리하는데 중점을 두며 향후 혁신을 위한 준비를 하는 것으로 보여진다. 현재까지 알려진 자카르타EE의 차기 버전 관련 정보 중 자카르타 NoSQL 사양과 모듈화에 대해 간략하게 살펴보겠다.

 

 

Jakarta NoSQL

자카르타EE 10에 추가되는 첫 번째 기술 사양은 자카르타 NoSQL이다. 자카르타 NoSQL은 자바 애플리케이션과 NoSQL 데이터베이스를 통합하기 위한 표준으로 RDBMS의 통합을 위한 JDBC(Java DataBase Connectivity) 사양과 비슷한 개념이다. 클라우드 환경에서 대용량 데이터 처리를 위한 NoSQL의 활용도는 꾸준히 증가할 것으로 예상되며 이러한 배경에서 새로운 NoSQL 표준이 제안되었다. NoSQL은 Key-Value(아마존 다이나모DB, 레디스), Column(아파치 HBase, 아파치 카산드라), Document(아파치 카우치DB, 몽고DB), Graph(Neo4j, 인포그리드) 등의 여러 가지 데이터 유형이 있다. 자카르타 NoSQL은 다양한 유형의 NoSQL 데이터베이스를 하나의 표준 API로 통합하기 위해 통신 계층(Communication Layer)과 매핑 계층(Mapping Layer)을 분리하고 NoSQL 유형별로 4개의 모듈을 포함하고 있다.

 

그림 3 자카르타 NoSQL 계층 구조입니다. NoSQL 서버와 통신을 위한 통신 계층은 RDBMS의 JDBC API/Driver와 같은 역할을 담당한다. NoSQL의 각 유형(Key-Value, Column, Document, Graph)별로 API/Driver를 구분하며 애플리케이션은 동일한 유형의 다른 NoSQL 데이터베이스와 호환성을 가질 수 있다. 매핑 계층은 데이터 모델을 정의한다. 기존 JPA(Java Persistence API), 하이버네이트(Hibernate) 등의 ORM에 적용된 주석을 선언하는 방법이 사용되며 Bean Validation, CDI(Contexts and Dependency Injection) 기술이 동일하게 활용

 

NoSQL 서버와 통신을 위한 통신 계층은 RDBMS의 JDBC API/Driver와 같은 역할을 담당한다. NoSQL의 각 유형(Key-Value, Column, Document, Graph)별로 API/Driver를 구분하며 애플리케이션은 동일한 유형의 다른 NoSQL 데이터베이스와 호환성을 가질 수 있다.

매핑 계층은 데이터 모델을 정의한다. 기존 JPA(Java Persistence API), 하이버네이트(Hibernate) 등의 ORM에 적용된 주석을 선언하는 방법이 사용되며 Bean Validation, CDI(Contexts and Dependency Injection) 기술이 동일하게 활용된다.

 

 

모듈화(Modularity) 지원

모듈화는 컨테이너와 마이크로서비스 환경을 위해 자바 런타임을 경량화하는 것이다. 풀 스택(Full Stack)인 자바EE 플랫폼 전체를 클라우드 네이티브 환경에 올리는 것은 상당히 비효율적이며 실제 사용되는 모듈만으로 런타임을 구성할 수 있는 경량화 기술이 요구된다. 일부 벤더가 자체적인 경량화 기능을 제공하고 자바EE 6에서 웹 프로파일(Web Profile)이라는 간소화 된 WAS 사양을 선보였지만 효용성과 활용도가 낮았다. 스프링 프레임워크의 경량화 버전인 스프링 부트(Spring Boot)가 마이크로서비스 환경에서 좋은 반응을 얻고 있는 점에 주목할 필요가 있다. 자바 플랫폼의 모듈화 기술은 자바 SE 9에서 JPMS(Java Platform Module System)가 표준으로 이미 지원되고 있다. 모듈화는 클라우드 네이티브 환경을 위한 주요 이슈이기 때문에 향후 자카르타EE 릴리즈에 포함될 것으로 예상된다.

 

 

마치며

자카르타EE는 클라우드 네이티브를 목표로 방향성을 설정했지만 장기적인 로드맵이나 마일스톤은 부족한 상태이다. 당장은 흥미로운 릴리즈가 없기 때문에 자바EE에서 자카르타EE로 이동할 이유는 없어 보인다. 아마도 자바EE를 기반으로 하는 스프링 프레임워크, 스프링 부트, 아파치 톰캣(Apache Tomcat) 등이 자카르타EE를 채택하는 시점부터 많은 전환이 이뤄질 것으로 예상된다.

자카르타EE 인증을 획득한 WAS는 현재까지 18개 제품으로 이전 자바EE 8의 9개와 비교했을 때 그 시작은 순탄한 것으로 보여진다. 특히 오픈소스 프로젝트의 참여 규칙인 특정 기업에 종속되지 않는 개방성과 투명성이 긍정적인 영향을 끼쳤을 것으로 생각된다. 대표적인 오픈소스 WAS인 와일드플라이(Wildfly) 역시 선도적으로 자카르타EE로의 전환을 진행하고 있으며 자카르타EE 8(자바EE 8)을 지원하는 기본 버전과 새로운 자카르타EE 9를 지원하는 프리뷰 버전을 동시에 발표했다.

엔터프라이즈 자바 생태계를 구축하고 발전시켜온 자바EE는 오랜 노력과 공헌에도 불구하고 상업 벤더 중심의 폐쇄적인 정책과  영리를 목적으로 운영되어 많은 비판을 받았다. 자카르타EE는 자바EE의 실패에서 교훈을 얻어 잃어버린 명성을 되찾을 수 있기를 기대해본다.

# References

- https://blogs.oracle.com/javamagazine/transition-from-java-ee-to-jakarta-ee
- https://jakarta.ee/specifications/platform/8/platform-spec-8.html
- https://www.eclipse.org/org/workinggroups/jakarta_ee_faq.php

이창명 프로

이창명 프로

에스코어㈜ 소프트웨어사업부 컨버전스SW그룹

차세대 메일 엔진, 빅데이터 솔루션 및 실시간 분석 플랫폼을 개발하였으며 현재 오픈소스 미들웨어 솔루션의 R&D를 담당하고 있습니다.

연관 아티클

  • AI 시대, 디자이너가 알아야 할 가독성을 높이는 데이터 시각화 방법
    SW 테크놀로지2024.03.15

    AI 시대, 디자이너가 알아야 할 가독성을 높이는 데이터 시각화 방법

    자세히 보기
  • Redis를 활용한 안전하게 동시성 이슈 제어하기
    오픈소스 SW2024.02.21

    Redis를 활용한 안전하게 동시성 이슈 제어하기

    자세히 보기
  • Webpack5 Module Federation 소개
    2024.02.02

    Webpack5 Module Federation 소개

    자세히 보기