본 캠프_59일차

졸용·2025년 5월 13일

TIL

목록 보기
60/144

JPA의 영속성 컨텍스트(Persistence Context)는 JPA의 핵심 기능 중 하나로, 데이터베이스와 애플리케이션 사이의 객체 상태를 효율적으로 관리하는 1차 캐시이자 변경 감지 매커니즘이다.


✅ 영속성 컨텍스트란?

JPA에서 엔티티 객체를 저장하고 관리하는 메모리상의 작업 공간이다.
쉽게 말하면, DB와의 직접 통신 없이도 엔티티의 상태를 관리할 수 있게 해주는 캐시이자 트래킹 영역이다.

EntityManager가 관리하는 엔티티는 영속성 컨텍스트에 저장되며,
JPA는 이 컨텍스트를 통해 객체 상태를 추적하고 DB 반영을 자동으로 처리한다.


✅ 주요 특징과 역할 정리

기능설명
1️⃣ 1차 캐시같은 엔티티를 여러 번 조회해도 DB 쿼리 한 번만 실행 (메모리 캐싱)
2️⃣ 동일성 보장같은 ID의 엔티티는 하나의 인스턴스로 관리 (== 비교 가능)
3️⃣ 변경 감지(Dirty Checking)엔티티 값 변경 시 flush() 또는 트랜잭션 종료 시 자동으로 update SQL 실행
4️⃣ 지연 로딩(Lazy Loading)실제 DB 접근은 필요한 시점에만 발생 (프록시 사용)
5️⃣ 트랜잭션 범위 관리트랜잭션 범위 내에서 엔티티 생명 주기를 관리함 (persist, merge, remove 등)
6️⃣ Flush변경된 내용을 SQL로 변환해 DB에 반영함 (단, commit 전까진 트랜잭션 안 종료됨)

✅ 예시 상황으로 이해하기

@Transactional
public void updateUserName(Long userId) {
    User user = entityManager.find(User.class, userId); // DB에서 가져옴 → 1차 캐시에 저장됨
    user.setName("New Name"); // setter로 값 변경 (변경 감지됨)
    // 트랜잭션 끝나는 시점 → 변경 사항 자동 감지 → update SQL 실행됨
}

✔ 여기서 user.setName(...)만 했을 뿐인데, update 쿼리가 나가는 건 영속성 컨텍스트가 변경을 추적하기 때문이다.


✅ 핵심 키워드 요약

  • 1차 캐시
  • 동일성 보장
  • 변경 감지 (Dirty Checking)
  • Flush / Commit
  • 지연 로딩
  • 트랜잭션 범위 내 상태 관리
profile
꾸준한 공부만이 답이다

0개의 댓글