본문 바로가기

컴퓨터 지식/Database

데이터베이스 트랜잭션

데이터베이스는 여러 명의 사용자가 동시에 접근해서 사용을 하더라도

항상 모순된 결과가 나오지 않도록 데이터를 정확하게 유지해야 합니다.

또한 만약이라도 데이터베이스에 문제가 생기게 될 경우 최대한 빨리

원래 상태로 복구될 수 있어야 합니다.


데이터베이스에 대한 이러한 요구사항을 만족시키기 위한 방법이

바로 트랜잭션(Transaction)입니다.


요약해서 말씀드리면 트랜잭션이란 데이터베이스를 회복시키고,

병행 제어가 가능하도록 하는 것을 목표로 하고 있습니다.

즉, 트랜잭션이란 하나의 작업을 수행하기 위한

데이터베이스에 필요한 연산들을 모아놓은 것으로, 데이터베이스의 논리적 단위입니다.

다르게 말해 트랜잭션이란 작업 수행에 필요한 SQL 문들의 모임으로 이해할 수 있습니다.



이쯤에서 하나의 예를 들어보겠습니다.

트랜잭션을 설명할 때 가장 많이 사용되는 예이기도 한데요.

은행의 계좌이체 기능을 생각해보겠습니다.

계좌이체란 A계좌에서 B계좌로 돈을 옮기는 것입니다.

이것을 하나의 작업이라고 생각할 수 있는데요.


그러나 이 안에는 좀 더 세분화시킬 수 있는 작업이 있습니다.

1. A계좌에서 출금을 하기 전의 상태,

2. B계좌에 아직 입금이 되지 않은 상태,


3. A계좌에서 출금을 했을 때의 상태,

4. 그리고 A계좌에서 출금은 했지만 B계좌에는 입금이 되지 않은 상태,

5. B계좌에 입금까지 완료된 상태


크게 이렇게 예로 들 수 있을 것입니다.

1번과 2번은 아무런 작업이 가해지지 않은 상태입니다.

그리고 3번 작업이 시작되면 5번까지 아무런 문제 없이

진행이 되어야 합니다.

하지만 실제로는 문제가 발생할 수 있습니다.

데이터베이스에 예기치 못한 오류가 발생할 수도 있고,

갑작스레 정전이 될 수도 있습니다. 이런 다양한 이유에 의해서

데이터베이스에 문제가 생기게 될 수 있고,

그런 경우에 3~5과정이 진행되던 도중 시스템이 중단될 것입니다.


그렇게 된다면 어떻게 돼야 정상일까요?

5번까지 작업이 끝나기 전에 종료되었다면

아무런 작업이 진행되지 않았던 1번과 2번으로 돌아가야 합니다.

그렇지 않으면 데이터베이스는 일관성과 정확성을 잃어버렸다고 봐야하기 때문입니다.



계좌 이체를 예로 트랜잭션에 대해서 간략하게 살펴보았는데요.

트랜잭션에는 크게 네 가지 특성이 있습니다.

A, C, I, D라고도 하는 이 특성은 다음과 같습니다.

A - Atomicity (원자성)

C - Consistency (일관성)

I - Isolation (독립성)

D - Durability (지속성)


이 네 가지 속성에 대해서는 다음번에 좀 더 자세히 살펴보겠습니다.