취미로 음악을 하는 개발자

[Spring Framework] JPA 및 관련 개념 본문

공대인/Spring[Boot]

[Spring Framework] JPA 및 관련 개념

영월특별시 2019. 9. 9. 18:40
728x90

자바 지속성 API(Java Persistence API, JPA)는 자바 플랫폼 SE와 자바 플랫폼 EE를 사용하는 응용프로그램에서 관계형 데이터베이스의 관리를 표현하는 자바 API이다.


기존에 EJB에서 제공되던 엔터티 빈(Entity Bean)을 대체하는 기술





엔터프라이즈 자바빈즈(Enterprise JavaBeans, EJB)는 기업환경의 시스템을 구현하기 위한 서버측 컴포넌트 모델이다. 즉 EJB는 애플리케이션의 업무 로직을 가지오 있는 서버 애플리케이션이다. EJB 사양은 Java EE의 자바 API 중 하나로, 주로 웹 시스템에서 JSP는 화면 로직을 처리하고, EJB는 업무 로직을 처리하는 역할을 한다.



EJB 종류

세션 빈(Session Bean) : DB 연동이 필요 없음

엔터티 빈(Entity Bean) 

데이터베이스의 데이터를 관리하는 객체

삽입 수정 삭제 조회

DB 관련 쿼리는 자동으로 만들어지고 개발자는 고급 업무 처리에 집중 가능

DB가 수정되면 코드 수정 없이 다시 배포


메시지 구동 빈(Message-driven Bean) : JMS로 빈을 날려줌





JPA는 EJB 3.0 스펙의 일부로 정의가 되어 있지만 EJB 컨테이너에 의존하지 않으며 EJB, 웹 모듈 및 Java SE 클라이언트에서 모두 사용이 가능하다.


JPA는 아래 세 가지 영역으로 구성된다

javax.persistance 패키지로 정의된 API 그 자체

자바 퍼시스턴스 쿼리 언어

객체 / 관계 메타데이터





JPA 2.0

: 2007년 자바 커뮤니티 프로세스에서 JSR317로 시작되고 최종 버전은 2009년 12월 10에 승인 됨.


기능

확장된 객체-관계형 매핑(ORM) 가능

ORM과 다대일 관계로 연결된 내장 객체들의 콜랙션 지원

리스트 정렬

접근 유형 조합


Criteria 쿼리 API

SQL 힌트의 표준화

DDL 생성 지원을 위한 추가적인 메타데이터 표준화

유효성 검증 지원

공유 객체 캐시 지원


지원

Batoo JPA

DataNucleus

EclipseLink

IBM, WebSphere WAS

JBoss(Hibernate)

Kundera

ObjectDB

OpenJPA

OrientDB

Versant Corporation JPA


JPA 2.1

: 2011년 7월, 자바 커뮤니티 프로세스에서 JSR338로 시작되고 최종 버전은 2013년 5월 22일에 승인 됨.


기능

변환기 : 데이터베이스와 객체 유형간의 사용자 정의 코드 변환기를 허용

Criteria 갱신/삭제 : Criteria API를 통해 대용량 갱신과 삭제가 허용

엔티티 그래프 : 객체의 부분적 또는 선택적 갱신 또는 병합 허용

JPQL/Criteria 개선 : 산술적 서브 쿼리, 일반적 데이터베이스 함수, JOIN ON 구절, TREAT 옵션

스키마 생성

저장 프로시서 : 데이터베이스 저장 프로시저를 정의하기 위한 쿼리를 허용


지원

DataNucleus

EclipseLink

Hibernate



JPA 2.2

: 2017년 JSR338로 시작되고 최종 버전은 2017년 6월 19일에 승인 됨.


기능

모든 관련 주석에 @Repeatable 추가

모든 JPA 주석을 메타 주석에 사용 가능

쿼리 결과를 스트리밍하는 기능 추가

AttributeConverters가 CDI 주입 가능하도록 허용

Java 8 날짜 및 시간 유형 지원


지원

DataNucleus (5.1~)

EclipseLink (2.7~)

Hibernate (5.3~)

OpenJPA (3.0~)




관련 기술

- 자바 데이터 오브젝트 API

: EJB 2.0 컨테이너 관리 퍼시스턴스 API를 통합하기 위한 일부로서 개발됨.


- Hibernate

: 자바를 위한 오픈소스 객체-관계 매핑 프레임워크를 제공

 버전 3.2와 그 이후 버전에서는 JPA를 위한 구현을 제공


- 서비스 데이터 오브젝트 API

: JPA 설계자는 하이버네이트 및 탑링크와 같은 객체-관계형 매핑 도구에서 관계형 지속성을 제공




ORM , Object Relational Mapping

: 객체지향에서 클래스로 설계하는 모습과 데이터베이스의 테이블 구조가 거의 유사하다. 이러한 유사점이 "데이터베이스와 객체지향을 한 번에 처리할 수 있지 않을까" 라는 생각으로 시작하게 된다.

ORM은 특정 언어에 종속된 개념이 아니라 객체지향과 관계형 데이터베이스를 매핑시킨다는 추상화된 개념이다.

JPA는 이 개념을 Java 언어에 구현하기 위한 스펙이다.



좀 더 쉽게 설명하자면 기존의 JDBC 등을 이용해서 직접 구현했던 데이터베이스 관련 작업을 대신 처리해 주는 추상화된 계층의 구현 스펙이라고 할 수 있다.


JPA를 이용하면 데이터베이스에 대한 처리를 JPA 계층에서 처리하기 때문에 좀 더 추상화된 형태의 코드를 제작하는 것만으로 개발이 가능하다.


JPA 그 자체로는 스펙에 불과하기 때문에 이를 실제로 구현한 제품이나 프레임워크들의 존재가 필수적이다. 예를 들면 Servlet이라는 기술 스펙을 Tomcat에서 구현한 것처럼, JPA를 구현한 구현체 중에서 스프링 부트 프로젝트에서는 Hibernate라는 것을 이용하게 된다. 



출처 : 위키백과, 나무위키

Comments