* 이 글은 쉬운코드에 올린 트랜잭션 영상들이 개념적으로 어떻게 연결되는지 전체 그림을 설명하기 위한 목적으로 작성했습니다
* 위에서 아래 순서로 영상을 보는 것을 추천합니다
Transaction & ACID
먼저 트랜잭션이 무엇인지부터 설명한다
데이터베이스에서 여러 작업을 하나의 단위로 묶어서 처리할 수 있도록 하는 것이 transaction 사용 목적이라서 이 개념을 정확히 이해하는 것이 중요하다
그리고 트랜잭션의 속성인 ACID에 대해 설명한다
ACID는 너무나도 기본적이면서도 중요한 개념이기 때문에 잘 알고 있는 것이 중요하다
👉👉👉 Transaction & ACID 영상 보러 가기
Serializability
ACID 중에서도 특히 Isolation은
여러 트랜잭션들이 동시에 실행돼도
마치 각각이 격리되어 실행되는 것처럼 다른 트랜잭션들로부터 영향을 받지 않고 동작하는 것을 의미하는데
이를 보장하기 위한 속성이 serializability이다
트랜잭션의 Isolation을 온전히 보장하기 위해서는 DBMS의 concurrency control이 serializability를 제공해야 한다
serializability를 제공하지 못하면 여러 트랜잭션들이 동시에 실행될 때 예상과는 다른 이상한 결과들이 발생할 수 있다
serializability는 엄밀히 말하면 schedule의 속성이다
그렇기 때문에 serializability 영상에서는 schedule 개념부터 serializability 개념까지 관련 개념들을 자세히 다룬다
Recoverability
온전한 isolation을 위해 중요한 것은 serializability만 있는 것이 아니다
한 트랜잭션이 rollback 했을 때 다른 트랜잭션이 영향을 받지 않는 것 또한 isolation에 있어서 중요한 관심사이며
이를 위해 DBMS는 recoverability 속성 또한 제공을 해야 한다
recoverability 또한 엄밀히 말하면 schedule의 속성이다
recoverability 영상을 통해 여러 트랜잭션들이 실행되는 상황에서 어떻게 제대로 롤백할 수 있는지 다루게 된다
Isolation level
트랜잭션의 isolation이 제대로 유지되려면
여러 트랜잭션들이 동시에 실행되더라도 이상한 결과들이 발생하지 않게끔,
즉 serializability와 recoverability가 보장될 수 있게끔 해야 하지만
그렇게 했을 때 단점은 동시에 처리할 수 있는 트랜잭션의 수가 줄어들어서 DBMS의 퍼포먼스가 하락한다는 것이다
이를 해결하기 위해 DBMS의 concurrency control은 여러 종류의 isolation level을 제공해서
개발자가 데이터 정합성과 성능 사이에서 어느 정도 트레이드 할 수 있도록 한다
해당 영상에는 isolation level의 개념과 종류, 그리고 isolation이 완벽히 보장되지 않을 때 나타날 수 있는 여러 이상한 현상들을 소개한다
Lock & 2PL
concurrency control은 serializability, recoverability, 그리고 이와 관련된 isolation level을 제공한다
그렇다면 DBMS에서 어떻게 concurrency control을 구현할 수 있을까?
해당 영상에서는 concurrency control 구현에 기본이 되는 락(lock)의 개념과 종류를 설명한다
그리고 serializability를 보장하는 2PL의 개념과 종류를 설명한다
이 중에는 recoverability까지 보장하는 2PL 들도 포함되어 있다
MVCC
오늘날 대부분의 DBMS는 락(lock)만 활용해서 concurrency control을 구현하지 않는다
락만 사용해서 구현하게 되면
서로 다른 트랜잭션이 같은 데이터에 대해서 write-write, read-write, write-read를 하는 경우에 한쪽이 블락(block)되기 때문에
동시에 처리할 수 있는 트랜잭션 수가 줄어들어 성능이 감소하게 된다
이를 해결하기 위해 나온 것이 MVCC이고 오늘날의 거의 모든 DBMS가 MVCC를 사용해서 concurrency control을 구현/제공한다
해당 영상에서는 MVCC의 개념을 살펴보고
MVCC를 사용하는 MySQL과 postgreSQL의 예제를 통해 각 isolation level에서 어떤 이상한 현상이 발생할 수 있으며
이런 문제들을 어떻게 해결할 수 있는지 살펴 본다
👉👉👉 MVCC 1부 영상 보러 가기
👉👉👉 MVCC 2부 영상 보러 가기