강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법

4-5. 근데 이거 어떻게 되는거임? - InnoDB

UNDO LOG와 롤백에 관해 질문드립니다.

해결된 질문

작성

·

52

0

1. 현재 학습 진도

  • 4-5 수강중

     

  • 트랜잭션 내 isolation level에 따른 데이터 consistency 보장을 위해, WAL(Write-Ahead Logging)시 내부적으로 사용하는 UNDO LOG와 REDO LOG를 활용한다.

 

2. 어려움을 겪는 부분

그러면 트랜잭션 내에서 rollback을 수행하면, UNDO LOG를 기반으로 디스크 내용을 트랜잭션 수행 이전 상태로 되돌린다고 이해했습니다. 맞게 이해한걸까요?

만약 이게 맞다면,
WAL로 인해 트랜잭션 내 작업들은 커밋되기 전에 디스크에 반영되지 않으므로, rollback된다면 UNDO LOG를 활용하지 않더라도 디스크 내 데이터가 이전 내용임이 보장되지 않나요?

롤백 시 UNDO LOG가 어떤 부분에서 활용되어야 하는지 이해하지 못했습니다.

답변 2

0

딩코딩코님의 프로필 이미지
딩코딩코
지식공유자

안녕하세요 좋은 질문 해주셔서 감사합니다!!

"WAL이니까 커밋 전에는 디스크에 안 쓰인다"고 생각하셨는데, 실제로는 조금 다르게 동작해요. MySQL은 성능을 위해 메모리(버퍼 풀)에서 데이터를 변경하는데, 이 변경된 데이터가 커밋 여부와 상관없이 디스크로 내려갈 수 있습니다. 버퍼 풀에 공간이 부족하거나 일정 시간마다 자동으로 디스크에 쓰게 됩니다

그래서 이런 상황이 생길 수 있습니다:

1. 잔액을 500원에서 1000원으로 변경
2. 아직 커밋은 안했는데, 디스크에 1000원이 써짐
3. 이제 ROLLBACK을 하려고 함

이때 어떻게 500원으로 되돌릴까요? 디스크에는 이미 1000원이 써져있는데 말이죠. 바로 이럴 때 UNDO LOG가 필요해요. "원래 값은 500원이었어"라는 정보를 UNDO LOG에 저장해두었다가, 롤백할 때 그걸 보고 되돌리는 게 됩니다.

그리고 UNDO LOG는 롤백할 때뿐만 아니라 다른 트랜잭션이 데이터를 읽을 때도 사용돼요. 아직 커밋 안된 변경사항은 다른 트랜잭션에서 보면 안 되잖아요? 그럴 때 UNDO LOG에서 이전 버전을 가져와서 보여주는 거죠.

이런 원리를 알아두시면 나중에 실무에서 "트랜잭션을 작게 쪼개야 한다"는 이야기가 나올 때 왜 그런지 바로 이해하실 수 있을 거예요. 긴 트랜잭션은 UNDO LOG를 계속 쌓이게 만들겁니다.

추가로 궁금한 게 있으면 언제든 편하게 물어보세요!! 좋은 추석 보내시길 바랍니다

0

안녕하세요, 인프런 AI 인턴입니다. brianyhs님.

UNDO LOG와 트랜잭션 롤백에 대해 질문을 주셨군요. 먼저, 트랜잭션의 롤백 과정에서 UNDO LOG가 어떤 역할을 하는지를 명확히 설명드리겠습니다.

트랜잭션과 UNDO LOG의 역할

  1. 트랜잭션과 WAL:

    • 트랜잭션은 데이터베이스에서 ACID 특성을 보장하는 매우 중요한 단위입니다.
    • WAL(Write-Ahead Logging)은 데이터의 무결성과 일관성을 보장하기 위해 변경 사항을 디스크에 기록하기 전에 로그에 기록합니다.
  2. UNDO LOG의 역할:

    • UNDO LOG는 트랜잭션 중에 실행된 변경 사항을 취소하기 위해 필요합니다.
    • 롤백 과정 중에 UNDO LOG를 참고하여 트랜잭션 전에 데이터 상태로 복구합니다.
  3. 롤백 시 UNDO LOG의 필요성:

    • 트랜잭션은 논리적으로는 커밋되기 전까지 디스크에 반영되지 않지만, 물리적으로 데이터가 수정되기 시작할 수 있습니다.
    • UNDO LOG는 이미 변경됐던 데이터들을 원래 상태로 되돌리기 위해 활용됩니다.
    • 따라서, UNDO LOG가 없다면 실제 변경된 데이터를 이전 상태로 복원하는 데 문제가 발생할 수 있습니다.

ROLLBACK이 되면 트랜잭션 전에 데이터 상태로 복원하는 것이 목표인데, 데이터베이스 내에서 이미 변경된 사항은 UNDO LOG를 통해 다시 원상태로 복구되는 것이며, 그 반면 실재로 디스크 외부에 완전히 커밋되지 않은 상태의 데이터들은 REDO LOG를 통해 적용이 무효화됩니다.

유사한 질문이 UNDO LOG와 트랜잭션 롤백에 관한 설명에 답변되어 있습니다.

저는 질문자님의 이해를 돕고자, 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드립니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기