-
01. JPA(Java Persistence API)BackEnd/JPA 2021. 8. 9. 18:00반응형
1. JPA란?
JPA란 JAVA의 ORM(Object-Relational Mapping) 기술 표준으로 JAVA 객체(Object)와 관계형 데이터베이스(RDB)를 중간에서 매핑해주는 ORM 프레임워크이다.
2. JPA 사용 이유
1) SQL 중심 > 객체 중심 개발
2) 생산성
> JPA가 SQL문을 만들어 주기 때문에 persist, find, setXX, remove 메서드로 CRUD 수행
3) 유지보수
> 컬럼 추가 시 SELECT/INSERT/UPDATE/DELETE 모든 DML문 수정이 필요했으나, JPA의 경우 필드만 추가
4) 패러다임의 불일치 해결
> 상속, 연관관계, 객체 그래프 탐색, 비교
5) 성능
(1) 1차 캐시와 같은 트랜잭션 안에서는 같은 엔티티를 반환하는 동일성 보장
(2) 트랜잭션을 지원하는 쓰기 지연(transaction write-behind)
> 트랜잭션을 커밋하기 전까지 INSERT SQL문을 모았다가 JDBC BATCH SQL 기능을 사용해 한번에 전송
> 트랜잭션 커밋 시 UPDATE, DELETE 실행 후 바로 커밋하기에 로우(ROW)락 시간 최소화
(3) 지연 로딩(Lazy Loading)
> JOIN SQL로 한번에 연관된 객체를 미리 조회하지 않고 객체가 실제 사용될 때 로딩
6) 데이터 접근 추상화와 벤더 독립성
> 데이터베이스를 변경해도 코드 수정 불필요. JPA가 방언(dialect)에 맞는 SQL문 작성
7) 표준
tip) 방언(dialect)
> SQL 표준을 지키지 않는 특정 DB만의 고유한 기능
3. JPA 구동 방식
> EntityManagerFactory는 하나만 생성해서 애플리케이션 전체가 공유, EntityManager는 쓰레드간 공유를 하지 않는다. JPA의 모든 데이터 변경은 트랜잭션 안에서만 실행한다.
4. 영속성 컨텍스트
> 영속성 컨텍스트란 엔티티를 영구 저장하는 환경이라는 뜻의 논리적인 개념이다. EntityManager를 통해 영속성 컨텍스트에 접근한다.
> 영속성 컨텍스트의 이점
1) 1차 캐시로 반복 가능한 읽기(REPEATABLE READ) 등급의 트랜잭션 격리 수준을 데이터베이스가 아닌 애플리케이션 차원에서 제공
2) 동일성(identity) 보장
3) 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
4) 변경 감지(Dirty Checking)
5) 지연 로딩(Lazy Loading)상태 정의 비영속 (new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 영속 (managed) 영속성 컨텍스트에 관리되는 상태 준영속 (detached) 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제 (removed) 삭제된 상태 메서드 정의 persist detached 상태의 엔티티를 다시 영속화 merge 최초 생성된 엔티티 영속화 flush 영속성 컨텍스트의 변경내용을 데이터베이스에 반영 detach 특정 엔티티만 준영속 상태로 전환 clear 영속성 컨텍스트 초기화 close 영속성 컨텍스트 종료 tip) 영속성 컨텍스트를 플러시하는 방법
1) em.flush() - 직접 호출
2) 트랜잭션 커밋 - 플러시 자동 호출
3) JPQL 쿼리 실행 - 플러시 자동 호출반응형'BackEnd > JPA' 카테고리의 다른 글
05. JPA 객체지향 쿼리 언어(JPQL) (0) 2021.08.13 04. JPA 값 타입 (0) 2021.08.13 03. JPA 연관관계 관리 (0) 2021.08.13 02. JPA Mapping Annotation (0) 2021.08.09