context → 엔티티 컨테이너로 생각하자

→ 매니저가 만들어지고 컨텍스트가 하나라도 채워져야 영속성이 된다.

→ 영속상태인 엔티티를 받아서 뭔가를 진행해야한다
영속상태

- Persistence Context는 엔티티를 캐싱하고 상태를 관리하는 공간
- New → Managed → Detached/Removed 로 상태가 바뀜
- Managed 상태일 때만 JPA가 SQL을 자동으로 생성·실행하고, 1차 캐시와 변경감지를 제공

- 1차 캐시에 엔티티와 스냅샷 저장
- 엔티티 값 변경 시 JPA가 스냅샷과 비교
- 변경사항이 있으면 UPDATE SQL 생성 → 쓰기 지연 저장소
- 변경이 감지되면, JPA는 자동으로 UPDATE SQL을 생성해서 쓰기 지연 SQL 저장소에 보관
- 즉시 DB에 보내지 않고 일단 모아두는 방식(쓰기 지연, Write-behind)
flush() → SQL을 DB에 실행**(원하는 시점에)**
- 트랜잭션
commit() 시점에**(최종적인 시점에)**
- 쓰기 지연 SQL 저장소에 모아둔 쿼리를 한꺼번에 DB로 보냄
- 이 덕분에 SQL 실행 횟수를 줄이고 성능 최적화 가능
commit() → 최종 반영 및 스냅샷 갱신