작성
·
298
0
3강 영속성 관리를 공부하다가 flush에 관해 궁금한게있어 질문남깁니다.
3강 강의자료에서 21페이지를 보시면 트랜잭션이 커밋될 때, flush가 발생하는것을 설명하면서 '2.flush'가 영속 컨텍스트에서 DB를 향하고있습니다.
그런데 23페이지 변경감지에서 flush가 발생하는것을 설명할때 그림을 보면, '1.flush()'가 바깥에서 영속 컨텍스트를 향하고있고, '4.flush'가 쓰기 지연 SQL 저장소에서 DB를 향하고있습니다.
Q1. 전자(21페이지)는 flush가 한 번 발생하는데, 후자(23페이지)는 두 번 발생합니다. 둘 다 커밋할 때 발생하는건데 왜 차이가있는지 궁금합니다. 사실상 후자처럼 두 번 발생하는게 맞다고 보면 되나요?
Q2. 변경감지 설명에서의 '1.flush()'가 바깥에서 영속 컨텍스트를 향하고있습니다. 이는 변경감지에서 가장 먼저 flush()가 발생한것인데, flush는 쿼리를 날리며 "영속성 컨텍스트의 변경내용을 데이터 베이스에 반영"하는것이라고 배웠습니다. 그럼 결국 더티체킹이 일어나기 전, 쿼리가 처음부터 날라가는건가요? 그렇다면 사실상 쿼리가 두 번 날라가는 건가요?
아니라면 이 '1.flush()'는 뭔가요?
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
Q1. 둘 다 커밋할 때 flush가 발생하는 것이지만, 23페이지에서 언급된 flush는 쓰기 지연 SQL 저장소에 있는 내용들을 DB에 반영하는 작업입니다. 이 작업은 엔티티 영속성 컨텍스트와는 조금 다른 개념이기 때문에 두 번 발생한다고 생각하시면 됩니다.
Q2. 변경감지에서의 ‘1.flush()‘는 더티 체킹을 수행하기 위해, 즉 엔티티와 DB의 상태를 동기화하기 위해 실행됩니다. 이 때 쿼리를 실행하며 영속성 컨텍스트의 변경내용을 데이터베이스에 반영합니다. 따라서 처음부터 쿼리가 날라가는 것은 아니며, 일반적으로는 더티 체킹을 수행하는 flush가 한 번 발생합니다.
답변이 도움이 되었길 바랍니다. 감사합니다.