본문 바로가기
개발 개념 정리

[개념 정리] Transaction에서 ACID와 MVCC란?

by Lee David 2022. 8. 11.
반응형

Transaction이란?

데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위이다. 여기서 유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미한다.

출처. 
https://ko.wikipedia.org/wiki/데이터베이스_트랜잭션

 

풀어서 이야기 하자면 시스템과 시스템의 통신간에 발생하는 전달방식이며 해당 통신으로 전달되는 데이터는 0 혹은 1

즉, 실패해서 데이터를 전송하지 못하거나 성공해서 데이터를 전송한다는 것을 의미 합니다.

 

이러한 통신을 Transaction이라고 칭하며 개발에서 Transaction이라는 용어는 Database와 서버간의 통신을 할 때에 가장 많이 사용하고 예제로도 많이 사용됩니다.

 

예시로 Database에 조회와 동시에 데이터를 insert/update/delete 등의 작업이 요청이 발생한다고 생각해보면 조회하는 작업을 멈추고 다른 작업이 실행된다면 cpu는 이 작업을 memory에 어떻게 넣을지 상상해 보면 분명 cpu는 작업에 대한 프로세스가 정확하게 동작하지 못하였지만 간혹가다 정상동작처럼 보이게 실행을 해줄수 있지만 이러한 오동작이 겹치다 보면 cpu는 자신을 보호하기위해 요청한 프로세스가 죽어버리는 상황도 상상할 수 있습니다.

ACID (Atomicity, Consistency, Isolation, Durability)

우리가 개발을 하고 서비스 혹은 프로세스가 다운된다면 가장 기피하고 싶은 상황이 아닐지 싶습니다.

이런 상황을 이미 타파하기 위해 우리 선배들은 모 아니면 도지만 저장되는 데이터의 정확도 즉 신뢰도를 높이기 위해 끊임없이 고민한 결과가 Transaction이며 해당 개념에서 말하는 ACID 성질에 대해서 알아보겠습니다.

  • 원자성(Atomicity)은 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다. 예를 들어, 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다. 원자성은 이와 같이 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다.
  • 일관성(Consistency)은 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. 무결성 제약이 모든 계좌는 잔고가 있어야 한다면 이를 위반하는 트랜잭션은 중단된다.
  • 독립성(Isolation)은 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. 이것은 트랜잭션 밖에 있는 어떤 연산도 중간 단계의 데이터를 볼 수 없음을 의미한다. 은행 관리자는 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없다. 공식적으로 고립성은 트랜잭션 실행내역은 연속적이어야 함을 의미한다. 성능관련 이유로 인해 이 특성은 가장 유연성 있는 제약 조건이다. 자세한 내용은 관련 문서를 참조해야 한다.
  • 지속성(Durability)은 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다. 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.

출처.

https://ko.wikipedia.org/wiki/ACID

 

이러한 개념은 요청간의 lock을 유발하여 속도면에서 단점이 될 수 있습니다.

그래서 대안으로 나온 개념이 MVCC라는 개념이 있습니다.

MVCC (multiversion concurrency control, MCC, MVCC)

다중 버전 동시성 제어 또는 MVCC라는 개념으로 ACID 개념을 적용하여 요청마다 Lock을 거는 대신에 새로운 데이터가 기존 데이터를 덮어 씌우지만 여러개의 버전이 존재하고 해당 버전들을 하나로 관리되는 성질을 이야기 합니다.

좀더 이야기 하면 복사가 일어나면 해당 Database를 복사하여 Snapshot을 만들고 해당 Snapshot은 Commit이 일어나기 전까지 다른 요청들에서 접근 할 수 없습니다.

 

반응형