- 이글은 JPA 프로그래밍 책을 읽고 정리한 내용입니다.
JPA 장점
- 반복되는 작업을 줄일 수 있음 (-> SQL 작성 및 조회한 데이터와 객체를 매핑하는 추가작업 등)
- 패러다임의 불일치 해결 가능(-> 객체 중심의 사고 확장 가능, 객체 중심의 탐색 가능)
- 툭정 구현 기술에 대한 의존성을 줄일 수 있음
JPA란?
- 자바 ORM 기술 표준
ORM? : 객체와 관계형 데이터베이스를 매핑하여, 패러다임의 불일치 문제를 해결)
JPA를 사용해야하는 이유
- 생산성 : 반복적인 SQL 작성 등의 작업을 줄일 수 있음
- 유지보수 : SQL의존 개발과 달리 필드 수정과 같은 작업이 발생하면 변경이 용이
- 패러다임 불일치 해결 : 객체지향 관점에서 상속, 연관관계, 그래프 탐색 등 패러다임 불일치 문제 해결
- 성능 : 영속성 컨텍스트를 활용하여, 캐싱을 통해 성능 향상 가능
- 데이터 접근 추상화와 벤더 독립성 : 벤더에 독립적, 변경이 용이
영속성 컨텍스트
특징
- 영속성 컨텍스트와 식별자 값 : @Id 식별자 값 바탕으로 구분
- 영속성 컨텍스트와 데이터베이스 저장 : 플러시 발생 시, 데이터베이스 반영
장점
- 1차 캐시 : 영속성 컨텍스트 내의 메모리로부터 데이터를 조회후 반환 (@Id를 통한 조회 시)
- 동일성 보장 : 영속성 컨텍스트 내에서 조회 시, 동일한 객체를 반환함으로써 동일성(==)비교 보장
- 트랜잭션을 지원하는 쓰기 지연 : 커밋시점 전까지 INSERT SQL을 모아두고(쓰기 지연 SQL 저장소에 모아둠), 커밋 시(flush 호출), 데이터베이스에 보냄으로써, 쓰기지연 가능
- 변경 감지 : 엔티티의 변경 사항을 데이터베이스에 반영 (-> 엔티티와 스냅샷(=최초상태)을 비교하여,쓰기 지연 SQL 저장소에 모아두고, 커밋시 반영
- 지연 로딩 : 영속 상태의 엔티티와 연관된 엔티티는 지연하여 로딩할 수 있음