개발기초

트랜잭션과 ACID

Veams 2023. 5. 22.

트랜잭션이란?

데이터베이스에서 수행되는 '논리적으로 단일한' 작업이다. 트랜잭션은 논리적 연산 단위이자, 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작이다. 다시 말해, 여러 SQL문을 논리적인 하나의 작업 단위로 묶어서 나누어서 수행될 수 없게 처리하는 것을 의미한다. 이 작업은 하나 이상의 데이터베이스 조작(CRUD)으로 구성될 수 있다.

 

트랜잭션 처리가 된 작업은 모두 한꺼번에 실행되거나 전혀 실행되지 않아야 한다. 모든 SQL문이 성공하고 난 뒤에 DB에 반영되는 것이다. 즉, 트랜잭션 내부의 SQL문들 중 일부 SQL만 성공한 경우에는 DB에 반영되는 일은 일어나지 않는다. 

 

구체적인 설명을 위하여 대표적인 예시를 들어본다.

은행에서 두 고객, 김씨와 박씨 간의 자금 이체 작업을 수행한다고 하자.

 

계좌 이체가 정상적으로 이루어지기 위해서는 1) 김씨 계좌에서 100만원을 출금하는 작업, 2) 박씨 계좌에서 100만원을 입금하는 작업이 모두 이루어져야 할 것이다.

 

만약 트랜잭션이 되지 않는 상황에서, 계좌 이체 작업 도중 에러가 발생한다고 가정을 해보자. 김씨 계좌에서 100만원이 빠져나갔으나 박씨 계좌에 입금이 되지 않거나, 김씨 계좌에서 출금이 되지 않았으나 박씨 계좌에 입금이 되는 비정상적인 사례가 발생할 수 있다. 이 때문에 트랜잭션이 필요한 것이다. 1) 출금 작업이나, 2) 입금 작업 중에 하나라도 실패할 경우, Roll Back 되어 작업 이전의 계좌 상태로 복구 되도록 할 수 있다.

 

트랜잭션이 제대로 이루어지려면 다음의 성질을 지켜야 한다.

 

ACID?

ACID 속성은 DB 시스템 내에서 신뢰성과 안정성을 보장하기 위해 중요한 개념이다. 데이터의 일관성을 유지하고 동시성 문제를 피하면서 서비스 사용자의 작업을 안전하게 처리할 수 있도록 돕는다.

 

1) Atomicity원자성

- 원자적인 작업 단위로 처리되어야 한다. 트랜잭션 내의 모든 작업은 전부 성공하거나, 전부 실패해야 한다. 작업 중 일부가 실패하면 트랜잭션은 롤백되어 이전 상태로 복구된다.

 

2) Consistency일관성

- 트랜잭션 실행 전후로 데이터베이스는 일관된 상태를 유지해야 한다. 

 

3) Isolation격리성

- 여러 트랜잭션이 동시에 실행될 경우 각 트랜잭션은 서로 독립적으로 실행되는 것처럼 보여야 한다. 다시 말해 어떤 트랜잭션의 작업이 다른 트랜잭션에 영향을 주지 않아야 한다.

 

4) Durability지속성

- 트랜잭션이 성공하면 해당 트랜잭션에서 수행한 변경 사항(LOG)은 영구적으로 저장되어야 한다. 만약 런타임 오류나 시스템 오류가 발생하더라도, 해당 기록은 영구적이어야 한다는 뜻이다. 이 로그를 이용해서 트랜잭션 수행전 상태로 되돌릴 수 있어야 한다. 때문에 트랜잭션은 로그저장이 완료된 시점에서 종료가 되어야 한다.

댓글