[JPA] JPA 소개
JPA란 무엇인가?
[JPA] JPA 소개
※ 코드는 강의에서 사용된 것과 다릅니다.
<a href = https://github.com/jaewon-ju/Learning_Spring>jaewon-ju Github Address</a>
✏️ JPA
객체를 관계형 데이터베이스에 저장할 때 발생하는 여러가지 문제점들이 존재한다.
| 문제점(차이점) | 설명 |
|---|---|
| 상속 | 객체에는 상속이 존재하지만, RDB에는 존재하지 않는다. |
| 연관관계 | 객체는 참조를 사용하지만, RDB는 FK를 사용한다. |
| 데이터 타입 | 객체와 RDB에 존재하는 데이터 타입이 다르다. |
| 데이터 식별 방법 | 객체 - 주소를 통한 식별, RDB - PK를 통한 식별 |
위와 같은 문제를 해결하기 위해선 ORM 기술이 필요하다.
ORM (Object-Relational Mapping)
: 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해 주는 기술
JPA (Java Persistence API)
: 자바 진영의 ORM 기술 표준
- JPA는 인터페이스이다.
- JPA의 구현체로는 Hibernate, EclipseLink 등이 존재한다.
■ JPA 동작 방식
애플리케이션과 JDBC 사이에서 동작, SQL을 객체로 자동 변환

■ JPA의 이점
-
- 1차 캐시와 동일성 보장
- 같은 트랜잭션 안에서는 같은 엔티티를 반환한다!
-
- 트랜잭션을 지원하는 쓰기 지연 기능
- 트랜잭션을 커밋할 때까지 쿼리를 모은 다음, 한꺼번에 전송한다.
- 지연 로딩과 즉시 로딩 옵션
- 지연 로딩: 객체가 실제 사용될 때 로딩
- 즉시 로딩: JOIN SQL로 한번에 연관된 객체까지 미리 조회
-
- JPA는 특정 데이터베이스에 종속되지 않는다.
- 각 데이터베이스의 방언에 맞게 SQL을 생성한다.
✏️ JPA의 구동 방식
구동 방식을 이해하기 전에, 3가지 요소를 알아야 한다.
1.
Persistence.xmlDB 설정에 필요한 정보를 기술해둔 파일 JPA는 이 파일을 바탕으로 DB의 정보를 가져온다.
Persistence.xml파일에는 ‘옵션’ 속성들이 존재한다.- 옵션에 존재하는
ddl.auto속성은 다음 5가지 값을 가질 수 있다.- create: 기존 테이블 삭제 후 재생성
- create-drop: create와 동일하나, 종료시 테이블 drop
- update: 변경된 부분만 수정
- validate: entity ⇔ table이 정상적으로 매핑되었는지만 확인
- none: 사용 X
⚠️ create, create-drop, update는 운영 서버에서는 사용하면 안된다!!!!
2. EntityManager
엔티티의 CRUD를 담당하는 인터페이스 엔티티와 관련된 모든 서비스를 담당한다.
- EntityManager의 작업은 트랜잭션 단위로 처리해야 한다.
- EntityManager는 쓰레드간에 공유되지 않는다.
3. EntityMangerFactory
EntityManager를 생성하는 공장 역할 수행
- EntityManagerFactory는
Persistence.xml파일의 정보를 토대로 생성한다.- EntityManagerFactory는 DB당 하나씩만 생성한다.
이제, JPA의 구동 방식에 대해서 알아보자.
Persistence.xml설정정보로EntityManagerFactory생성EntityManagerFactory는 필요할 때마다EntityManager생성EntityManager를 통해서 DB에 접근
✏️ JPQL
JPQL (Java Persistence Query Language)
: 엔티티 객체를 조회하는 객체 지향 쿼리
⚠️ JPQL은 테이블을 대상으로 쿼리를 하지 않고, 객체를 대상으로 쿼리를 한다.
- JPQL은 SQL을 추상화한 객체 지향 쿼리 언어이다.
- 특정 DB에 종속되지 않는다.
JPQL에 대해서는 이후에 더 자세히 설명하겠다.
REFERENCE
This post is licensed under
CC BY 4.0
by the author.