HelloWorld
로그인
HelloWorld
로그인
Intro
MINIMI
·
2023년 4월 10일
팔로우
0
JPA
JPA
목록 보기
1/9
1-1. JPA 개념
1) JPA란?
자바 진영의 ORM(Object Relational Mapping) 기술 표준으로 ORM 기술을 사용하기 위한 표준 인터페이스 모음
2) 특징
영속성 컨텍스트가 엔티티를 생명주기를 통해 관리
native SQL을 통해 직접 SQL을 해당 DB에 맞게 작성
DBMS별로 dialect 제공
3) 사용 이유
장점
객체지향과 관계지향이라는 서로 다른 패러다임 불일치 해소
객체지향 패러다임 중심의 개발 가능
개발자가 SQL문을 직접 작성하지 않아도 되어서 생산성 향상
설정 및 필드 변경시 SQL이 자동 수정 -> 유지보수성 향상
캐시를 활용한 성능 최적화로 인해 트랜잭션 처리 시간 단축
단점
복잡한 SQL에 부적합
JPA를 제대로 이해하지 못하고 작성시 성능 저하 발생
추가 라이브러리를 활용해야 할 수 있음
1-2. JPA 원리
1) 기본 동작 방식
Java 어플리케이션과 JDBC 사이에서 동작하며 내부적으로 JDBC API 활용
엔티티를 저장하는 환경인 영속성 컨텍스트(Persistence Context)를 통해 엔티티 보관 및 관리
엔티티(Entity) : @Entity @Table @Id @Column 과 같은 어노테이션을 통해 SQL이 아닌 DB 테이블과 매핑되게 작성 된 클래스
2) 엔티티의 영속성 컨텍스트에서의 생명 주기
엔티티 매니저가 엔티티를 저장하는 공간으로 엔티티를 보관하고 관리
엔티티 매니저가 생성될 때 하나의 영속성 컨텍스트가 만들어짐
엔티티의 생명 주기
3) 영속성 컨텍스트가 엔티티를 관리하는 원리
1차 캐시
영속성 컨텍스트 내부에 Map으로 관리 되는 캐시이며, 이 곳에 있는 엔티티는 캐시에서 바로 불러와서 조회 성능이 올라감
동일성 보장
반복해서 호출 시 1차 캐시에서 같은 엔티티 인스턴스를 가져옴
트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
엔티티 매니저는 트랜잭션을 커밋하기 직전까지 데이터 베이스에 저장(flush) 대신 쓰기 지연 SQL 저장소에 INSERT SQL을 차곡차곡 쌓게 됨.
커밋시에 쿼리를 데이터 베이스로 보냄.
플러시 절차
영속성 컨텍스트에 보관할 때 최초 엔티티 상태를 복사해서 스냅샷으로 저장해두고, 모든 엔티티를 스냅샷과 비교해서 수정된 엔티티를 찾아서 수정 쿼리를 만들어 쓰기 지연 SQL 저장소에 보냄
쓰기 지연 SQL 저장소의 쿼리를 데이터 베이스에 저장.
플러시를 하는 경우
em.flush()를 직접 호출
트랜잭션 커밋 시 플러시 자동 호출
JPQL 쿼리 실행 시 플러시 자동 호출
변경 감지
SQL에 의존적이지 않도록 엔티티의 데이터 변경을 감지하고 데이터베이스에 자동으로 반영하는 기능
영속성 컨텍스트에 보관할 때 최초 엔티티 상태를 복사해서 저장한 스냅샷과 이를 비교하여 감지.
영속 상태의 엔티티에만 적용
변경 감지 절차
플러시 호출
엔티티와 스냅샷 비교 후 변경 된 엔티티 찾기
변경된 엔티티와 관련된 수정 쿼리 생성 후 쓰기 지연 SQL 저장소에 보냄
쓰기 지연 저장소의 SQL을 데이터베이스로 보냄
데이터베이스에서 트랜잭션 커밋
MINIMI
DREAM STARTER
팔로우
다음 포스트
Persistence Context
0개의 댓글
댓글 작성