1차 캐시와 쓰기 지연
1. 1차 캐시 (First-Level Cache) 📌 내부 구조 1차 캐시는 EntityManager 내부에 있는 HashMap 구조다. key는 @Id 필드(PK)의 값이고, value는 엔티티 인스턴스와 그 스냅샷(최초 상태 복사본)의 쌍이다. 엔티티를 persist()하거나 find()로 조회하면 이 Map에 등록된다. 1 2 3 4 5 6 1...
1. 1차 캐시 (First-Level Cache) 📌 내부 구조 1차 캐시는 EntityManager 내부에 있는 HashMap 구조다. key는 @Id 필드(PK)의 값이고, value는 엔티티 인스턴스와 그 스냅샷(최초 상태 복사본)의 쌍이다. 엔티티를 persist()하거나 find()로 조회하면 이 Map에 등록된다. 1 2 3 4 5 6 1...
1. 영속성 컨텍스트란 JPA를 처음 접하면 “왜 DB에 바로 저장하지 않고 영속성 컨텍스트라는 중간 단계가 있는 걸까?”라는 의문이 생긴다. 이 의문에서부터 시작하는 게 가장 이해가 빠르다. 예를 들어 한 HTTP 요청 안에서 아래와 같은 일이 벌어진다고 생각해보자. 1 2 3 4 Member member = findById(1L); // SELEC...
1. 4가지 상태 개요 엔티티는 영속성 컨텍스트와의 관계에 따라 4가지 상태 중 하나에 속한다. 상태 설명 특징 비영속 (New) new로 생성한 순수 자바 객체 JPA와 무관 영속 (Managed) 영속성 컨텍스트가 관리 중 더티 체킹, 지연 로딩 가능 준영속 (Detached) 관리에서 벗어난 상태 PK 있음, 더티 체킹 안됨 삭제 (Removed...
1. 더티 체킹 (Dirty Checking) 📌 em.update()가 없는 이유 JPA 이전에는 엔티티를 수정하면 개발자가 직접 UPDATE SQL을 작성하거나 session.update(entity) 같은 메서드를 호출해야 했다. JPA는 이 불편함을 영속성 컨텍스트의 “변경 감지(Dirty Checking)” 메커니즘으로 해결한다. 영속 상태의...
이 포스트는 Phase 2의 모든 내용(EntityManager, 엔티티 생명주기, 1차 캐시와 쓰기 지연, 더티 체킹과 OSIV)을 하나로 통합한 것이다. 영속성 컨텍스트는 JPA의 모든 동작의 기반이 되므로 Phase 1 직후 반드시 학습해야 한다. 💡 이 글의 전체 내용은 /tmp/phase2.md에서 생성되었습니다. 실제 파일은 fi...