※ ChatGPT한테 물어보면서 정리한 내용입니다. ※
들어가기 전
우리가 개발을 하다보면 JDK 버전, 스프링 또는 스프링 부트 버전을 확인을 한다.
가끔씩 javax와 jakarta 이야기도 나오게 되는데 그렇구나 하고 지나쳤던 부분을 정리해보려고 한다.!!
엔터프라이즈 플랫폼
엔터프라이즈 플랫폼은 대규모 기업(Enterprise) 환경에서 요구되는 복잡한 소프트웨어 시스템을 개발, 배포, 실행, 관리하기 위한 기술과 도구의 통합 시스템입니다. 이 플랫폼은 비즈니스 애플리케이션을 효율적으로 개발하고, 유지보수하며, 확장 가능하도록 설계되었습니다.
엔터프라이즈 플랫폼 종류
1. Java EE (J2EE) / Jakarta EE
- 정의: Java 기반의 엔터프라이즈 애플리케이션 개발을 위한 표준 플랫폼.
- 주요 기능:
- 트랜잭션 관리
- 웹 애플리케이션 개발 (Servlet, JSP)
- 데이터베이스 연동 (JPA, JDBC)
- 메시징 (JMS)
- 애플리케이션 서버: GlassFish, WildFly, WebLogic, WebSphere 등이 Java EE를 지원.
2. Spring Framework
- 정의: Java 기반의 경량화된 엔터프라이즈 애플리케이션 개발 프레임워크.
- Spring Boot를 통해 빠르게 애플리케이션을 개발하고, 엔터프라이즈 수준의 기능(데이터베이스 연동, 메시징, 보안 등)을 제공합니다.
3. Microsoft .NET
- 정의: Microsoft가 제공하는 엔터프라이즈 플랫폼으로, 다양한 언어(C#, F#, VB.NET)를 지원.
- 주요 기능:
- 웹 애플리케이션 개발 (ASP.NET)
- 데이터 연동 (Entity Framework)
- 클라우드 통합 (Azure)
4. 클라우드 플랫폼 (AWS, Google Cloud, Microsoft Azure)
- 정의: 현대의 엔터프라이즈 플랫폼은 클라우드 기반으로 제공되며, 서버리스 컴퓨팅, 데이터 스토리지, 네트워킹 등 다양한 서비스를 제공합니다.
- 주요 특징:
- 고가용성과 확장성.
- DevOps 및 CI/CD 통합.
5. SAP / Oracle ERP
- 정의: 대규모 엔터프라이즈 자원 관리(ERP) 시스템을 위한 전문 플랫폼.
- 특징:
- 재무, 인사, 공급망 등 다양한 기업 프로세스를 통합 관리.
- 대규모 데이터와 프로세스를 처리하도록 설계됨.
엔터프라이즈 플랫폼이 필요한 이유
- 대규모 트랜잭션 처리:
- 수백만 건의 데이터 처리를 동시에 수행해야 하는 대규모 시스템을 지원.
- 표준화된 개발:
- 개발자들이 공통된 API와 기술 스택을 사용하여 일관된 방식으로 애플리케이션을 개발.
- 비즈니스 요구사항 충족:
- 보안, 데이터 연속성, 트랜잭션 처리, 안정성 등의 요구사항을 기본적으로 충족.
- 유지보수 용이성:
- 플랫폼 기반으로 개발된 시스템은 확장 및 유지보수가 상대적으로 용이.
자바 엔터프라이즈 플랫폼
JavaEE와 J2EE의 역할:
- **JavaEE(J2EE)**는 엔터프라이즈 애플리케이션 개발을 위한 표준 API 세트입니다.
- JavaEE는 애플리케이션 서버(Tomcat, WildFly, GlassFish 등)가 제공하는 기능을 사용하여 동작하며, 다음과 같은 기술들을 포함합니다:
- Servlet, JSP
- JPA (Java Persistence API)
- JMS (Java Message Service)
- EJB (Enterprise JavaBeans)
- CDI (Context and Dependency Injection)
모듈화(Modularity) 지원 (출처: 삼성SDS 인사이트 리포트)
모듈화는 컨테이너와 마이크로서비스 환경을 위해 자바 런타임을 경량화하는 것입니다. 풀 스택(Full Stack)인 자바EE 플랫폼 전체를 클라우드 네이티브 환경에 올리는 것은 상당히 비효율적이며 실제 사용되는 모듈만으로 런타임을 구성할 수 있는 경량화 기술이 요구됩니다. 일부 벤더가 자체적인 경량화 기능을 제공하고 자바EE 6에서 웹 프로파일(Web Profile)이라는 간소화 된 WAS 사양을 선보였지만 효용성과 활용도가 낮았습니다. 스프링 프레임워크의 경량화 버전인 스프링 부트(Spring Boot)가 마이크로서비스 환경에서 좋은 반응을 얻고 있는 점에 주목할 필요가 있습니다. 자바 플랫폼의 모듈화 기술은 자바 SE 9에서 JPMS(Java Platform Module System)가 표준으로 이미 지원되고 있습니다. 모듈화는 클라우드 네이티브 환경을 위한 주요 이슈이기 때문에 향후 자카르타EE 릴리즈에 포함될 것으로 예상됩니다.
Spring Boot와 자바 엔터프라이즈 플랫폼
1. Java EE에서 Jakarta EE로 전환
Spring Boot는 Java EE와 Jakarta EE를 구분하여 지원하고 있으며, Jakarta EE로 전환된 시점은 Spring Boot 2.4부터입니다.
- Spring Boot 2.3 이하:
- Java EE 기반 (javax.* 네임스페이스 사용).
- Java EE 8과 호환되는 서블릿 API와 JPA 등을 사용합니다.
- Spring Boot 2.4 이상:
- Jakarta EE 9 기반 (jakarta.* 네임스페이스 사용).
- Java EE 8에서 Jakarta EE 9로 변경된 javax.* 네임스페이스가 **jakarta.***로 바뀌었으며, Spring Boot는 이를 반영하여 Jakarta EE로 전환되었습니다.
2. Spring Boot에서 사용되는 JavaEE 기술
Spring Boot는 JavaEE 기술의 일부를 간접적으로 사용합니다. 그러나 Spring Boot는 JavaEE에 의존적이지 않으며, Spring 기반의 대체 기술을 사용하여 더 많은 유연성과 편의성을 제공합니다.
1) Servlet API
- JavaEE에서 제공하는 Servlet API는 Spring Boot의 웹 계층에서 중요한 역할을 합니다.
- Spring MVC는 내부적으로 javax.servlet을 사용하여 HTTP 요청과 응답을 처리합니다.
- Servlet 컨테이너(Tomcat, Jetty 등)는 Spring Boot 애플리케이션을 실행하는 데 사용됩니다.
2) JPA (Java Persistence API)
- JavaEE의 표준 데이터 액세스 기술인 JPA는 Spring Boot에서 데이터베이스와의 연동을 위해 사용됩니다.
- Spring Data JPA는 JPA 표준을 확장하여 간단한 쿼리 작성과 데이터 액세스를 쉽게 만듭니다.
- JPA 표준: javax.persistence (JavaEE API)
- 구현체: Hibernate, EclipseLink 등
3) 기타 JavaEE 기술
- Bean Validation:
- JavaEE의 javax.validation API는 Spring Boot에서 데이터 유효성 검사를 위해 사용됩니다.
- 구현체: Hibernate Validator.
- JMS (Java Message Service):
- JavaEE의 JMS API를 Spring JMS에서 지원하여 메시지 큐와의 통합을 제공합니다.
3. Spring Boot의 대체 철학
Spring Boot는 JavaEE의 복잡성과 무거운 구성을 피하고, 더 경량화된 대안을 제공합니다.
JavaEE 기술 | Spring Boot 대체 |
EJB | Spring의 @Service, @Component |
CDI (Dependency Injection) | Spring DI (Dependency Injection) |
JSP | Thymeleaf, Mustache |
JMS | Spring JMS |
4. Spring Boot와 차이점
- Spring Boot와 JavaEE의 차이점:
- Spring Boot는 JavaEE 표준을 따르지 않고, Spring 프레임워크의 철학에 따라 만들어졌습니다.
- Spring Boot는 경량 애플리케이션 개발을 목표로, JavaEE 기술을 대체하거나 일부를 통합합니다.
- 예: Spring MVC는 Servlet을 내부적으로 활용하여 웹 요청을 처리합니다.
- 예: Spring Data JPA는 JPA(JavaEE 표준 API)를 활용합니다.
- Spring Boot에서 JavaEE(J2EE) 사용 여부:
- Spring Boot는 JavaEE의 일부 기술을 활용하거나 유사한 대안을 제공합니다.
- Servlet API: Spring Boot는 내부적으로 Servlet 컨테이너(Tomcat, Jetty)를 사용하므로, JavaEE의 Servlet 기술을 간접적으로 활용합니다.
- JPA: Spring Boot는 Hibernate와 같은 JPA 구현체를 활용하여 데이터베이스와 연동합니다.
'회사 업무 > 기술 연구편' 카테고리의 다른 글
[Document] springdoc-openapi (0) | 2025.02.26 |
---|---|
[Document] API 명세서 툴 비교 (0) | 2025.02.21 |
[Security] 접근 제어 정책(Access Control) (0) | 2025.02.13 |
분산 트랜잭션 연구편 with RabbitMQ (0) | 2024.11.14 |
이벤트 기반 아키텍처 연구편 with RabbitMQ (0) | 2024.11.13 |