JPA: 영속성 관리

CO빈·2025년 6월 13일

백엔드

목록 보기
9/11

엔티티 매니저 팩토리와 엔티티 매니저

엔티티 매니저 팩토리: 여러 스레드 동시 접근해도 안전, 스레드 간 공유
엔티티 매니저: 동시성 문제 발생, 스레드 간 공유 안됨

영속성 컨텍스트란?

= 엔티티를 영구 저장하는 환경

엔티티 생명주기

  • 비영속: 영속성 컨텍스트와 전혀 관계 없는 상태
  • 영속: 영속성 컨텍스트에 저장된 상태
  • 준영속: 영속성 컨텍스트에 저장되었다가 분리된 상태
  • 삭제: 삭제된 상태

영속성 컨텍스트 특징

  • 식별자 값으로 구분별자 값으로 구분
  • 트랜잭션 커밋 순간 데이터베이스 반영 = 플러시

영속성 컨텍스트가 엔티티를 관리하면 장점

  • 1차 캐시
  • 동일성 보장
  • 트랜잭션 지원하는 쓰기 지원
  • 변경 감지
  • 지연 로딩

플러시

영속성 컨텍스트 변경 내용을 데이터베이스에 반영

준영속 상태 특징

  • 거의 비영속 상태에 가까움
  • 식별자 값을 가짐
  • 지연 로딩 할 수 없다.

엔티티 매니저란?

엔티티 매니저에 대해 알기 위해선 영속성 컨텍스트에 대해 알아야 합니다. 영속성 컨텍스트는 엔티티를 영구 저장하는 환경으로 1차 캐싱, 쓰기 지연, 변경 감지를 통해 영속 로직을 효율적으로 할 수 있게 해줍니다. 이러한 효율적인 영속 로직 수행을 위해서 엔티티는 영속성 컨텍스트에 관리되어야 합니다. 이런 작업을 도와주는 것이 바로 엔티티 매니저입니다. 엔티티 매니저는 엔티티의 상태를 변경하고, 영속성 컨텍스트와 상호작용함으로써 영속 로직을 수행하는 역할을 가지고 있습니다.

엔티티는 영속성 컨텍스트와 관련하여 4가지 상태(비영속, 영속, 준영속, 삭제)를 가질 수 있는데요. 엔티티 매니저는 persist, merge, remove, close 메서드를 이용하여 엔티티의 상태를 변경할 수 있습니다. 또한, 엔티티 매니저는 영속성 컨텍스트의 1차 캐시로부터 엔티티를 조회할 수 있으며, 쓰기 지연 저장소에 있는 쿼리들을 flush하여 DB와 동기화시킬 수 있습니다. 또한 JPQL이나 Native Query를 이용해 직접 DB로부터 데이터를 불러올 수도 있습니다.

0개의 댓글