자카르타 EE
1. 개요
1. 개요
자카르타 EE는 자바 엔터프라이즈 소프트웨어 애플리케이션 개발을 위한 오픈 소스 플랫폼이다. 이클립스 재단이 주체가 되어 개발 및 관리를 담당하며, 2017년에 최초로 등장했다. 이 플랫폼은 기업 수준의 확장성, 보안성, 신뢰성을 갖춘 대규모 분산 컴퓨팅 애플리케이션을 구축하기 위한 표준 API와 런타임 환경을 제공한다.
주요 용도는 현대적인 클라우드 네이티브 자바 애플리케이션 개발이다. 마이크로서비스 아키텍처, 컨테이너 환경, 클라우드 컴퓨팅 플랫폼에 최적화된 엔터프라이즈 자바의 진화된 형태를 지향한다. 자카르타 EE는 웹 애플리케이션, RESTful API, 메시징 시스템 등 다양한 엔터프라이즈 솔루션의 기반이 된다.
이 플랫폼은 과거 오라클이 관리하던 자바 EE 기술의 공식 후속이다. 상표권 문제로 인해 기술이 이클립스 재단으로 이전되면서 자카르타 EE라는 새로운 이름 아래 오픈 소스 커뮤니티 주도의 개발 모델로 전환되었다. 이로써 보다 개방적이고 공정한 진화가 가능해졌다.
자카르타 EE는 수많은 벤더의 애플리케이션 서버와 호환되는 표준을 정의함으로써 개발자에게 기술 종속성을 줄이고 이식성을 보장한다. 이를 통해 기업은 특정 벤더에 구애받지 않고 유연하게 엔터프라이즈 자바 생태계를 활용할 수 있다.
2. 역사와 배경
2. 역사와 배경
2.1. 자바 EE와의 관계
2.1. 자바 EE와의 관계
자카르타 EE는 자바 EE(Java Platform, Enterprise Edition)의 공식적인 후속 플랫폼이다. 자바 EE는 오라클이 관리하던 자바 엔터프라이즈 플랫폼의 상표명이었으나, 자바 EE 8 이후 오라클이 기술의 관리권을 이클립스 재단에 기증하면서 새로운 이름이 필요해졌다. 이에 따라 자바 EE의 모든 기술 사양, 참조 구현, 테스트 호환성 키트가 이클립스 재단으로 이전되었고, 이클립스 재단 내에서 새로운 이름인 '자카르타 EE'로 재탄생하게 되었다.
이러한 이전 과정에서 가장 큰 변화는 상표권과 라이선스 정책이다. 'Java'와 'javax' 패키지 네임스페이스는 오라클의 상표로 남았기 때문에, 자카르타 EE는 새로운 'jakarta' 패키지 네임스페이스를 도입하여 모든 API를 이전했다. 이는 자바 EE 8 애플리케이션을 자카르타 EE 9 이상의 플랫폼으로 마이그레이션할 때 주요 변경 사항으로 작용한다. 따라서 자카르타 EE는 자바 EE의 기술적 유산과 생태계를 계승하면서도, 완전한 오픈 소스 기반의 독립적인 진화를 목표로 하는 새로운 출발점이 되었다.
2.2. 이클립스 재단으로의 이전
2.2. 이클립스 재단으로의 이전
자카르타 EE는 2017년 오라클이 자바 EE(Java Platform, Enterprise Edition)의 관리권과 관련 기술 명세를 이클립스 재단에 기증하면서 탄생했다. 이는 자바 엔터프라이즈 에디션의 미래를 공개적으로 협업하고 혁신하는 오픈 소스 모델로 전환하는 중요한 계기가 되었다. 이전 과정에서 상표권 문제로 '자바(Java)' 명칭을 사용할 수 없게 되었고, 이에 따라 새로운 이름인 '자카르타 EE(Jakarta EE)'가 채택되었다.
이클립스 재단으로의 이전은 기술의 발전 속도를 가속화하고, 더 개방적인 거버넌스 아래에서 클라우드 네이티브 및 마이크로서비스 아키텍처에 대한 요구를 적극적으로 반응하기 위한 목적이 있었다. 기존 자바 EE는 표준화 과정이 느리고 복잡했으나, 자카르타 EE는 이클립스 재단의 공동체 주도 모델을 통해 보다 민첩한 릴리스 사이클과 현대적인 기술 요구사항을 반영할 수 있게 되었다. 이는 엔터프라이즈 소프트웨어 개발 생태계에 중요한 변화를 가져왔다.
이전 이후, 모든 기술 명세의 패키지 네임스페이스는 'javax.*'에서 'jakarta.*'로 변경되었다. 이는 하위 호환성을 깨는 큰 변화였지만, 플랫폼의 독립성과 지속 가능한 진화를 보장하기 위한 필수적인 조치로 여겨진다. 이클립스 재단은 자카르타 EE의 사양 개발, 호환성 인증을 위한 TCK(기술 호환성 키트) 관리, 그리고 생태계 활성화를 주도하고 있다.
3. 주요 구성 요소 및 기술
3. 주요 구성 요소 및 기술
3.1. 웹 프로파일 및 코어 프로파일
3.1. 웹 프로파일 및 코어 프로파일
자카르타 EE는 다양한 규모와 복잡성을 가진 엔터프라이즈 애플리케이션을 지원하기 위해 두 가지 주요 프로필을 정의한다. 이는 개발자가 필요에 맞는 최소한의 기술 세트를 선택하여 애플리케이션을 구축할 수 있도록 하기 위함이다.
웹 프로필은 전통적인 웹 애플리케이션 개발에 초점을 맞춘 경량화된 스펙이다. 서블릿, JSP, CDI, Bean Validation, JPA와 같은 핵심 API를 포함하여, 마이크로서비스나 모놀리식 웹 애플리케이션을 구축하는 데 필요한 기본 기능을 제공한다. 이 프로필은 자카르타 EE 호환 애플리케이션 서버 중에서도 비교적 가벼운 웹 컨테이너나 런타임에서 실행되도록 설계되어 있다.
코어 프로필은 웹 프로필보다 더욱 최소화된 프로파일로, 클라우드 네이티브 환경에서의 마이크로서비스 개발을 염두에 두고 있다. 웹 프로필에 포함된 서블릿이나 JSP와 같은 웹 계층 기술을 제외하고, CDI, JSON Processing, JSON-B와 같은 비즈니스 로직과 데이터 처리를 위한 핵심 기술만을 포함한다. 이는 도커 컨테이너 내에서 실행되는 경량 마이크로서비스를 만드는 데 이상적이다.
두 프로필은 계층 구조를 이루며, 코어 프로필은 웹 프로필의 하위 집합이다. 따라서 코어 프로필을 대상으로 개발된 애플리케이션은 웹 프로필을 구현한 모든 런타임에서 추가 구성 없이 실행될 수 있다. 이러한 유연한 프로필 체계는 개발자가 애플리케이션의 요구사항에 맞춰 기술 스택을 효율적으로 선택하고, 불필요한 오버헤드를 줄이는 데 기여한다.
3.2. 대표적인 API (예: Servlet, JPA, CDI, Bean Validation)
3.2. 대표적인 API (예: Servlet, JPA, CDI, Bean Validation)
자카르타 EE는 엔터프라이즈급 자바 애플리케이션을 구축하기 위한 핵심 기능을 제공하는 수많은 API와 스펙으로 구성된다. 이 플랫폼은 개발자들이 웹 애플리케이션, 분산 시스템, 마이크로서비스 등을 효율적으로 개발할 수 있도록 표준화된 도구 모음을 제공한다. 주요 API는 서블릿과 같은 웹 계층 기술부터 영속성 및 의존성 주입과 같은 비즈니스 로직 계층 기술까지 광범위한 범위를 포괄한다.
웹 요청 처리를 위한 기본적인 계층으로는 자카르타 서블릿 API가 있다. 이는 HTTP 요청과 응답을 다루는 저수준의 웹 컨테이너 규격을 정의한다. 데이터 영속성을 관리하기 위한 표준은 자카르타 퍼시스턴스 API로, 개발자가 객체 관계 매핑을 통해 관계형 데이터베이스와 상호작용할 수 있게 해준다. 이는 SQL을 직접 작성하는 번거로움을 줄여주며, 엔티티 기반의 데이터 접근 방식을 제공한다.
애플리케이션 내 컴포넌트의 생명주기와 의존성을 관리하는 데는 자카르타 CDI가 중심 역할을 한다. 이 의존성 주입 스펙은 느슨한 결합과 테스트 용이성을 증진시키는 관점 지향 프로그래밍 스타일을 가능하게 한다. 또한, 자카르타 Bean Validation API는 엔티티나 자바빈즈의 필드 값에 대한 제약 조건을 선언적으로 정의하고 검증하는 메커니즘을 표준화한다.
이 외에도 자카르타 RESTful 웹 서비스 API는 REST 기반 웹 서비스를 구축하는 표준을 제공하며, 자카르타 메시징은 메시지 지향 미들웨어와의 통신을, 자카르타 트랜잭션은 분산 환경에서의 트랜잭션 관리를 담당한다. 이러한 API들은 함께 작동하여 개발자에게 엔터프라이즈 애플리케이션 개발에 필요한 포괄적이고 일관된 프로그래밍 모델을 제공한다.
4. 구현 및 호환성
4. 구현 및 호환성
4.1. 호환 구현체 (예: Jakarta EE 호환 애플리케이션 서버)
4.1. 호환 구현체 (예: Jakarta EE 호환 애플리케이션 서버)
자카르타 EE 플랫폼의 사양을 구현하고 공식 호환성을 인증받은 제품을 호환 구현체라고 한다. 이러한 구현체는 주로 애플리케이션 서버 형태로 제공되며, 개발자는 이를 통해 자카르타 EE 사양에 따라 작성된 애플리케이션을 배포하고 실행할 수 있다. 호환성을 입증하기 위해서는 각 구현체가 이클립스 재단에서 관리하는 TCK(기술 호환성 키트)를 통과해야 한다.
주요 호환 구현체로는 이클립스 재단의 참여 프로젝트인 이클립스 글래스피시, 이클립스 제티, 그리고 와일드플라이(구 JBoss)와 톰캣을 기반으로 한 톰EE 등이 있다. 또한 IBM의 오픈 리버티와 오라클의 글래스피시 서버도 널리 알려진 상용 및 오픈 소스 구현체에 속한다. 이러한 서버들은 자카르타 EE의 특정 버전(예: 자카르타 EE 8, 9, 10)에 대한 호환성을 갖추고 있다.
호환 구현체의 존재는 자카르타 EE 생태계의 핵심 가치인 벤더 독립성과 이식성을 실현한다. 개발자는 한 호환 서버에서 동작하는 애플리케이션을 별도의 수정 없이 다른 호환 서버로 마이그레이션할 수 있으며, 이는 기업의 기술 종속성을 줄이고 유연한 인프라 선택을 가능하게 한다.
4.2. TCK(기술 호환성 키트)
4.2. TCK(기술 호환성 키트)
TCK는 기술 호환성 키트의 약자로, 특정 자카르타 EE 플랫폼이나 구현체가 자카르타 EE 사양을 정확히 준수하는지 검증하기 위한 테스트 스위트이다. 이클립스 재단이 관리하며, 자카르타 EE 사양의 각 버전마다 별도의 TCK가 제공된다. TCK를 통과하는 것은 해당 제품이 공식적으로 '자카르타 EE 호환'임을 인증받기 위한 필수 조건이다.
TCK의 주요 목적은 이클립스 재단이 정의한 자카르타 EE 표준을 모든 구현체가 동일하게 준수하도록 보장하여 애플리케이션의 이식성을 높이는 데 있다. 예를 들어, 한 애플리케이션 서버에서 개발된 엔터프라이즈 자바 애플리케이션이 TCK 인증을 받은 다른 서버에서도 별다른 수정 없이 동작할 수 있도록 하는 것이 핵심 목표이다. 이는 개발자와 기업이 벤더 종속 없이 자유롭게 플랫폼을 선택할 수 있는 기반을 마련한다.
TCK 인증 절차는 구현체 제공업체(예: 글래스피시, 와일드플라이, 톰캣 등의 개발팀)가 해당 자카르타 EE 버전의 TCK를 자신의 제품에 실행하여 모든 테스트를 통과한 후, 결과를 이클립스 재단에 제출하고 인증을 받는 과정을 거친다. 인증을 받은 제품은 공식 호환 구현체 목록에 등재되며, 자카르타 EE 호환 로고를 사용할 수 있는 권한을 부여받는다.
이러한 엄격한 호환성 검증 프로세스는 자카르타 EE 생태계의 건강성과 신뢰성을 유지하는 데 기여한다. 표준에 대한 일관된 준수를 통해 클라우드 네이티브 환경에서도 안정적이고 예측 가능한 자바 기반 엔터프라이즈 소프트웨어 개발을 가능하게 한다.
5. 개발 및 활용
5. 개발 및 활용
5.1. 애플리케이션 개발 워크플로우
5.1. 애플리케이션 개발 워크플로우
자카르타 EE 기반 애플리케이션 개발 워크플로우는 표준화된 자바 엔터프라이즈 API를 중심으로 구성된다. 개발자는 마이크로서비스나 모놀리식 애플리케이션을 구축하기 위해 이클립스 IDE나 인텔리제이 IDEA와 같은 통합 개발 환경을 사용할 수 있다. 프로젝트 초기에는 메이븐이나 그레이들 같은 빌드 도구를 통해 필요한 자카르타 EE API 의존성을 관리한다.
개발 과정에서는 서블릿을 이용한 웹 요청 처리, JPA를 통한 데이터베이스 영속성 관리, CDI를 활용한 의존성 주입 및 이벤트 처리, Bean Validation으로 데이터 검증 로직 구현 등이 핵심 단계를 이룬다. 이러한 표준 API들은 개발자가 비즈니스 로직에 집중할 수 있도록 공통적인 인프라 문제를 추상화한다.
애플리케이션을 패키징하고 배포하는 단계에서는 WAR 파일이나 EAR 파일을 생성하여 자카르타 EE 호환 애플리케이션 서버에 배포한다. 최근에는 도커 컨테이너 이미지로 패키징하여 쿠버네티스와 같은 클라우드 네이티브 환경에 배포하는 방식이 일반화되고 있다. 이클립스 재단은 개발 생산성을 높이기 위한 공식 도구인 이클립스 제티를 제공하기도 한다.
테스트와 검증 단계에서는 단위 테스트와 통합 테스트를 수행하며, 필요에 따라 아파치 톰캣이나 이클립스 글래스피시와 같은 경량 구현체를 활용할 수 있다. 이렇게 완성된 애플리케이션은 오픈 리버티, 와일드플라이, 파이어플라이 등 다양한 호환 서버에서 실행된다.
5.2. 마이크로서비스와의 연계
5.2. 마이크로서비스와의 연계
자카르타 EE는 현대적인 마이크로서비스 아키텍처를 구축하는 데 적합한 플랫폼으로 발전해왔다. 전통적인 모놀리식 애플리케이션 서버에 배포되는 중량형 애플리케이션과 달리, 자카르타 EE는 경량화된 런타임과 모듈화된 API를 통해 개별 마이크로서비스를 구성하고 배포하는 데 초점을 맞춘다. 이를 위해 자카르타 EE는 웹 프로파일과 코어 프로파일 같은 경량화된 프로파일을 제공하여, 필요한 기능만 포함한 소규모 서비스를 빠르게 개발하고 실행할 수 있도록 지원한다.
자카르타 EE의 기술 스택은 마이크로서비스 개발에 필수적인 요소들을 포함하고 있다. 예를 들어, JAX-RS API는 RESTful 웹 서비스를 쉽게 구축할 수 있게 해주며, CDI는 서비스 내부의 의존성 주입과 이벤트 처리를 관리한다. 또한 JSON-B와 JSON-P는 데이터 직렬화와 처리를 표준화하고, 서블릿 컨테이너는 경량 HTTP 서버의 기반이 된다. 이러한 표준화된 기술들은 개발자가 벤더 종속 없이 마이크로서비스를 구현할 수 있는 기반을 마련해준다.
클라우드 네이티브 환경에서 자카르타 EE 기반 마이크로서비스는 도커 컨테이너에 패키징되어 쿠버네티스 같은 오케스트레이션 플랫폼에 배포되는 것이 일반적이다. 주요 자카르타 EE 호환 애플리케이션 서버들은 이러한 컨테이너화와 클라우드 배포를 최적화하기 위한 기능과 도구를 지속적으로 발전시키고 있다. 결과적으로 자카르타 EE는 기업이 기존의 자바 EE 기술과 노하우를 활용하면서도, 클라우드 컴퓨팅 환경에 적합한 유연하고 확장 가능한 마이크로서비스 애플리케이션으로 전환하는 데 중요한 역할을 한다.
6. 장점과 의의
6. 장점과 의의
자카르타 EE는 오픈 소스 플랫폼으로서, 기업용 자바 애플리케이션 개발에 있어 표준화된 접근 방식을 제공한다는 점에서 큰 장점을 지닌다. 이는 다양한 벤더의 애플리케이션 서버 간의 이식성을 보장하여, 개발자가 특정 벤더에 종속되지 않고 자유롭게 기술을 선택하고 애플리케이션을 배포할 수 있게 한다. 또한 풍부하고 검증된 API 세트를 제공함으로써, 개발자는 인프라 구축보다 비즈니스 로직 구현에 더 집중할 수 있으며, 안정적이고 확장 가능한 대규모 시스템을 구축하는 데 효율적이다.
자카르타 EE의 가장 중요한 의의는 자바 EE로부터의 성공적인 이관과 진화를 통해 엔터프라이즈 자바 생태계의 지속성을 확보했다는 점이다. 이클립스 재단으로의 이전은 공개적이고 투명한 거버넌스 모델 아래에서 커뮤니티 주도의 협업과 혁신을 가능하게 했다. 이를 통해 플랫폼은 현대적인 클라우드 네이티브 아키텍처와 마이크로서비스 개발 요구사항에 부응하는 방향으로 빠르게 발전해 나갈 수 있는 기반을 마련하였다.
특히, 웹 프로파일 및 코어 프로파일과 같은 경량화된 프로파일을 도입한 것은 현대 애플리케이션 개발 트렌드에 부합하는 중요한 진전이다. 이는 개발자가 프로젝트에 꼭 필요한 기술만 선택하여 사용할 수 있게 하여, 불필요한 복잡성과 리소스 사용을 줄이고 컨테이너 환경에 최적화된 애플리케이션을 구축하는 데 기여한다. 결국 자카르타 EE는 엔터프라이즈 자바의 강력한 기반을 유지하면서도, 클라우드 컴퓨팅 시대에 적합한 개방형 표준 플랫폼으로서의 지위를 공고히 하고 있다.
7. 여담
7. 여담
자카르타 EE는 자바 EE의 정신을 계승하면서도 현대적이고 개방적인 생태계를 지향한다. 이전의 자바 EE가 오라클의 주도하에 진행되었다면, 자카르타 EE는 이클립스 재단 산하의 공개적인 협업 모델을 통해 발전하고 있다. 이로 인해 커뮤니티의 참여가 더욱 활성화되었고, 사양의 발전 속도와 투명성이 향상되었다는 평가를 받는다.
이름 변경 과정에서 기술 스펙의 패키지 네임스페이스도 javax.*에서 jakarta.*로 전환되었다. 이는 상표권 문제를 해결하기 위한 필수적인 조치였지만, 기존 애플리케이션의 마이그레이션에 일정한 노력을 요구하게 되었다. 개발자들은 이 전환을 지원하는 다양한 도구와 가이드를 활용하여 점진적으로 새로운 네임스페이스로 이전할 수 있다.
자카르타 EE의 발전 방향은 클라우드 네이티브 환경에 초점을 맞추고 있다. 마이크로서비스, 컨테이너, 쿠버네티스와 같은 현대 애플리케이션 아키텍처와 원활하게 통합될 수 있도록 지속적으로 진화하고 있다. 이는 기업용 자바 애플리케이션이 빠르게 변화하는 IT 인프라 환경에 적응할 수 있는 토대를 제공한다는 점에서 중요한 의미를 가진다.
