1. 트랜잭션(Transaction) 이란?
- 논리적인 여러 작업을 하나로 묶는 단위
- 하나의 일련된 작업
예시
- 손님이 카페에서 음료를 주문 했을 경우, 손님의 주문 그리고 음료가 제조 및 준비되어 손님에게 전달되기까지의 모든 과정을 하나의 트랜잭션으로 볼 수 있다. 트랜잭션의 특징은 모두 성공하거나, 하나라도 실패하면 전체가 실패한다는 특징을 가지고 있다.
만약 손님의 음료가 완성되어 전달되는 과정에서 음료가 엎어지게 되면, 손님의 주문은 전체가 실패하게 되는 것과 동일하다.
2. 트랜잭션의 ACID란?
트랜잭션에는 4가지의 핵심 속성이 있으며, 해당 속성이 하나라도 충족되지 않으면 해당 트랜잭션은 보장되지 않는다.
즉 ACID는 트랜잭션이 안정적으로 수행되기 위해 보장되어야할 4가지 핵심 속성이다.
ACID는 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)를 뜻한다.
2.1 원자성(Atomicity)
원자성은 트랜잭션 작업이 하나의 '원자'와 같이 모든 작업이 마치 하나와 같이 동작하는것을 보장해야함을 의미한다.
이는 트랜잭션 작업중 하나라도 실패한다면 전체가 실패하게 되며, 모든 작업이 성공해야 비로소 해당 트랜잭션이 성공했음을 나타내는 성질이다. 즉 트랜잭션에는 성공 혹은 실패 두가지 경우만 존재한다. 더불어 실패했을 경우 기존상태로 원복되어야 한다.
예시
A 계좌에서 B 계좌로의 송금을 요청 했을 경우, 모든 송금 과정에서 성공하거나 혹은 과정중 하나라도 실패했을 경우 전체가 실패되는 두가지 경우로 나뉘어질 수 있다. 더불어 실패의 경우 송금 이전의 상태로 돌아가게 되어야 한다.
2.2 일관성(Consistency)
일관성은 트랜잭션 이전, 이후에 데이터베이스가 가지는 상태는 모두 동일해야 함을 의미한다.
예시
사용자의 이름 컬럼이 NotNull 인 테이블이 존재할때, 해당 테이블에 대한 CRUD작업을 진행한 트랜잭션의 이전, 이후에도 해당 테이블이 가지는 NotNull 제약조건에는 변함이 있거나 트랜잭션의 실패시 데이터가 변경 혹은 깨지는 경우가 있어서는 안된다.
2.3 고립성(Isolation)
지속성은 트랜잭션이 작업중 다른 트랜잭션에 영향을 주어서 안되며, 다른 트랜잭션에 의해 영향을 받아서도 안되는 성질을 의미한다.
즉 트랜잭션 자신이 완전 고립된 상태에서 작업이 진행되어야 한다는 것을 의미한다.
예시
5000원을 가진 A 고객이 B 고객에게 송금을 하려한다. 이때 A 고객의 송금 트랜잭션이 진행되는 도중 다른 트랜잭션 요청으로 A 고객의 통장 잔고가 0으로 바뀌게 된다. 즉 다른 트랜잭션의 요청으로 첫번째 트랜잭션이 영향을 받고 송금 오류가 발생하게 된다.
고립성은 이런 문제가 발생하지 않도록 트랜잭션과 트랜잭션이 서로 영향 받지 않도록 해야하는 성질을 나타내고 있다.
위 케이스의 경우 다른 트랜잭션의 작업으로 실제 5000원이라는 금액이 없음에도 송금이 진행되는 오류가 발생할 수 있다.
2.4 지속성, 영속성(Durability)
지속성이란 성공한 트랜잭션의 결과는 데이터베이스에 영구적으로 반영되어야 한다는 것을 의미한다.
가령 시스템에 오류가 발생하더라도 성공한 트랜잭션의 결과는 반드시 보장되어야 한다.
ACID 속성은 데이터베이스가 신뢰성 있게 데이터를 관리및 저장하고 다양한 오류 상황에서도 데이터의 정확성과 안정성을 보장하기 위한 특징이다.
'Database' 카테고리의 다른 글
[Database] 비관적 락(Passimistic Lock)과 낙관적 락(Optimistic Lock) (0) | 2025.02.07 |
---|---|
[Database] 트랜잭션 격리 수준(Isolation Level) (0) | 2024.04.17 |
[Database] Ms-SQL DeadLock 이슈 처리 (0) | 2023.08.22 |