이 포스팅에서 작성하는 내용은 자바 ORM 표준 JPA 프로그래밍 (김영한 지음) 에서 발췌하였습니다.
JPA
- Java Persitence API
- JAVA의 ORM 기술 표준
- 인터페이스의 모음. (3가지 구현체 중, 하이버네이트를 대부분 사용)
ORM?
- Object-relational mapping(객체 관계 매핑)
- 대중적인 언어는 대부분 ORM 기술이 존재하며, JAVA의 ORM 기술 표준이 JPA이다.
- 객체는 객체 지향 언어가 지향하는 대로 모델링을 하면 되고, RDBMS는 RDBMS대로 설계
→ 객체와 RDBMS의 매핑 작업을 ORM이 도와줌.
JPA의 역사
1. EJB - 엔티티 빈
자바 표준 ORM이었으며, 이 기술이 획기적이었지만 사용하기 불편하여 잘 사용되지 않았다.
2. 하이버네이트
어느 개발자가 EJB를 참고하고 개선한 오픈소스. 이 때부터 관심이 높아지기 시작한다.
3. JPA
JAVA 에서 하이버네이트를 개발한 개발자를 데리고 다시 개발한 JPA ORM 표준 기술.
JPA의 구조
개발자가 직접 JDBC를 컨트롤하지 않고, JPA가 JDBC를 컨트롤한다.
JPA의 성능 최적화 기능
1. 1차 캐시와 동일성 보장
String memberId = "10";
Member member1 = jpa.find(Member.class, memberId); // SQL을 날려서 가져옴
Member member2 = jpa.find(Member.class, memberId); // 캐시에서 가져옴
// member1 == member2
- 같은 트랜잭션 안에서는 같은 엔티티를 반환
- 사실 그렇게 큰 최적화 기능은 아님. (트랜잭션이 워낙 짧기 때문)
2. 트랜잭션을 지원하는 쓰기 지연
- 트랜잭션이 시작하고 그 트랜잭션 안에 있는 쿼리들을 모았다가 한 번에 커밋 가능
3. 지연 로딩과 즉시 로딩 지원
- 지연 로딩 : 객체가 실제로 사용될 때 SQL을 조회하는 옵션
- 즉시 로딩 : 객체가 실제로 사용이 되기 전에 JOIN SQL로 한번에 연관된 객체까지 미리 조회하는 옵션
'BE > JPA' 카테고리의 다른 글
[JPA] 6. 영속성 컨텍스트란? (0) | 2022.04.11 |
---|---|
[JPA] 5. JPA에서 리스트를 조회해보자 (0) | 2022.04.05 |
[JPA] 4. JPA 맛보기 (0) | 2022.03.31 |
[JPA] 3. JPA 프로젝트 세팅 (0) | 2022.03.26 |
[JPA] 1. 왜 JPA를 공부해야 할까? (0) | 2022.03.16 |