JavaRush /Java Blog /Random-KO /커피 브레이크 #119. Java Enterprise Edition(Java EE) 소개

커피 브레이크 #119. Java Enterprise Edition(Java EE) 소개

Random-KO 그룹에 게시되었습니다
출처: Dev.to Java Enterprise Edition(Java EE)은 중견기업과 대기업의 문제를 해결하기 위한 서버 플랫폼 아키텍처를 설명하는 Java 언어에 대한 사양 및 문서 집합입니다. 커피 브레이크 #118.  Java Enterprise Edition(Java EE) 소개 - 1Java EE를 배울 때 다음 용어를 접하게 됩니다.
  • 애플리케이션 서버는 추상 Java EE 사양을 구체적으로 구현한 것입니다. 예: Payara Server(Glassfish), IBM OpenLiberty 및 JBoss Wildfly.

  • JSR( Java 사양 요청 )은 기술을 추가하고 개선하기 위해 Java 커뮤니티에 보내는 공식적인 요청입니다. Java 기술 플랫폼에서 API를 표준화하고 JAX-RS(Java API for RESTful Web Services)와 같이 API를 블록으로 그룹화하는 데 사용되는 본체입니다. 모든 JSR에는 항상 기본 참조 구현이 있습니다.

  • 참조 구현은 추상 JSR의 구체적인 구현/구현입니다. 예를 들어 JAX-RS의 참조 구현을 Jersey라고 합니다. Java EE 자체는 JSR입니다. 따라서 애플리케이션 서버는 다양한 Java EE JSR 참조 구현의 모음입니다. Java EE는 JSR 366이며 참조 구현 중 하나는 Glassfish 5입니다.

  • Jakarta EE는 2018년부터 Java EE의 새로운 이름입니다. 현재 Oracle은 Eclipse Foundation 의 관리 하에 Java 플랫폼을 이전했습니다 .

JavaEE 기본 사항

Java EE에는 세 가지 주요 API가 있습니다.
  1. JPA(자바 지속성 API). NoSQL 데이터베이스와 함께 작동하도록 확장할 수 있는 관계형 데이터베이스에서 정보를 저장하고 검색하는 일을 담당합니다. 이는 애플리케이션의 데이터 계층입니다.

  2. 컨텍스트 및 종속성 주입(CDI API). 이는 애플리케이션에서 결합을 줄이기 위한 표준화된 방법입니다. 자유로운 디커플링을 보장하기 위해 다양한 구성 요소 상호 작용을 관리합니다.

  3. RESTful 웹 서비스용 Java API(JAX-RS). HTTP를 통한 리소스를 웹 서비스로 제공합니다.

컨텍스트 및 종속성 주입 API

종속성 주입은 반전 제어(개별 구성 요소가 종속성을 받는 소프트웨어 전략)의 특별한 형태입니다. 이는 낮은 결합 구성요소를 생성하기 위해 애플리케이션의 종속성을 외부화합니다.

CDI의 특징

  • 종속성 주입(Typesafe)을 사용하면 유형에 대한 종속성을 선언하여 컴파일러가 런타임에 오류를 포착할 수 있습니다.

  • 수명주기 컨텍스트는 수명주기 및 상태 저장 구성 요소 상호 작용을 잘 정의되었지만 확장 가능한 수명 주기 구성 요소에 연결하는 기능입니다.

  • 인터셉터를 사용하면 특정 메서드에 액세스하려는 요청을 가로챌 수 있습니다.

  • 이벤트는 고도로 분리된 애플리케이션을 개발하는 방법입니다. Observers 메서드가 실행된 이벤트를 수신하는 동안 이벤트가 실행될 수 있습니다.

  • SPI(Service Provider Interface)는 Apache 라이브러리와 같이 확장으로 사용할 수 있는 일련의 기술, API 및 인터페이스입니다.

일부 CDI API 개념:

  • CDI Bean Discovery는 종속성 주입 프레임워크가 Bean을 구문 분석하고 검색하여 기본적으로 Bean, 즉 @Annotated와 같은 주석이 있는 Bean을 검색하는 방법을 제어하는 ​​메커니즘입니다. Bean 검색 모드에는 ALL(주석이 없는 Bean 포함), ANNOTATED 및 NONE의 세 가지 유형이 있습니다.

  • CDI 컨테이너는 Java 클래스가 해당 기능과 기능을 갖고 들어오고 나가는 팩토리 메소드입니다. Bean을 관리하는 애플리케이션입니다.

  • Bean 및 컨텍스트 인스턴스. Bean은 개발자가 생성하는 템플릿입니다. 상황별 인스턴스는 CDI 컨테이너에 의해 생성되고 관리되는 Bean의 인스턴스입니다.

자바 지속성 API

