맨위로가기

자바 퍼시스턴스

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

자바 퍼시스턴스 API(JPA)는 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 것을 돕는 API로, 자바 커뮤니티 프로세스를 통해 발전해왔다. JPA는 EJB 2.0의 복잡성을 개선하고, 다양한 서드파티 영속성 프레임워크의 기능을 통합하여 개발되었으며, Hibernate, EclipseLink, DataNucleus 등 여러 구현체를 가지고 있다. JPA는 2006년 JPA 1.0을 시작으로 2022년 Jakarta Persistence 3.1까지 여러 버전을 거치며 기능이 추가되었고, 엔티티, JPQL, 객체/관계 메타데이터 등으로 구성된다. JPA는 EJB, JDO, SDO, Hibernate, Spring Data JPA 등 관련 기술과 연관되어 사용되며 대한민국에서도 스프링 프레임워크와 연동하여 널리 활용된다.

더 읽어볼만한 페이지

  • 지속성 - 직렬화
    직렬화는 데이터 전송, 저장 등을 위해 데이터 구조를 바이트로 변환하는 과정이며, 아키텍처 독립성을 유지하고 다양한 형식으로 지원되지만 캡슐화 위반 등의 단점도 존재한다.
  • 지속성 - 마샬링 (컴퓨터 과학)
    마샬링은 컴퓨터 과학에서 프로세스나 스레드 간 데이터 전송을 위해 객체의 상태를 바이트 스트림 형태로 변환하는 과정이며, 원격 프로시저 호출 구현에 필수적이고 직렬화의 한 단계로 간주될 수 있지만, 프로그래밍 언어에 따라 직렬화와 상호 교환적으로 사용되거나 정의와 사용법에 차이가 있다.
  • 객체 관계 매핑 - 마이바티스
    마이바티스는 자바 객체를 SQL 구문에 매핑하는 ORM 프레임워크이며, JDBC보다 단순한 코딩과 SQL 문 실행을 지원하고, XML 파일이나 어노테이션에 SQL 문을 저장하여 관리하며, 스프링 프레임워크와의 통합, 선언적 데이터 캐싱, 코드 생성기 등의 기능을 제공한다.
  • 객체 관계 매핑 - 엔티티 프레임워크
    엔티티 프레임워크는 .NET 환경에서 O/R 매핑을 통해 데이터베이스 작업을 간편하게 처리하도록 마이크로소프트에서 개발한 기술로, 개발자가 엔티티를 통해 데이터를 조작하여 코드 양을 줄이고 애플리케이션 개발 및 유지보수를 간소화하며, 다양한 데이터베이스 시스템과의 호환성을 제공한다.
  • 자바 API - 자바 암호화 확장
  • 자바 API - 표준 위젯 툴킷
    표준 위젯 툴킷(SWT)은 자바 GUI 툴킷으로, 네이티브 룩앤필과 고성능을 위해 윈도 시스템의 그래픽 요소를 직접 사용하며, 이클립스 IDE의 기반 기술로 IBM에 의해 개발되었다.
자바 퍼시스턴스
일반 정보
이름자카르타 퍼시스턴스
이전 이름자바 퍼시스턴스 API
약칭JPA
유형자바 API
개발자오라클
현재 유지 관리자Eclipse Foundation
최초 출시2006년
안정화 버전자카르타 퍼시스턴스 3.1 (2022년 5월 22일 출시)
자카르타 퍼시스턴스 2.2 (2019년 3월 22일 출시)
기술 정보
운영체제크로스 플랫폼
라이선스Eclipse Public License
웹사이트자카르타 퍼시스턴스 공식 웹사이트

2. 역사

JPA는 자바 커뮤니티 프로세스(JCP)를 통해 발전해왔다.

자바 퍼시스턴스 API 역사
JPA 버전발표자바 플랫폼중요한 변화
JPA 1.02006Java EE 5
JPA 2.02009Java EE 6
JPA 2.12013



JPA 1.0 사양은 2006년 5월 11일에 자바 커뮤니티 프로세스 JSR 220의 일부로 최종 출시되었다.[1] JPA 2.0 사양은 2009년 12월 10일에 출시되었고(Java EE 6 플랫폼은 JPA 2.0을 필요로 한다),[1] JPA 2.1 사양은 2013년 4월 22일에 출시되었다(Java EE 7 플랫폼은 JPA 2.1을 필요로 한다).[2] JPA 2.2 사양은 2017년 여름에 출시되었다. 최신 버전인 JPA 3.1 사양은 2022년 봄에 Jakarta EE 10의 일부로 출시되었다.[3]

