JPA(Java Persistence API)의 개념
1. [ JPA (Java Persistance API) 란? ]
•
자바 ORM 기술에 대한 표준 명세로 , JAVA에서 제공하는 API이다.
•
스프링에서 제공해주는 것이 아님!
•
JAVA Application에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
•
여기서 중요한 건 JPA는 말 그대로 인터페이스다! JPA는 특정 기능을 하는 라이브러리가 아니다. 스프링의 PSA에 의해서 (POJO를 사용하면서 특정기술을 사용하기 위해서) 표준 인터페이스를 정해두었는데, 그 중 ORM을 사용하기 위해 만든 인터페이스가 바로 JPA다.
•
기존 EJB에서 제공되던 엔터티 빈을 대체하는 기술
•
ORM이기 때문에 자바클래스와 DB테이블을 매핑한다(SQL을 매핑안함).
•
ORM을 사용하기 위한 인터페이스를 모아둔 것이며 , JPA를 사용하기 위해서는 JPA를 구현한 Hibernate, EclpiseLink, DataNucleus같은 ORM 프레임워크를 사용해야한다.
2. [ PSA란 ? ]
•
PSA란 Portable Service Abstratction의 약자로 환경의 변화와 관계없이 일관된 방식의 기술로의 접근 환경을 제공하려는 추상화 구조를 말한다.
3. [ ORM이란 ? ]
•
객체 지향 언어를 이용하여, 서로 호환되지 않는 타입 간의 데이터를 변환하는 기술
•
ORM이란 객체와 DB의 테이블이 매핑을 이루는 것을 말한다.
•
즉, 객체가 테이블이 되도록 매핑 시켜주는 것!
•
ORM을 이용하면 SQL Query가 아닌 직관적인 코드(method)로서 데이터를 조작할 수 있다.
•
예를들어, User 테이블의 데이터를 출력하기 위해서는 SELECT * FROM USER; 라는 Query를 실행해야하지만, ORM을 사용하면 User 테이블과 매핑된 객체를 user라 할 때, user.findAlll() 라는 메서드 호출로 데이터를 조회 가능!
•
ORM을 사용하면 생산성이 증가
•
단! Query가 복잡해지면 ORM으로 표현하는데 한계가 있고, 성능이 raw query에 비해 느리다는 단점이 있음
•
이걸 극복하기 위해 JPQL, QueryDSL등을 사용하거나 한 프로젝트 내에서 Mybatis와 JPA를 동시에 사용하기도 합니다.
4. [ JPA 동작과정 ]
•
JPA는 Application과 JDBC 사이에 동작한다.
•
개발자가 JPA를 사용하면 , JPA 내부에서 JDBC API를 사용하여 SQL를 호출하여 DB와 통신한다.
•
즉, 개발자가 직접 JDBC API를 쓰는것이 아니다.
5. [ JPA를 왜 사용해야 할까 ? ]
1.
SQL 중심적인 개발에서 객체 중심적인 개발이 가능하다
2.
생산성이 증가 → 메소드를 이용해 간단한 CRUD가 가능
3.
유지보수가 쉽다.
4.
Object와 RDB간의 패러다임 불일치 해결
6. [ Spring Data JPA 란 ? ]
스프링 데이터 JPA는 스프링 프레임워크의 한 파트입니다. 스프링 데이터 JPA의 목적은 데이터를 접근하는 계층에서 발생하는 반복적인 코드를 상당 부분 줄이려고 하는 것입니다.
스프링 데이터 JPA는 JPA provider가 아닙니다. 하이버네이트 같은 JPA provider 위에 추상화 계층을 따로 두어 관리하는 라이브러리/프레임워크입니다.
7. [ JPA, Hibernate, SpringData JPA의 전반적인 개념 그림 ]
하이버네이트는 JPA 구현체입니다. 반면에 스프링 데이터 JPA는 JPA에 대한 데이터 접근의 추상화라고 말할 수 있습니다. 스프링 데이터 JPA는 GenericDao라는 커스텀 구현체를 제공합니다. 이것으로 메소드의 명칭으로 JPA 쿼리들을 생성할 수 있습니다.
Spring Data를 사용하면 Hibernate, Eclipse LInk 등의 JPA provider를 사용할 수 있습니다. 또 한가지는 @Transaction 어노테이션을 통해 트랜잭션 영역을 선언하여 관리할 수 있습니다.
Spring Data JPA는 구현체나 JPA provider가 아닙니다. 단지 데이터 레이어(database와 같은)에 접근하기 위해 필요한 뻔한 코드들의 사용을 줄여주도록 하는 인터페이스입니다.
하이버네이트는 낮은 결합도의 이점을 살린 ORM 툴로써 API 레퍼런스르 제공합니다. 여기서 반드시 기억해야할 점은 Spring Data JPA는 항상 하이버네이트와 같은 JPA provider가 필요합니다.