쓰기지연, 변경감지 매커니즘의 동작과정에 대해서 질문드립니다.
612
작성한 질문수 23
그림상에서 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
감사합니다.
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
27
2
inheritance startegy 선택시 고려사항
0
22
1
Entity 동등성 비교
0
21
1
실무 조언 관련 질문입니다.
0
46
1
H2데이터베이스 파일 생성
0
56
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
52
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
52
1
JPQL 메소드와 락
0
55
1
Delivery @OneToOne
0
60
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
93
2
UnsupportedOperationException 발생
0
86
3
H2 Database 연결이 안됩니다.
0
93
2
연관관계 매핑 질문드립니다.
0
85
2
h2데이터베이스 실행오류
0
107
2
persistence.xml
0
107
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
80
1
영속성 컨텍스트
0
66
1
JPA 프록시
0
96
1
Native Query와 MyBatis
0
70
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
87
1
임베디드 타입 예시 코드 관련 질문
0
114
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
94
3
인텔리제이 패키지 커서 단축키 질문
0
108
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
145
1





