session.abortTransaction 명시
313
작성한 질문수 9
안녕하세요, 선생님.
공부하다가 궁금한게 생겨서 질문드립니다.
transaction이 Atomicity를 유지할 수 있도록 abortTransaction을 쓰는 것 같은데, transaction의 에러 처리 부분에서 반드시 명시해줘야하는거죠?
혹시 {session}을 명시해준 mongoose api 중 하나라도 실패한다면 이전 것들이 자동으로 롤백되는 것이 아니라 abortTransaction을 명시해줘야 롤백되는건지 궁금합니다.
답변 1
0
daehyun님 안녕하세요 :)
abortTransaction을 하면 Transaction 내부에서 session을 포함한 모든 작업들은 롤백처리가 됩니다. 만약 mongoose operation이 실폐 이유가 일시적인 이유이면 재시도를 하게 될거에요. 그리고 정확하게는 transaction이 commit되기 전까지는 디비에 반영되지 않아요. Transaction 진행중일 때는 session이라는 별도 분리된 메모리에 문서들을 불러오고 쓰고 업데이트 등 작업들을 모두 처리합니다. 마지막에 transaction이 마무리되면서 session에 있던 변경 작업들이 모두 한번에 디비에 반영이 되요. session에 문서들이 불러져 있는 동안에는 해당 문서들이 변동될 수 있기 때문에 디비에 있는 해당 문서들은 락에 걸립니다. 다른 요청이 수정못하도록요. 따라서 엄밀하게 말하면 디비상으로는 롤백은 아니에요. session 상으로 임시로 불러온 문서들이 초기화되는겁니다.
0
아하! 제가 롤백이라는 용어를 잘 알지 못해서 오해가 있었던 것 같습니다! 정정해주셔서 감사합니다. 덕분에 더 깊게 알아가는 것 같습니다.
commit되기 전까지 디비에 반영이 되지 않는다는 말은 저희가 굳이 오류가 발생해서 commit을 하지 못한다면 trycatch의 catch에서 abortTransaction 함수를 명시적으로 호출할 필요가 없다는 말씀이신군요! 자세하게 알려주셔서 감사합니다!
option usecreateindex is not supported 오류 나면은
0
163
1
Schemaless 특성을 재생시 검은화면이 나와요
0
258
1
user 내장 시 ref 필드 필요성
0
257
1
await 관련해서 질문드릴게 있습니다!!
0
306
2
섹션6의 3번째 강의 faker파일이 어디있나요?
0
320
1
$elemMatch 질문이 있습니다.
0
252
1
DB 업데이트에 실패했을 상황에서 대처는 어떻게 할 수 있나요.
2
778
2
블로그에 user 데이터를 추가하는 방법에 대해서
0
243
1
blog 데이터 생성시 user 관련 오류
0
363
1
age 예외 처리를 별도로 하신 이유가 궁금합니다.
2
313
2
delete 메소드가 많은 이유가 궁금합니다.
0
185
1
unique validation 처리
0
302
1
updateMany에서 user._id를 못찾는 상황
1
403
1
find() 가 리턴하는 instance member
1
440
3
몽고 db를 백업방법을 부탁합니다.
0
611
1
인덱스 생성시점
0
722
1
$pull 문법에 대한 질문
0
367
1
comment의 id가 생성되는 시점
1
311
1
리팩토링 강의에서 라우터 리팩토링 전개연산자(...)
1
322
1
session.abortTransaction()에 대한 실제 예시 문의
0
296
1
섹션9 Computed Fields 강의에서, 다음 강의 가기 전 빠진부분
-1
414
1
faker 패키지 취약성 이슈
1
497
1
라우터 리팩토링
0
349
1
섹션4 진행중, mongoose 질문
0
317
1





