[MySQL] 트랜잭션
트랜잭션 기본 개념
트랜잭션은 여러 데이터베이스 작업을 하나의 작업 단위로 묶는 것이라고 생각할 수 있습니다. 쉽게 말해, 한 번에 모두 성공해야 할 일련의 데이터베이스 명령들의 집합입니다. 만약 이 중 하나라도 실패한다면 트랜잭션에 포함된 모든 변경사항은 취소되어야 합니다. 이러한 취소 작업을 "롤백(rollback)"이라고 합니다. 반대로, 모든 작업이 성공적으로 완료되면, 변경사항은 "커밋(commit)"되어 데이터베이스에 반영됩니다.
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE name = 'Alice';
UPDATE accounts SET balance = balance + 100 WHERE name = 'Bob';
COMMIT;
위 예시에서, Alice의 계좌에서 100을 차감하고 Bob의 계좌에 100을 추가하는 두 개의 작업이 하나의 트랜잭션으로 묶입니다. 모든 작업이 성공적으로 수행되면 커밋을 통해 변경사항이 확정됩니다.
트랜잭션의 ACID 속성
트랜잭션을 안정적으로 관리하기 위해서는 ACID 속성을 만족해야 합니다:
- 원자성(Atomicity): 트랜잭션 내의 모든 연산은 전체가 성공하거나 전체가 실패하여야 합니다. 중간 단계에서 멈출 수 없습니다.
- 일관성(Consistency): 트랜잭션이 성공적으로 완료되면, 데이터베이스는 일관된 상태를 유지해야 합니다.
- 격리성(Isolation): 동시에 여러 트랜잭션이 처리될 때, 한 트랜잭션의 작업 내용이 다른 트랜잭션에 의해 노출되면 안 됩니다.
- 지속성(Durability): 트랜잭션이 성공적으로 커밋되면, 그 결과는 시스템에 영구적으로 반영되어야 합니다. 시스템이 충돌하더라도 이는 보장되어야 합니다.
트랜잭션의 중요성
트랜잭션은 데이터의 일관성과 정확성을 유지하는 데 필수적입니다. 아래와 같은 다양한 상황에서 트랜잭션의 중요성을 확인할 수 있습니다:
- 금융 시스템: 은행 계좌 간의 송금 작업은 반드시 원자적으로 처리되어야 합니다. 한 계좌에서 돈이 인출되면, 다른 계좌에 정확히 그만큼의 금액이 입금되어야 합니다.
- 재고 관리: 제품의 주문과 동시에 재고 수량을 감소시키는 작업은 일관성 있게 처리되어야 합니다. 이는 오류나 데이터 손실 없이 정확한 재고량을 유지하는 데 필수적입니다.
- 온라인 서비스: 사용자들이 동시에 같은 데이터를 변경하려고 할 때, 트랜잭션은 데이터의 일관성을 보장합니다.