민규의 흔적

[오라클 DB] 트랜잭션의 특성 본문

데이터베이스

[오라클 DB] 트랜잭션의 특성

민규링 2024. 1. 31. 01:43

 

트랜잭션이란, 하나의 논리적인 단위를 수행하는 데이터베이스 연산자들의 모임이다.

 

40명의 학생 데이터 중, 하나를 삽입하는 것도 트랜잭션이며, 한 번에 삽입하는 것도 트랜잭션이다.

DBMS는 트랜잭션 단위로 연산 중간에 하나라도 실패하면 전으로 돌릴 수 있다.

 

다음의 예시를 보자.

 

 

위 예시는 두 사람 간의 계좌이체 트랜잭션이다.

 

계좌이체 시 한 명은 돈을 보냈는데 다른 한 명은 돈을 받지 못하거나, 반대로 돈을 보내려다 취소했는데 다른 한 명이 돈을 받는 상황이 생기면 매우 곤란할 것이다.

 

한 명이 돈을 보내면 다른 한 명은 무조건 돈을 받아야 하고, 한 명이 돈을 보내지 않으면 다른 한 명은 무조건 돈을 받지 않는 상태만이 유효해야 한다.

 

즉, 위의 2개의 SQL문은 하나의 트랜잭션으로 취급하며, 모두 수행되거나 모두 수행되지 않아야 한다. 

 

트랜잭션의 특성

 

 

트랜잭션의 특성은 ACID 특성이라고도 한다.

 

원자성(Atomicity)

 

한 트랜잭션 내의 모든 연산들이 완전히 수행되거나 수행되지 않는 것(All or Nothing)을 뜻하며,

위 계좌이체 트랜잭션에서 들었던 예시가 원자성에 관한 내용이다.

 

 

일관성(Consistency)

 

어떤 트랜잭션이 수행되기 전에 데이터베이스가 일관된 상태를 가졌다면 트랜잭션이 수행된 후에 데이터베이스는 또 다른 일관된 상태를 가진다.

 

 

 

계좌이체 트랜잭션이 수행되기 전에는 성호의 잔액이 10,000원, 은경의 잔액이 0원이라는 일관된 상태를 지니고 있다.

성호가 은경에게 5,000원 계좌이체하는 트랜잭션을 수행한 이후, 성호는 잔액이 5,000원이 줄고 은경은 잔액이 5,000원이 늘어나 있는 또 다른 일관된 상태를 유지해야만 한다. 이를 일관성이라고 한다.

 

트랜잭션이 수행되는 도중에는 데이터베이스가 일시적으로 일관된 상태를 갖지 않을 수 있다.

 

 

고립성(Isolation)

 

한 트랜잭션이 데이터를 갱신하는 동안 이 트랜잭션이 완료되기 전에는 갱신 중인 데이터를 다른 트랜잭션에서 접근할 수 없다.

 

다수의 트랜잭션이 동시에 수행되더라도, 그 결과는 어떤 순서에 따라 트랜잭션들을 하나씩 차례대로 수행한 결과와 같아야 한다.

 

고립성을 보장해야 하는 이유를 다음의 예시와 함께 알아보자.

 

 

성호의 계좌에서 5,000원을 감소시키는 첫 번째 연산이 실행된 이후, 외부 트랜잭션에서 은경의 계좌에 1,000원을 입금하고, 여전히 0원으로 알고 있는 계좌이체 두 번째 연산이 수행된다면 모순된 데이터를 변경해 데이터의 일관성을 보장할 수 없을 것이다.

실제 6,000원이어야 하는 은경의 계좌에 최종 트랜잭션 수행 결과 5,000원이 최종 잔액이 되는 데이터 불일치 상태가 발생할 수 있게 된다.

 

이를 방지하기 위해 DBMS의 동시성 제어 모듈이 트랜잭션의 고립성을 보장해주며,

DBMS는 요구사항에 따라 다양한 고립 수준(Isolation Level)을 제공한다.

 

 

 

지속성(Durability)

 

일단 한 트랜잭션이 완료되면 데이터베이스에 반영한 수행 결과는 영구적이어야 한다.

 

완료된 트랜잭션의 효과는 시스템이 고장난 경우에도 데이터베이스에 반영되어야 하며,

DBMS의 회복 기능은 시스템이 다운되는 경우에도 트랜잭션의 지속성을 보장한다.

 

 

 

위에서 설명한 트랜잭션의 4가지 특성(ACID)를 보장하기 위해 필요한 DBMS의 기능들은 다음과 같다.

 

특성 DBMS의 기능
원자성 회복
일관성 무결성 제약조건
동시성 제어
고립성 동시성 제어
지속성 회복