핵심 메시지

영속성 컨텍스트는 엔티티를 DB에 바로 쓰지 않고 먼저 관리하는 중간 계층입니다. 같은 엔티티를 재사용하고, 변경을 추적하고, SQL을 모아 두었다가 flush() 때 한 번에 보냅니다.

입구 EntityManager

persist(), find(), 엔티티 수정 요청이 들어오는 지점

공유된 관리 영역 영속성 컨텍스트

한 트랜잭션 동안 엔티티 상태와 반영 예정 SQL을 함께 붙잡아 둡니다.

최종 반영 DB

flush() 이후에만 INSERT, UPDATE, DELETE가 실제 실행됩니다.

역할
컨텍스트 안에서
왜 중요한가
1차 캐시
@Id=1 -> User("홍길동")
같은 식별자를 다시 조회하면 같은 엔티티 인스턴스를 재사용해 불필요한 DB 조회를 줄입니다.
변경 감지
snapshot ↔ current 변경 필드만 비교
개발자가 직접 UPDATE SQL을 쓰지 않아도 무엇이 바뀌었는지 자동 판단합니다.
쓰기 지연 SQL
INSERT ... UPDATE ...
SQL을 바로 보내지 않고 모아 두었다가 flush() 시점에 DB로 전송합니다.
1단계 persist · find · 수정
2단계 캐시 확인, 스냅샷 비교
3단계 flush()로 SQL 전송
4단계 commit()으로 확정