영속성 컨텍스트 1

숭맹이·2025년 4월 24일
0

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리

💡 영속성 컨텍스트란?

영속성 컨텍스트는 "엔티티를 영구 저장하는 환경"입니다. 정확히는 다음과 같은 특징을 갖는 논리적 개념입니다:

  • 엔티티 객체를 관리하는 메모리 내 저장소
  • EntityManager를 통해 접근
  • 눈에 보이지 않지만 JPA의 거의 모든 동작의 기반
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Member member = new Member("member1", "회원1");
em.persist(member);

위 코드에서 persist() 호출은 DB에 바로 insert하는 것이 아니라, 영속성 컨텍스트에 저장하는 작업입니다.


📦 엔티티 생명주기

JPA 엔티티는 아래 네 가지 상태를 가질 수 있습니다:

상태설명
비영속(new)객체만 생성된 상태. JPA와 전혀 무관
영속(managed)persist() 후 컨텍스트에 의해 관리되는 상태
준영속(detached)detach() 등으로 컨텍스트에서 분리된 상태
삭제(removed)remove() 호출로 삭제 예정 상태
Member member = new Member(); // 비영속
em.persist(member);           // 영속
em.detach(member);            // 준영속
em.remove(member);            // 삭제

🚀 언제 DB에 반영될까?

JPA는 persist() 시점에 DB에 insert 쿼리를 날리지 않습니다. 실제 쿼리는 트랜잭션 커밋 시점에 발생합니다.

em.getTransaction().commit(); // 이 시점에 insert 쿼리 실행

이러한 방식은 쓰기 지연(Write-Behind) 또는 트랜잭션 단위의 배치 처리라 부르며, 성능 최적화에 매우 유리합니다.


✅ 영속성 컨텍스트의 이점

  1. 1차 캐시

    • 동일 트랜잭션 내에서 find() 시 DB를 다시 조회하지 않음
  2. 동일성(identity) 보장

    • 같은 트랜잭션 내 동일 엔티티 조회 시 동일 객체 반환 (== 비교 가능)
  3. 쓰기 지연 (Transactional Write-Behind)

    • 쿼리 최소화 및 트랜잭션 단위의 처리 가능
  4. 변경 감지(Dirty Checking)

    • 엔티티 값 변경 감지 후 자동 update 쿼리 생성
  5. 지연 로딩(Lazy Loading)

    • 연관 객체는 실제 접근 시점에 쿼리 실행 (필요할 때만 조회)
profile
👨🏻‍💻 Backend Developer

0개의 댓글