목차

Database transaction

🗓️

Transaction

트랜잭션의 개념

  • 데이터베이스는 다수의 사용자가 동시에 사용하더라도 항상 모순이 없는 정확한 데이터를 유지해야 한다. 장애 상황에서 마찬가지다.
  • DBMS는 데이터가 정확하고 일관된 상태를 유지할 수 있도록 다양한 기능을 제공하는데 그 중에 하나가 트랜잭션이다.
  • 트랜잭션은 한 작업을 수행하는 데 필요한 데이터베이스의 연산들을 모아놓은 것으로 데이터베이스에서 논리적인 작업의 단위가 된다.
  • 장애 발생시 복구하는 작업의 단위도 된다.

트랜젝션의 특성

  • 데이터베이스의 무결성과 일관성을 보장하기 위한 4가지 특성이 있다. → 원자성, 일관성, 격리성, 지속성 앞의 4글자를 가져와 ACID라고 부르기도 한다.
  • ACID는 또한 NoSQL과 대비되는 RDB의 가장 중요한 특징이라고 봐도 무방할 것이다.

Atomicity 원자성

  • 트랜잭션이 모두 실행되거모두 실행되지 않아야 한다. → All-or-nothing
  • 트랜잭션 도중 장애나 에러가 발생했다면 지금까지 실행한 모든 연산을 취소하고 이전 상태로 Rollback해 원자성을 보장해야한다.
  • 다른 예제를 찾아볼려고 했는데 아무래도 계좌이체만큼 이해가 빠른 예시도 없을것같아 그대로 가져온다.

트랜잭션 중에 장애가 발생하면 작업이 취소되어야 한다.

Consistency 일관성

  • 트랜잭션이 성공적으로 완료된 이후에도 데이터베이스가 일관된 상태를 유지해야 한다는 의미다.
  • 트랜잭션 중에는 일관되지 않을 수 있지만 완료된 이후에는 일관된 상태를 유지해야한다.

이와 같이 트랜잭션이 완료된 후에도 데이터가 일관되야 한다는 말이다.

이와같이 잔액의 합계가 달라지면 일관성을 만족하지 않는다.

Isolation 격리성, 고립성

  • 현재 수행 중인 트랜잭션이 완료되기 전에는 트랜잭션이 생성한 중간 연산 결과에 다른 트랜잭션이 접근 할 수 없다는 의미다.
  • 여러 쿼리가 동시에 수행될때 각 트랜잭션이 독립적으로 수행될 수 있도록 서로 접근하지 못하게 한다.

이체 트랜잭션 중 해당 계좌에 입금이 동시에 진행되면 안된다.

위와 같이 참조하는 데이터가 동일할때는 독립적으로 트랜잭션이 진행되야 한다.

Durability 지속성, 영속성

  • 트랜잭션가 완료된 결과는 손실되지 않고 영구적이어야 한다는것을 의미한다.
  • 만약 DBMS에 장애가 발생하더라도 작업결과는 없어지지 않고 데이터베이스에 그대로 남아있어야 한다는 의미다.