JPA
- ORM 기술 표준
- ORM : 객체 관계 매핑
- 객체는 객체대로 설계하고 관계형 데이터베이스는 관계형 데이터베이스대로 설계
- ORM 프레임워크가 중간에서 매핑
JPA를 사용해야 하는 이유
- SQL 중심적인 개발에서 객체 중심으로 개발
- 생산성 : CRUD가 간단해짐
- 유지보수가 간편
- 패러다임의 불일치 해결
- 상속 : JPA가 알아서 저장시에는 insert 문을 여러개 날려주고, 조회시에는 join 해줌
- 연관관계
- 객체 그래프 탐색 : 지연로딩과 즉시 로딩을 통해 관련된 객체를 가져올 수 있음
- 비교 : 동일한 트랜잭션에서 조회한 엔티티는 같음을 보장
- 성능
- 1차 캐시와 동일성 보장
- 트랜잭션을 지원하는 쓰기 지연
- 지연 로딩
데이터베이스 방언
- JPA는 특정 데이터베이스에 종속되지 않음
- 각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다른데, JPA를 사용하면 설정을 통해 데이터베이스 방언 지원
JPA 구동 방식
- 엔티티 매니저 팩토리는 애플리케이션 로딩 시점에 딱 하나만 만들어야함
- 일관적인 단위를 할때마다(고객의 요청이 올 때마다) 엔티티 매니저를 생성
- 엔티티 매니저는 쓰레드간에 공유 X (사용하고 버려야 함)
- 사용을 다 하고 나면 엔티티 매니저, 엔티티 매니저 팩토리를 꼭 닫아줘야함
- 스프링을 사용하면 이 작업(생성, 종료)들을 스프링이 다 해줌
- JPA의 모든 데이터 변경은 트랜잭션 안에서 실행 (조회는 트랜잭션 선언하지 않아도 동작)
JPQL
- JPA를 사용하면 엔티티 객체를 중심으로 개발하기 때문에 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색 > JPQL 사용
- 객체 지향 SQL
- JPQL은 엔티티 객체를 대상으로 쿼리하고, SQL은 데이터베이스 테이블을 대상으로 쿼리
- SQL을 추상화해서 특정 데이터베이스 SQL에 의존 X
- 방언을 바꿔도 JPQL를 변경할 필요 X
출처
[인프런] 자바 ORM 표준 JPA 프로그래밍 - 기본편