Story
트랜잭션에서 flush 중 DB 예외가 발생하면 무조건 롤백이 된다고 한다.
그런데 커밋과 flush와 DB에 기록하는 행위가 각각 어떤 의미적 차이가 있는건지 궁금해졌다.
1. Flush란
영속성 컨텍스트에 쌓여 있던 변경 내용을 DB에 SQL로 반영하는 작업
(커밋과 구분됨)
2. 개념 설명
JPA에서는 엔티티를 변경하면 바로 DB에 SQL이 날아가지 않는다.
- 1. 엔티티 수정
- 2. 변경 내용이 영속성 컨텍스트 (메모리)에만 기록
- 3. flush 동작
- 4. 변경된 내용을 기반으로 INSERT/UPDATE/DELETE SQL을 생성
- 5. DB에 실제로 실행
- 6. 트랜잭션 확정
flush는 변경 내용을 DB에 작성하는 행위이나, 해당 내용은 확정되지 않아 얼마든지 롤백될 수 있다.
비유하자면, flush는 구두로 협의한 내용을 계약서에 작성해서 상대방에게 전달하는 것이고, 커밋은 해당 계약서에 계약 당사자의 도장을 찍음으로써 확정하는 행위라고 할 수 있다.
'JPA' 카테고리의 다른 글
| [한입지식] Flush는 언제 일어날까? (2) | 2026.04.19 |
|---|---|
| [JPA] 영속성 컨텍스트 공부 (0) | 2026.04.01 |