오늘 할일

  • InnoDB의 MVCC
  • 웹 자동차 경주 미션 2단계 리팩터링 및 제출
  • 테코톡 인수인계 받기
  • 이동욱님 특강 듣기
  • 스프링 학습
    • Controller
    • ExceptionHandler

MVCC(Multi Version Concurency Control)

mysql의 기본 엔진인 InnoDB는 MVCC를 지원한다. MVCC란 무엇일까?

먼저 트랜잭션의 isolation level(격리 수준) 을 이해 해야 한다. isolation level은 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지를 결정하는 것이다. 총 4가지의 수준으로 나뉘어져 있다.

  • READ UNCOMMITTED - 트랜잭션이 커밋되지 않아도 변경된 데이터를 볼 수 있다.
  • READ COMMITTED - 커밋되지 않은 트랜잭션의 데이터는 볼 수 없다.
  • REPEATABLE READ - 동일한 트랜잭션 내에서 동일한 쿼리를 여러 번 수행해도 결과는 같다.
  • SERIALIZABLE - 트랜잭션이 순차적으로 진행된다.

이러한 isolation level에 따라서 동시에 발생하는 트랜잭션에 대해서 동시성 제어를 하는 것이 MVCC이다.

InnoDB 스토리지 엔진은 REPEATABLE READ 격리 수준을 사용하고 있다. InnoDB에서 트랜잭션에서 데이터를 변경했을 때 트랜잭션의 커밋 유무에 따라 결과가 달라진다.

  • 롤백했을 때 - 언두 영역의 백업된 데이터를 다시 데이터 파일로 복구한다.
  • 커밋했을 때 - 현재 상태가 그대로 유지된다.

커밋을 하지 않아도 원본 데이터가 언두 영역에 저장되고, 현재 상태가 바뀌는 것이다. 따라서 READ UNCOMMITTED는 언두 영역을 조회하지 않고 원본 테이블을 조회하기 때문에 커밋되지 않았어도 변경된 데이터를 볼 수 있다. 이를 Dirty read라고 한다.
READ COMMITTED는 트랜잭션이 커밋되지 않으면 언두 영역을 조회하여 원본 데이터를 조회한다.
REPEATABLE READ는 해당 시점의 데이터베이스 상태를 나타내는 일관된 스냅샷이 생성된다. 이 스냅샷은 트랜잭션 도중 발생하는 SELECT 쿼리에 사용된다. 현재 상태가 스냅샷과 일치하지 않으면 언두 로그를 확인해서 데이터의 이전 상태를 추적한다.

건강하게 나아지기

이동욱님께서 루터회관에 오셔서 특강을 해주셨다. 워낙 유명하신 분이라 시작부터 높은 위치에서 시작했을 것이라고 생각했으나 틀린 생각이었다. 그저 꾸준히 열심히 하고 계속해서 학습을 잘하고 있나 검증을 하셨다. 요즘 학습의 효율이 크게 나오지 않는 것 같다. 시간만 보낸다고 안주하고 있지 않고 학습을 제대로 하고 있는지 검증을 해야 할 것 같다.

이동욱님은 업무를 하면서 진행했던 과정, 각종 해결했던 이슈들에서 적용한 기술에 대해서 블로그로 전부 남기셨다. 나도 기술 블로그를 작성하고 싶었는데 이를 단순히 기술만 옮겨 적는 것이 아니라 내가 직접 적용하면서 느꼈던 것들을 바탕으로 기술 블로그를 작성해보고자 한다.

'회고 > 우아한테크코스' 카테고리의 다른 글

2023.04.24 일일 회고  (0) 2023.04.25
2023.04.20 일일 회고  (0) 2023.04.21
2023.04.18 일일 회고  (0) 2023.04.19
2023.04.17 일일 회고  (0) 2023.04.18
2023.04.13 일일 회고  (0) 2023.04.14

+ Recent posts