트랜잭션이란 데이터베이스에서 하나의 작업 단위를 의미하며, 여러 개의 SQL 명령이 하나의 묶음으로 실행되는 것입니다.
이 묶음은 모두 성공하거나, 모두 실패해야 합니다.
데이터를 일관성 있게 유지하기 위해서입니다. 중간에 작업이 일부만 성공하면 데이터가 엉망이 되기 때문이죠.
은행 계좌 이체 상황:
1. A의 계좌에서 10만원 차감
2. B의 계좌에 10만원 입금
이 둘이 동시에 성공해야 의미가 있습니다. 하나만 성공하면 문제가 생기죠. 이걸 하나의 트랜잭션으로 묶습니다.
try:
cur.execute("UPDATE accounts SET balance = balance - 100000 WHERE name = 'A'")
cur.execute("UPDATE accounts SET balance = balance + 100000 WHERE name = 'B'")
conn.commit() # 성공 시 적용
except Exception as e:
conn.rollback() # 실패 시 모두 취소
트랜잭션이 지켜야 할 4가지 원칙을 말합니다.
약자 | 뜻 | 설명 |
---|---|---|
A | Atomicity (원자성) | 모든 작업이 전부 수행되거나 전혀 수행되지 않아야 함 |
C | Consistency (일관성) | 트랜잭션 전후의 데이터 상태가 논리적으로 일관되어야 함 |
I | Isolation (고립성) | 동시에 실행되는 트랜잭션이 서로 영향을 주지 않도록 처리되어야 함 |
D | Durability (지속성) | 트랜잭션이 성공하면 결과는 영구적으로 저장되어야 함 (시스템 장애에도 유지) |
상황: 쇼핑몰에서 결제 처리
1. A 고객이 상품 구매 버튼 클릭
2. 상품 재고 감소
3. 결제 내역 추가
4. 배송 요청 생성
이 모든 과정이 트랜잭션이고, 다음과 같은 규칙이 적용됩니다:
개념 | 의미 | 핵심 목적 |
---|---|---|
트랜잭션 | 작업 단위를 하나로 묶은 것 | 모두 성공 or 모두 실패 처리 |
ACID | 트랜잭션의 4가지 필수 조건 | 정확성, 신뢰성, 일관성 보장 |