PostgreSQL트랜잭션과 안전성

트랜잭션과 SAVEPOINT

여러 SQL 문을 하나의 안전한 작업 단위로 묶는 트랜잭션과, 중간 지점으로 되돌아가는 SAVEPOINT를 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

text
BEGIN;

UPDATE accounts
SET balance = balance - 100
WHERE id = 1;

SAVEPOINT after_withdraw;

UPDATE accounts
SET balance = balance + 100
WHERE id = 2;

COMMIT;

설명

  • 트랜잭션은 여러 SQL 문을 하나의 작업 단위로 묶는 개념입니다.
  • 도중에 문제가 생기면 ROLLBACK으로 처음 상태로 되돌릴 수 있고, 끝까지 성공하면 COMMIT으로 확정합니다.
  • 이런 구조는 송금, 재고 차감, 주문 생성처럼 여러 단계가 함께 성공해야 의미가 있는 작업에서 필수적입니다.
  • SAVEPOINT는 트랜잭션 안에 중간 복귀 지점을 만드는 기능입니다. 전체를 취소하지 않고 특정 지점까지만 되돌릴 수 있습니다.
  • 결국 트랜잭션은 "부분 성공을 허용하지 않겠다"는 데이터 안정성 선언이라고 이해하면 좋습니다.

짧은 예제

text
BEGIN;

UPDATE products
SET stock = stock - 1
WHERE id = 100;

SAVEPOINT after_stock_change;

INSERT INTO orders (product_id, quantity)
VALUES (100, 1);

ROLLBACK TO after_stock_change;
COMMIT;

빠른 정리

문법역할
BEGIN트랜잭션 시작
COMMIT변경 확정
ROLLBACK전체 취소
SAVEPOINT중간 복귀 지점 생성

주의할 점

트랜잭션을 오래 열어 두면 잠금과 경합이 커질 수 있습니다. 안전성은 중요하지만, 필요한 범위만 짧게 묶는 습관이 운영 환경에서는 특히 중요합니다.

참고 링크

1 sources