JPA는 객체를 관계형 데이터베이스 테이블에 매핑하는 데 사용됩니다. Java Persistence API는 ORM 선언문의 원칙을 따릅니다. ORM 매니페스트(객체 관계형 매핑 매니페스트):
  • 테이블이 아닌 개체: 개발자는 테이블이 아닌 개체를 작성합니다.

  • 무지가 아닌 편리함: ORM은 편리해야 합니다. 개발자는 관계형 데이터베이스에 대한 최소한의 지식을 가지고 있어야 합니다. ORM은 무지를 숨기는 방법이 아니라 편리함을 제공하는 것입니다.

  • 눈에 띄지 않고 투명함: ORM은 개발자가 데이터베이스에 있는 내용을 제어하고 저장된 내용을 완전히 제어할 수 있도록 만들어야 합니다. 레거시 데이터, 새 개체: ORM을 사용하면 레거시 데이터에서 새 개체를 만들 수 있습니다. 즉, 레거시 데이터베이스를 Java 개체로 재구성할 수 있습니다.

  • 충분하지만 너무 많지는 않습니다. ORM은 임피던스 불일치(데이터베이스 모델과 프로그래밍 언어 간의 차이로 인해 발생하는 문제를 나타내는 데 사용되는 용어)로 인한 일반적인 문제를 해결하는 모든 도구를 제공합니다. ORM은 지나치게 무거워서는 안 됩니다.

  • 지역성 및 이동성: 데이터는 로컬이지만 애플리케이션의 지속 상태가 애플리케이션의 다른 부분으로 이동하는 것이 가능해야 합니다.

  • 표준 API, 플러그형 구현: 표준 API를 사용하지만 필요에 따라 구현을 변경할 수 있습니다.

몇 가지 중요한 JPA 개념: JPA 엔터티
  • JPA 객체의 가장 모듈화된 구성 요소는 POJO(Plain Old Java Object)입니다. 각 객체에는 고유한 식별자가 있어야 합니다.

  • JPA 엔터티는 일반적으로 @MappedSuperClass와 같은 주석을 사용합니다. 이를 통해 공통 엔터티 필드가 포함된 슈퍼클래스를 사용할 수 있습니다. @AttributeOverride 주석은 슈퍼클래스 엔터티를 재정의하는 데 사용됩니다. @Column은 데이터베이스 매핑을 구성하는 데 사용됩니다. @Transient 주석은 데이터베이스에 매핑하면 안 되는 엔터티 클래스의 필드에 사용할 수 있습니다.

  • 액세스 유형은 지속성 공급자가 엔터티의 상태에 액세스하는 프로세스입니다. 필드 액세스는 공급자가 리플렉션을 통해 직접 클래스의 필드에 액세스할 때 발생합니다. 속성 액세스는 Java Bean 속성 메서드를 사용하여 상태에 액세스할 때 발생합니다. 즉, getter 및 setter가 사용됩니다. 속성 액세스를 사용하려면 getter에 @Id 주석을 달아야 합니다. 혼합 액세스 유형은 @Access 주석을 사용하여 동일한 엔터티 클래스의 필드와 속성 모두에 대한 액세스를 사용합니다.

RESTful 웹 서비스용 Java API

REST 아키텍처의 제한사항:
  1. 클라이언트와 서버는 서로 독립적입니다.

  2. 상태 비저장: 서버에 도착하는 각 개별 요청은 자율적이고 고유합니다. 서버는 이전 요청에서 어떠한 가정도 하지 않습니다.

  3. 캐시 가능성: 시스템은 성능과 확장성을 향상시키기 위해 다양한 수준에서 캐싱을 지원해야 합니다.

  4. 통합 인터페이스는 클라이언트가 서버의 리소스에 액세스하고 서버의 리소스와 상호 작용하기 위한 공통 통합 인터페이스를 가져야 함을 의미합니다. 다중 계층 시스템: 클라이언트가 로드 밸런싱을 지원하는 서버와 같은 다중 계층 시스템에 대해 걱정할 필요가 없는 방식으로 서버를 여러 계층으로 구현할 수 있습니다.

JAX-RS와 관련된 몇 가지 일반적인 개념은 다음과 같습니다.
  • HTTP GET 방법: 리소스에 대한 요청입니다. GET 요청 메서드는 멱등적입니다. 즉, 해당 메서드에 대해 동일한 요청을 반복적으로 수행해도 서버의 리소스나 데이터 상태가 변경되어서는 안 됩니다.

  • HTTP POST 방법: POST 요청은 서버에 새 리소스를 생성하는 데 사용됩니다. 이로 인해 서버의 데이터 세트가 변경됩니다. POST에는 일반적으로 페이로드 또는 서버에서 생성하려는 모든 항목이 게시되거나 첨부되는 본문이 있습니다.

  • HTTP PUT 방법: 의미론적으로 사용되어 서버의 리소스를 업데이트합니다.

  • HTTP DELETE 방법: 서버의 리소스를 삭제하는 데 사용됩니다.

  • 콘텐츠 유형. 쿼리 방법으로 사용하고 생성할 수 있는 콘텐츠 유형에는 XML, CSV, EXCEL, TEXT, JSON 등 여러 가지가 있습니다.

  • JAX-RS에는 메시지 본문 작성 개념이 있습니다. 이는 Java 유형을 클라이언트가 예상하는 유형으로 변환하는 데 사용되는 API 구성입니다. @Produces 주석을 사용하여 Java 객체의 응답이 변환되는 유형을 지정할 수 있습니다.

  • @Consumes 주석은 JAX-RS 런타임에 지정된 자원 메소드가 소비하는 컨텐츠 유형을 알려줍니다. 그런 다음 JAX-RS 런타임은 페이로드로 전달된 JSON 컨텐츠를 메소드 매개변수와 유형이 동일한 Java 객체로 변환합니다.

  • JAX-RS 예외 매퍼: 예외를 HTTP 응답에 매핑하는 데 사용되는 API 구성입니다. @Provider 주석은 JAX-RS 런타임에 예외 해결 프로그램을 프로그래밍 방식으로 등록하는 데 사용됩니다.

이것은 Java EE에 대한 매우 간단한 소개입니다. Java EE를 사용하여 웹 애플리케이션을 구축하려면 각 주요 API를 더 자세히 살펴봐야 합니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION