작성
·
537
0
그림상에서 flush가 두번 찍혀있어서 매커니즘의 구동 순서가 조금 햇갈려서 그런데
1번의 flush와 4번의 flush의 의미가 조금 다른건가요? 아니, flush가 두번 동작하는건가요?
우선은 선생님께서 트랜잭션 커밋 요청 시 내부적으로 flush가 발생한다고 하셨습니다.
flush의 동작과정이 1차 캐시의 최초 스냅샷과 수정된 Entity의 값을 비교하고 변경내용 있을 경우 저장소에 UPDATE쿼리 저장하고 쿼리를 실행하는것까지가 맞을까요?
그렇다면 쓰기지연의 경우에도 동일한 매커니즘처럼 보이는데 해당 그림에서는 flush가 빠져있어서 조금 햇갈리네요..
쓰기지연의 경우는 persist 동작과정중에 따로 flush를 하지 않고 1차캐시에 저장됨과 동시에 쓰기지연 저장소에도 저장된다고 설명해주셨고, 이후에 트랜잭션 커밋 요청시 내부적으로 flush가 발생하면서 쿼리가 실질적으로 실행된다는 순서로 이해했습니다.
강의 내용상으로 요약해보면
[쓰기지연] persist호출 후 flush 호출
persist에서 INSERT 쿼리 저장
flush에서 저장된 쿼리 실행
[변경감지] flush가 두번 작동
첫번째 flush에서 변경감지후 UPDATE 쿼리 저장
두번째 flush에서 저장된 쿼리 실행
이렇게 차이가 나는걸로 이해를 했습니다.
두 매커니즘이 위와 같이 약간의 차이가 있는게 맞을까요?
그리고 추가적으로 엔티티 삭제 remove시에는 직전 내용인 변경감지와 동일한 매커니즘이라고 설명해주셨는데
아무리 생각해도 delete의 경우에는 변경감지의 매커니즘보다는 쓰기지연의 매커니즘과 같다고 생각이 들어서 질문드립니다!
질문드리기가 조금 까다로운내용이라 저의 궁금포인트가 이해가 되셨는지 모르겠네요...
영속성 관리 파트의 모든 강의를 들어야 명확하게 이해가 가능한건지
제가 너무 까다롭게 이해하려고 하는 건지
그래도 순서를 조금 철저히 명확하게 알아야 정확하게 JPA를 사용할수 있지 않을까 싶어 질문드리오니 너그러운 마음으로 답변 부탁드리겠습니다.
답변 1
0
안녕하세요. 박보경님, 공식 서포터즈 David입니다.
아래 글 답변을 확인하신 후 궁금하신 점을 다시 질문해 주실 수 있으실까요? :)
https://www.inflearn.com/questions/351605
감사합니다.