영속성 컨텍스트

영속성 컨텍스트(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