자바 퍼시스턴스 API 1.0은 [http://www.jcp.org/en/jsr/detail?id=220 JSR 220] (EJB 3.0) 전문가 그룹의 작업의 일부로서 2006년5월 11일에 제정되었다. JPA 2.0은 [http://www.jcp.org/en/jsr/detail?id=317 JSR 317]로서, 2009년12월 10일에 Java EE 6 및 EJB 3.1과 같은 날에 승인되었다. JPA 2.1은 [https://jcp.org/en/jsr/detail?id=338 JSR 338]로서, 2013년4월 22일에 승인되었다.

EJB 2.0까지의 엔티티 빈과 같은 엔터프라이즈 빈은 너무 무겁고 복잡하며, Java EE 애플리케이션 서버에서만 사용할 수 있다는 문제가 있었다. 이 때문에, 그 대안으로 데이터 액세스 객체나 오픈 소스 프레임워크를 사용한 가벼운 영속성 객체가 많이 사용되었다. 이러한 서드파티 영속성 프레임워크의 기능을 집약한 것이 Java Persistence API이며, Hibernate나 TopLink와 같은 프로젝트도 현재는 Java Persistence API를 구현하고 있다.

2. 1. JPA 1.0 (2006)

JPA 1.0 사양은 2006년 5월 11일, 자바 커뮤니티 프로세스 JSR220에서 최종 배포되었다. Java Persistence API 1.0은 JSR 220 (EJB 3.0) 전문가 그룹의 작업의 일부로서 제정되었다.

EJB 2.0까지의 엔티티 빈과 같은 엔터프라이즈 빈은 너무 무겁고 복잡하며, Java EE 애플리케이션 서버에서만 사용할 수 있다는 문제가 있었다. 이 때문에, 그 대안으로 데이터 액세스 객체나 오픈 소스 프레임워크를 사용한 가벼운 영속성 객체가 많이 사용되었다. 이러한 서드파티 영속성 프레임워크의 기능을 집약한 것이 Java Persistence API이며, Hibernate나 TopLink와 같은 프로젝트도 현재는 Java Persistence API를 구현하고 있다.

2. 2. JPA 2.0 (2009)

JPA 2.0은 JSR 317로 2009년 12월 10일에 발표되었으며, Java EE 6 플랫폼의 일부로 포함되었다.[14] 이 버전에서는 객체-관계 매핑 기능이 확장되어, 다대일 관계로 연결된 내장 객체들의 콜렉션 및 리스트 정렬을 지원하고 접근 유형 조합이 가능해졌다. 또한, Criteria 쿼리 API, SQL 힌트 표준화, DDL 생성 지원을 위한 추가 메타데이터 표준화, 유효성 검사 및 공유 객체 캐시 지원 등 다양한 기능이 추가되었다.[15]

JPA 2.0을 지원하는 벤더로는 바투 JPA, 데이터뉴클리어스(구 JPOX), 이클립스링크(구 오라클 톱링크), IBM WebSphere Application Server용, JBoss with Hibernate, ObjectDB, OpenJPA, OrientDB, Versant Corporation JPA 등이 있다.

2. 3. JPA 2.1 (2013)

JPA 2.1은 JSR 338로 2013년 4월 22일에 발표되었으며, Java EE 7 플랫폼의 일부로 포함되었다. 주요 기능으로는 데이터베이스와 객체 유형 간 변환을 위한 컨버터, Criteria API를 이용한 대량 갱신 및 삭제, 엔티티 그래프 등이 추가되었다.

JPA 2.1 버전 개발은 2011년 7월 JSR 338로 시작되었으며, 2013년 5월 22일에 최종 승인되었다.

추가된 주요 기능은 다음과 같다:

  • 변환기(Converters): 데이터베이스와 객체 유형 간의 사용자 정의 코드 변환을 허용한다.
  • Criteria 갱신/삭제: Criteria API를 통해 대량 갱신 및 삭제를 할 수 있다.
  • 엔티티 그래프: 객체의 부분 또는 지정된 페칭(fetching) 또는 병합을 지원한다.
  • JPQL/Criteria 개선: 산술 하위 쿼리, 일반 데이터베이스 함수, JOIN ON 절, TREAT 옵션을 지원한다.
  • 스키마 생성
  • 저장 프로시저 지원


JPA 2.1을 지원하는 벤더는 다음과 같다:

  • DataNucleus
  • EclipseLink
  • Hibernate
  • OpenJPA (버전 2.2.0부터)

2. 4. JPA 2.2 (2017)

JPA 2.2는 유지 보수 릴리스로, 2017년에 JSR 338 하에 개발이 시작되었다. 유지 보수 검토는 2017년 6월 19일에 승인되었다.

주요 기능은 다음과 같다.

  • 모든 관련 어노테이션에 `@Repeatable` 추가
  • 메타 어노테이션에서 JPA 어노테이션 사용 지원
  • 쿼리 결과 스트리밍
  • `AttributeConverter`가 CDI 주입 가능하도록 지원
  • Java 8 날짜 및 시간 타입 지원


JPA 2.2를 지원하는 벤더는 다음과 같다.

  • 데이터뉴클리어스(버전 5.1부터)
  • 이클립스링크(버전 2.7부터)
  • 하이버네이트(버전 5.3부터)
  • 오픈JPA(버전 3.0부터)

2. 5. Jakarta Persistence 3.0 (2020)

JPA는 2019년에 자카르타 퍼시스턴스로 이름이 변경되었으며, 3.0 버전은 2020년에 출시되었다. 여기에는 패키지 및 속성 이름을 `javax.persistence`에서 `jakarta.persistence`로 변경하는 작업이 포함되었다.

자카르타 퍼시스턴스 3.0을 지원하는 벤더는 다음과 같다:

  • DataNucleus (버전 6.0부터)
  • EclipseLink (버전 3.0부터)
  • Hibernate (버전 5.5부터)
  • OpenJPA (버전 4.0부터)

2. 6. Jakarta Persistence 3.1 (2022)

Jakarta Persistence 3.1은 2022년에 출시되었으며, Jakarta EE 10의 일부이다.[3] 실행을 위해 최소 Java 11이 필요하다. UUID 처리 개선, 수학 및 날짜/시간 처리를 위한 다양한 새로운 JPQL 함수, 기타 작은 변경 사항이 추가되었다.[16]

Jakarta Persistence 3.1을 지원하는 공급업체는 다음과 같다.

  • 데이터뉴클리어스(DataNucleus) (버전 6.0부터)
  • 이클립스링크(EclipseLink) (버전 4.0부터)[17]
  • 하이버네이트(Hibernate) (버전 6.0부터)[18]
  • 오픈JPA(OpenJPA) (버전 4.0부터)

3. 구성 요소

자바 퍼시스턴스 API는 아래의 세 가지 영역으로 구성된다.


  • `jakarta.persistence` 패키지 (JPA 3.0 이전에는 `javax.persistence`)에 정의된 API 그 자체
  • 자바 퍼시스턴스 쿼리 언어 (JPQL)
  • 객체/관계 메타데이터


자카르타 영속성 쿼리 언어(JPQL; 이전에는 자바 영속성 쿼리 언어)는 관계형 데이터베이스에 저장된 엔티티에 대한 쿼리를 수행하는 객체 지향 쿼리 언어이다. 쿼리는 SQL 쿼리와 구문이 유사하지만, 데이터베이스 테이블을 직접 사용하는 대신 엔티티 객체를 대상으로 작동한다.

자바 퍼시스턴스 쿼리 언어(Java Persistence Query Language, JPQL)는 관계형 데이터베이스에 저장된 엔티티에 대한 쿼리를 수행하는 데 사용된다. 문법적으로는 SQL과 유사하지만, 데이터베이스의 테이블을 직접 조작하는 대신 엔티티 객체를 조작한다.

객체/관계 메타데이터는 어노테이션 또는 XML 파일을 사용하여 엔티티와 데이터베이스 테이블 간의 매핑 정보를 정의한다.

3. 1. API

자바 퍼시스턴스 API는 아래의 세 가지 영역으로 구성된다.

  • `jakarta.persistence` 패키지 (JPA 3.0 이전에는 `javax.persistence`)에 정의된 API 그 자체
  • 자바 퍼시스턴스 쿼리 언어 (JPQL)
  • 객체/관계 메타데이터

3. 2. JPQL (Jakarta Persistence Query Language)

자카르타 영속성 쿼리 언어(JPQL; 이전에는 자바 영속성 쿼리 언어)는 관계형 데이터베이스에 저장된 엔티티에 대한 쿼리를 수행하는 객체 지향 쿼리 언어이다. 쿼리는 SQL 쿼리와 구문이 유사하지만, 데이터베이스 테이블을 직접 사용하는 대신 엔티티 객체를 대상으로 작동한다.

자바 퍼시스턴스 쿼리 언어(Java Persistence Query Language, JPQL)는 관계형 데이터베이스에 저장된 엔티티에 대한 쿼리를 수행하는 데 사용된다. 문법적으로는 SQL과 유사하지만, 데이터베이스의 테이블을 직접 조작하는 대신 엔티티 객체를 조작한다.

3. 3. 객체/관계 메타데이터

자바 퍼시스턴스 API는 세 가지 영역으로 구성되는데, `javax.persistance` 패키지에 정의된 API 자체, 자바 퍼시스턴스 쿼리 언어 (JPQL), 그리고 객체/관계 메타데이터이다. 객체/관계 메타데이터는 어노테이션 또는 XML 파일을 사용하여 엔티티와 데이터베이스 테이블 간의 매핑 정보를 정의한다.

4. 엔티티

퍼시스턴스 엔티티관계형 데이터베이스의 테이블로 지속되는 경량 자바 클래스이다. 이러한 엔티티는 테이블에서 개개의 행에 해당한다. 엔티티는 일반적으로 다른 엔티티들과 관계가 있으며 이러한 관계는 객체/관계형 메타 데이터를 통해 표현된다. 객체/관계형 메타데이터는 어노테이션을 사용하여 엔티티 클래스 파일에 직접 명시하거나 응용프로그램과 함께 배포되는 별도의 XML 설명자 파일에서 지정할 수 있다.

```java

@Entity

public class Person {

@Id

private long id;

private String firstName;

private String lastName;

private int age;

}

```

`@Entity` 어노테이션은 클래스가 엔티티를 나타낸다고 선언한다. `@Id`는 엔티티의 기본 키 역할을 하는 속성을 선언한다.

5. 관련 기술

5. 1. EJB (Enterprise JavaBeans)

JPA는 초기 EJB 3.0 사양의 일부로 정의되었다.[4] EJB 3.0은 Java EE 5 플랫폼의 일부이다. 하지만 JPA를 사용하는 응용 프로그램을 구동하기 위해 EJB 컨테이너나 Java EE 애플리케이션 서버가 필수적인 것은 아니다.[4]

자바 퍼시스턴스 API는 EJB 2.0 CMP(컨테이너 관리 영속성)의 영속성 솔루션을 대체한다. Java Persistence API 2.0은 EJB 3.1과 분리되어 독립적인 JSR 사양으로 정의되었다. EJB 3.1 및 JPA 2.0은 Java EE 6의 일부이다.

5. 2. JDO (Java Data Objects)

JPA는 자바 데이터 객체(JDO) API와 EJB 2.0 컨테이너 관리 퍼시스턴스(CMP) API를 통합하기 위한 노력의 일환으로 개발되었다.[5] JPA는 객체-관계형 매핑(ORM)에 중점을 두어 관계형 데이터베이스 관리 시스템에 대한 지속성을 지정한다.[5] 반면, JDO 사양은 ORM뿐만 아니라 플랫 파일 데이터베이스NoSQL 데이터베이스를 포함하여 문서 데이터베이스, 그래프 데이터베이스 등 다양한 데이터 저장소를 지원한다.[5]

5. 3. SDO (Service Data Object)

서비스 데이터 객체(SDO) API(JSR 235)는 자바 퍼시스턴스 API와는 매우 다른 목표를 가지고 있으며, 보완적인 것으로 여겨진다.[7][8] SDO API는 서비스 지향 아키텍처(SOA)를 위해 설계되었으며, 관계형 데이터뿐만 아니라 다양한 데이터 형식 및 여러 프로그래밍 언어를 위해 설계되었다.[7][8] 자바 커뮤니티 프로세스는 SDO API의 자바 버전을 관리하고, C++ 버전의 SDO API는 OASIS를 통해 관리된다.[6]

5. 4. 하이버네이트 (Hibernate)

개빈 킹(Gavin King)이 설립한 하이버네이트(Hibernate)는 자바를 위한 오픈 소스 객체 관계 매핑 프레임워크이다. 버전 3.2 이상은 자바 퍼시스턴스 API(JPA)에 대한 구현을 제공한다.[9][10] 개빈 킹은 JPA 개발을 담당하는 JCP 전문가 그룹인 JSR 220에서 JBoss를 대표했다.[11] 썬 마이크로시스템즈는 하이버네이트와 자바 데이터 객체를 포함한 여러 프레임워크에서 아이디어를 얻었다고 밝혔다.[12]

EJB 2.0까지의 엔티티 빈과 같은 엔터프라이즈 빈은 너무 무겁고 복잡하며, Java EE 애플리케이션 서버에서만 사용할 수 있다는 문제가 있었다. 이 때문에, 그 대안으로 데이터 액세스 객체나 오픈 소스 프레임워크를 사용한 가벼운 영속성 객체가 많이 사용되었다. 이러한 서드파티 영속성 프레임워크의 기능을 집약한 것이 Java Persistence API이며, Hibernate나 TopLink와 같은 프로젝트도 현재는 Java Persistence API를 구현하고 있다.

5. 5. 스프링 데이터 JPA (Spring Data JPA)

스프링 데이터 JPA는 자바 애플리케이션 프레임워크 스프링 프레임워크를 기반으로 하는 도메인 주도 설계의 핵심 구성 요소인 리포지토리 추상화의 구현체이다. 사용 가능한 모든 JPA 구현을 투명하게 지원하며, CRUD 연산과 데이터베이스 쿼리의 편리한 실행을 지원한다.[13] 대한민국에서는 전자정부 표준프레임워크와 스프링 프레임워크의 연동이 활발하여, 스프링 데이터 JPA의 활용도가 높다.

6. 한국에서의 활용

참조

[1] 웹사이트 JavaEE 6 tutorial http://docs.oracle.c[...] Oracle
[2] 웹사이트 JavaEE 7 tutorial https://docs.oracle.[...] Oracle
[3] 웹사이트 Jakarta Persistence 3.1 https://jakarta.ee/s[...] jakarta.ee 2022-07-27
[4] 문서 Hibernate EntityManager: Java SE environments http://docs.jboss.or[...]
[5] 웹사이트 Jakarta Persistence https://jakarta.ee/s[...] 2021-10-05
[6] 웹사이트 JSR 220 Members http://jcp.org/en/js[...]
[7] 웹사이트 SDO and JPA http://charltonb.typ[...] 2011-05-05
[8] 웹사이트 SDO and Java Persistence Architecture (JPA) http://www.osoa.org/[...] osoa.org 2011-05-05
[9] 웹사이트 hibernate.org - Java Persistence with Hibernate http://www.hibernate[...] JBoss 2008-11-17
[10] 서적 Java Persistence with Hibernate https://books.google[...] Manning Publications 2015-11-08
[11] 웹사이트 JBoss.com - Industry Leadership http://www.jboss.com[...] JBoss 2008-11-17
[12] 웹사이트 Java Persistence API FAQ http://java.sun.com/[...] Sun Microsystems 2010-07-01
[13] 웹사이트 Spring Data - Project website https://projects.spr[...] Pivotal 2018-02-26
[14] 웹사이트 IBM WebSphere Application Server V7 Feature Pack for OSGi Applications and Java Persistence API http://www-01.ibm.co[...] IBM 2010-04-27
[15] 웹사이트 Versant JPA 2-Step Download http://community.ver[...] Actian
[16] 웹사이트 What's New in Jakarta Persistence 3.1 https://newsroom.ecl[...] Eclipse Foundation
[17] 웹사이트 EclipseLink's TCK Results https://www.eclipse.[...] Eclipse Foundation 2022-07-27
[18] 웹사이트 Hibernate ORM 6.0 series https://hibernate.or[...] hibernate.org 2022-07-27



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com