- JPA - 영속성 컨텍스트, 1차 캐시2025년 01월 20일
- imaginaring
- 작성자
- 2025.01.20.:27
ORM (객체관계매핑) - 자바 객체와 DB 테이블을 매핑하여 객체지향적 + DB간 불일치 해결
영속성 컨텍스트 - JPA에서 엔티티 상태 관리, DB와 프로그램 사이의 중간 저장소 역활
Entity 상태 (생명주기)
- 비영속 (new / transient) - 아직 영속성 컨텍스트에 저장되지 않은 상태
- 영속 (managed) - 영속성 컨텍스트에 저장되어 관리되는 상태
- 준영속 (detached) - 영속성 컨텍스트에서 분리된 상태
- 삭제 (removed) - 삭제된 상태, 트랜젝션 커밋 시 DB에서 삭제됨
영속성 컨텍스트 이점
- 1차 캐시 : Entity Manager(이후 EM)를 거쳐간 엔티티는 1차 캐시에 저장됨, 동일 트랜잭션 내에서 1차 캐시를 우선적으로 조회하여 DB 쿼리를 줄인다
1차 캐시 테이블 ID 엔티티 스냅샷 삭제여부 - 동일성 보장 : 같은 영속성 컨텍스트 내에서는 동일한 엔티티 객체를 보장
- 트랜잭션을 지원하는 쓰기 지연 : 여러 INSERT / UPDATE 등 쿼리를 트랜잭션 종료 시점에 일괄 처리
- MySql / Oracle 등 DB 벤더에 따라 순서가 조금 다르다
- MySql 같은 경우 우선 쿼리 이후 ID값이 반환되어 1차 캐시에 저장되지만,
- 오라클 같은 경우 1차 캐싱 이후 쿼리를 진행한다
- 삭제시 1차 캐시 테이블에 삭제 여부를 기록한다
- EM.remove 이후에 EM.find 실행시 쿼리가 실행되지 않는다, 왜냐? 1차 캐시 테이블에 삭제 여부를 조회하여 DB 테이블 조회 없이 null이 반환된다
- 변경 감지 (더티 체크) : 영속 상태의 엔티티에 대한 변경이 감지되면 자동으로 DB에 반영된다 (스냅샷을 활용하여 이전 데이터와 비교)
- 지연로딩 : 연관된 엔티티를 실제로 사용할 때 로드한다
영속성 컨텍스트 개념
- 영속성 컨텍스트는 EntityManager에 의해 관리되는 일련의 엔티티 인스턴스. 이 컨텍스트는 엔티티와 데이터베이스 간의 상태를 동기화하고 변경 사항을 추적
- 엔티티 인스턴스의 생명 주기를 관리하고, 트랜잭션이 커밋될 때 데이터베이스와 동기화를 보장 (테스트에서 디폴트는 롤백이다.. 그냥.. 그렇다고)
- EM 범위 내에서 관리, 트랜잭션 범위와 일치할 수도 있음
1차 캐시 개념
- 1차 캐시는 영속성 컨텍스트에 포함된 캐시 메커니즘. 엔티티 인스턴스가 EntityManager에 의해 관리될 때 해당 인스턴스를 저장하는 역활
- 동일한 EM 내에서 동일한 엔티티를 여러 번 조회할 때 데이터베이스를 다시 조회하지 않고 캐시된 엔티티를 반환함으로써 성능을 향상
- EntityManager 범위 내에서만 작동하며, 각 EntityManager 인스턴스마다 별도의 1차 캐시가 존재
기타 개념
쿼리DSL: 동적 SQL 생성을 지원하는 프레임워크, JPA 와 함께 사용
스프링 데이터 JPA: 하이버네이트 위에서 동작하며, 반복적인 CRUD 작업을 줄여줌
'프로그래밍 > 스프링, JPA, MyBatis' 카테고리의 다른 글
@Value 어노테이션 (0) 2025.01.02 WebFlux (0) 2024.12.26 레이어드 아키텍처 (0) 2024.12.26 MyBatis vs JPA (2) 2024.12.26 스프링 MVC (1) 2024.12.26 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)