PersistenceContext

영속성 컨텍스트에 대해 설명해 주세요.

  • 영속성 컨텍스트(Persistence Context) 는 JPA를 이해하는 데 가장 중요한 용어로, 엔티티를 영구 저장하는 환경이라는 뜻이다.

  • 영속성 컨텍스트에 생명 주기는 트랜잭션과 동일하다.

엔티티 생명 주기

  • 비영속 : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태

  • 영속 : 영속성 컨텍스트에 저장된 상태

  • 준영속 : 영속성 컨텍스트에 저장되었다가 분리된 상태

  • 삭제 : 삭제된 상태

영속성 컨텍스트가 있으면 어떤 이점이 있나요?

  • 영속성 컨텍스트가 엔티티를 관리하면 다음과 같은 이점들이 있다.

  • 1차 캐시

    • 영속성 컨텍스트는 DB에 데이터를 조회하기 전 내부에 있는 1차 캐시에 데이터가 있는지 확인하고, 없을 때 실제 DB를 조회한다.

    • 1차 캐시에 데이터가 있다면 쿼리를 수행하지 않고, 1차 캐시에서 가져오기 때문에 약간의 성능상 이점이 있다.

  • 동일성 보장

    • 영속성 컨텍스트는 1차 캐시에 있는 같은 엔티티를 반환하기 때문에 엔티티의 동일성을 보장한다.

  • 쓰기 지연

    • 트랜잭션을 커밋하기 전까지 쿼리를 쓰기 지연 SQL 저장소에 모아두다가 커밋하는 시점에 한 번에 플러시한다.

  • 변경 감지

    • JPA는 엔티티를 영속성 컨텍스트에 보관할 때 최초 상태를 복사해서 스냅샷을 저장한다.

    • 플러시 시점에 스냅샷과 엔티티를 비교해서 변경된 엔티티가 있으면 업데이트 쿼리를 수행해준다.

    • 변경 감지는 영속 상태의 엔티티만 적용된다.

  • 지연 로딩

    • 연관된 엔티티를 처음 조회할 때, 원본 엔티티를 상속받은 프록시 객체로 불러와서 실제 사용할 때 쿼리를 날릴 수 있게 해준다.

Last updated