매일 매일, 차곡 차곡 쌓기



완벽하지 않은 것을 두려워 말며,
완성도를 높히는데 집중하자.

Spring/JPA

영속성 컨텍스트란?

blockbuddy93 2023. 12. 3. 17:35

영속성 컨텍스트란?

  • 인스턴스에 존재하는 엔티티를 관리하고 영속화 시키는 논리적인 영역
  • 영속성 컨텍스트에서 엔티티를 관리하고 필요에 따라 DB 데이터를 CRUD 할 수 있는데 이러한 작업을 담당하는 객체를 엔티티 매니저라고 함

 

엔티티 생명 주기

  • 비영속(New) : 영속성 컨텍스트와 전혀 관계가 없는 상태
  • 영속(Managed) : 영속성 컨텍스트에 저장되어 관리되고 있는 상태
  • 준영속(Detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태
  • 삭제(Removed) : 영속성 컨텍스트와 DB에서 삭제된 상태.

 

영속성 컨텍스트의 특징

  • 영속성 컨텍스트는 식별자 값이 반드시 있어야한다.
  • JPA는 보통 트랜잭션을 커밋하는 순간에 영속성 컨텍스트에서 새로 저장된 엔티티를 데이터 베이스에 저장하는데 이를 플러시라고함.
  • 영속성 컨텍스트의 주요 기능을 활용하여 데이터베이스와 통신횟수를 줄이고 애플리케이션 성능을 향상시킴

 

영속성 컨텍스트 주요 기능

  1. 1차 캐시: 영속성 컨텍스트 내부에는 데이터베이스에서 검색한 엔티티를 저장하는 캐시인 1차 캐시 존재.
  2. 동일성 보장: 영속성 컨텍스트에서 조회한 동일한 엔티티 객체는 항상 동일한 자바 객체로 반환되어 동일성이 보장
  3. 쓰기 지연: 트랜잭션 커밋 시 쓰기 작업을 지연시키는 메커니즘으로, 모아둔 쿼리를 한꺼번에 일괄 처리하여 DB 연결 횟수를 줄임
  4. 변경 감지: 엔티티의 변경 사항을 자동으로 감지하여 트랜잭션 커밋 시에 수정 쿼리를 생성하고 적용.
  5. 지연 로딩: 엔티티가 실제로 사용될 때까지 연관된 엔티티를 로드하지 않고, 실제로 필요한 시점에 엔티티를 로딩.

 

참고

'Spring > JPA' 카테고리의 다른 글

성능 향상을 위한 1차 캐시와 2차 캐시  (0) 2023.12.31
JPA 비관적 락  (1) 2023.12.08
JPA 낙관적 락  (1) 2023.12.07
JPQL 이란?  (0) 2023.12.02
JPA 란?  (1) 2023.12.02