영속성 컨텍스트
영속성 컨텍스트(Persistence Context)
영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻입니다.
애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 역할을 합니다.
엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 저장합니다.
영속 상태의 엔티티는 식별자 값(@Id)이 반드시 있어야 합니다.
영속성 컨텍스트에 저장한 엔티티는 트랜잭션을 커밋하는 순간 데이터베이스에 반영됩니다. (Flush)
영속성 컨텍스트의 장점
1. 영속성 컨텍스트에는 [[1차 캐시]]가 존재하기 때문에 JPA에서 캐시에서 조회가 가능합니다.
만약 1차 캐시에 엔티티가 없다면 DB에서 조회하고 조회값을 1차 캐시에 저장합니다.
사실 1차 캐시가 있는 엔티티 매니저는 트랜잭션 단위로 만들어지고 사라지기 때문에 1차 캐시가 살아있는 시간이 매우 짧아 성능에 큰 효과가 없습니다.
트랜잭션마다 다른 엔티티 매니저를 갖기 때문에 각 한 트랜잭션 안에서 조회하는게 아니라면 의미가 없습니다.
2. 동일성을 보장합니다.
같은 트랜잭션 안에서 같은 객체는
==
로 비교가 보장됩니다.
3. 트랜잭션을 지원하는 쓰기 지연
한 트랜잭션 안에서 DB에 보낼 쿼리문을 모아두고 한번에 보냅니다.
네트워크의 부하를 줄이기 위한 기능입니다.
em.persist(entity)
코드가 실행되면 영속성 컨텍스트에 1차 캐시가 저장되고 JPA가 엔티티를 분석하여 INSERT 쿼리를 생성하고 쓰기 지연 SQL 저장소에 쌓아둡니다.이 쿼리의 개수는
hibernate.jdbc.batch.size
를 통해 조절할 수 있습니다.
Last updated