Web Frontend/Database

[SQL] 트랜잭션 이해하기 - ACID 원칙

코라채 2025. 3. 5. 17:35
728x90
반응형

Transaction(트랜잭션)이란?

트랜잭션(Transaction)은 데이터베이스에서 실행되는 하나의 논리적인 작업 단위를 의미합니다.
즉, 여러 개의 SQL 문을 하나의 묶음으로 처리하고, 이를 하나의 작업(트랜잭션)으로 간주합니다.

 

트랜잭션 문법 

BEGIN TRANSACTION; -- 트랜잭션 시작 ( Oracle에서는 자동 )

UPDATE 실행 쿼리
UPDATE 실행 쿼리

COMMIT;  -- 트랜잭션 완료 → 저장!

트랜잭션이 필요한 이유

  • 데이터의 무결성(Integrity) 보장
    → 중간에 오류가 나도 완전히 수행되거나(Rollback), 완전히 취소(Commit)되는 것이 중요함.
  • 은행 시스템, 주문 시스템, 결제 시스템 등에서 필수
    → 예를 들어, 계좌에서 돈을 이체할 때 보내는 쪽에서 차감되었지만 받는 쪽에서 입금이 안 되면 큰 문제임!

트랜잭션의 특징 (ACID 원칙)

트랜잭션은 ACID 원칙을 따라야 합니다.

ACID 개념

Atomicity (원자성) 모든 작업이 성공해야 반영, 하나라도 실패하면 전체 취소
Consistency (일관성) 데이터 무결성이 보장되어야 함
Isolation (고립성) 각 트랜잭션이 독립적으로 실행되어야 함
Durability (지속성) 트랜잭션이 성공하면 데이터는 영구적으로 저장

트랜잭션 주요 명령어

명령어 설명

BEGIN TRANSACTION 트랜잭션 시작 (Oracle에서는 자동)
COMMIT 트랜잭션 정상 종료 및 저장
ROLLBACK 트랜잭션 취소 및 이전 상태로 복원

트랜잭션 예제

📌 1. COMMIT: 정상적으로 저장

BEGIN TRANSACTION;

UPDATE 계좌 SET 잔액 = 잔액 - 100000 WHERE 고객ID = 'A100';  -- 돈 출금
UPDATE 계좌 SET 잔액 = 잔액 + 100000 WHERE 고객ID = 'B200';  -- 돈 입금

COMMIT;  -- 트랜잭션 정상 완료 → 저장!

 

완전히 실행된 경우, 데이터베이스에 영구 반영됨.

📌 2. ROLLBACK: 오류 발생 시 실행 취소

BEGIN TRANSACTION;

UPDATE 계좌 SET 잔액 = 잔액 - 100000 WHERE 고객ID = 'A100';  -- 돈 출금
UPDATE 계좌 SET 잔액 = 잔액 + 100000 WHERE 고객ID = 'B200';  -- 돈 입금

-- 오류 발생: 고객 B200 계좌 없음!
ROLLBACK;  -- 모든 변경 사항 취소!

 

중간에 오류가 발생하면, 모든 작업이 무효화됨.
돈이 빠져나갔지만 입금이 안 되는 문제를 방지함!

📌 3. 트랜잭션과 동시성 문제 (Isolation 예제)

두 사용자가 같은 상품의 재고를 동시에 변경할 경우

사용자 A

BEGIN TRANSACTION;
UPDATE 제품 SET 재고 = 재고 - 1 WHERE 제품ID = 'P001';
-- 아직 COMMIT 안 함!

사용자 B

BEGIN TRANSACTION;
UPDATE 제품 SET 재고 = 재고 - 1 WHERE 제품ID = 'P001';
-- 사용자 A가 COMMIT 안 했기 때문에 충돌 가능!

 

동시에 실행되면 재고가 꼬일 수 있음 → Isolation이 중요!

트랜잭션 정리

트랜잭션이란? 여러 개의 SQL 명령을 하나의 단위로 실행
왜 필요함? 데이터 일관성 유지 & 오류 방지
주요 명령어 BEGIN TRANSACTION, COMMIT, ROLLBACK
ACID 원칙 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)

 

728x90
반응형