본문 바로가기
프로그래밍/MySQL

📊 [SQL] 제44장 TRANSACTION - 실수한 작업을 되돌릴 수 있을까요?

by 강릉바다의 블로그 2026. 7. 31.

 

제44장. TRANSACTION "실수한 작업을 되돌릴 수 있을까요?"


학습 목표

이번 장을 학습하면 다음 내용을 할 수 있습니다.

  • 트랜잭션(Transaction)의 의미를 설명할 수 있다.
  • START TRANSACTION을 사용할 수 있다.
  • COMMIT과 ROLLBACK의 차이를 설명할 수 있다.
  • 여러 SQL을 하나의 작업으로 처리할 수 있다.

은행에서는 왜 실수가 없어야 할까요?

철수의 계좌에는

100,000원이 있습니다.

철수가 영희에게

30,000원을 송금합니다.

이 작업은 다음 두 단계로 이루어집니다.

① 철수 계좌에서 30,000원을 뺍니다.

② 영희 계좌에 30,000원을 넣습니다.


그런데

첫 번째 작업은 성공했는데

두 번째 작업에서

컴퓨터가 갑자기 꺼졌습니다.

그러면 어떻게 될까요?

철수의 돈은 사라졌는데

영희는 돈을 받지 못했습니다.

이것은 매우 큰 문제입니다.


그래서 데이터베이스에는

트랜잭션(Transaction)

이라는 기능이 있습니다.


트랜잭션이란?

트랜잭션은

여러 SQL을 하나의 작업처럼 처리하는 기능입니다.


모든 작업이 성공하면

모두 저장합니다.


중간에 하나라도 실패하면

모든 작업을 취소합니다.


그림으로 이해하기

START TRANSACTION
↓
UPDATE
↓
INSERT
↓
DELETE
↓
모두 성공
↓
COMMIT

또는

START TRANSACTION
↓
UPDATE
↓
오류 발생
↓
ROLLBACK
↓
처음 상태로 복구

트랜잭션 시작하기

START TRANSACTION;

이 명령을 실행하면

새로운 트랜잭션이 시작됩니다.


작업 수행하기

예를 들어

은행 송금을 생각해 봅시다.

START TRANSACTION;

UPDATE Account
SET Money = Money - 30000
WHERE Name='철수';

UPDATE Account
SET Money = Money + 30000
WHERE Name='영희';

아직 저장된 것은 아닙니다.


COMMIT

모든 작업이 성공했다면

COMMIT;

를 실행합니다.

그러면

지금까지의 모든 작업이

최종 저장됩니다.


그림으로 이해하기

작업 시작
↓
UPDATE
↓
UPDATE
↓
COMMIT
↓
저장 완료

ROLLBACK

작업 중 문제가 생겼다면

ROLLBACK;

을 실행합니다.

그러면

트랜잭션을 시작하기 전 상태로

되돌아갑니다.


그림으로 이해하기

작업 시작
↓
UPDATE
↓
오류
↓
ROLLBACK
↓
원래 상태

지금까지 배운 SQL와 연결해 보기

우리는 이미

INSERT를 배웠습니다.

INSERT INTO Customers(...)
VALUES(...);

UPDATE도 배웠습니다.

UPDATE Products
SET Price = Price * 1.1;

DELETE도 배웠습니다.

DELETE FROM Logs
WHERE LogDate < '2024-01-01';

이 SQL들을

하나씩 실행하는 것이 아니라

하나의 작업으로 묶는 것이

트랜잭션입니다.


실제 업무에서는?

예를 들어

회원 탈퇴를 생각해 봅시다.

탈퇴 버튼을 누르면

다음 작업이 이루어집니다.

  • 주문 내역 정리
  • 장바구니 삭제
  • 포인트 삭제
  • 회원 정보 삭제

이 중 하나라도 실패하면

회원 정보만 삭제되고

주문 내역은 남을 수도 있습니다.


그래서

모든 작업을

트랜잭션으로 묶습니다.


예제

START TRANSACTION;

DELETE FROM Cart
WHERE CustomerID = 5;

DELETE FROM Point
WHERE CustomerID = 5;

DELETE FROM Customers
WHERE CustomerID = 5;

COMMIT;

만약

중간에 오류가 발생하면

ROLLBACK;

을 실행하여

모든 삭제를 취소합니다.


많이 하는 실수

실수 ①

COMMIT를 잊는다.

트랜잭션을 시작했는데

COMMIT를 하지 않으면

작업이 저장되지 않을 수 있습니다.


실수 ②

ROLLBACK을 너무 늦게 실행한다.

오류를 발견했다면

가능한 빨리

ROLLBACK을 실행해야 합니다.


실수 ③

트랜잭션이 모든 SQL에 필요한 것은 아니다.

간단한 SELECT는

대부분 트랜잭션이 필요하지 않습니다.


한눈에 정리

명령 역할
START TRANSACTION 작업 시작
COMMIT 저장
ROLLBACK 작업 취소

이번 장 핵심 정리

✅ 트랜잭션은 여러 SQL을 하나의 작업으로 처리한다.

✅ 모든 작업이 성공하면 COMMIT을 실행한다.

✅ 문제가 발생하면 ROLLBACK으로 되돌릴 수 있다.

✅ INSERT, UPDATE, DELETE를 안전하게 사용할 수 있다.


연습 문제

기본 문제

① 트랜잭션을 시작하는 SQL을 작성하시오.

② 작업을 최종 저장하는 SQL을 작성하시오.

③ 작업을 취소하는 SQL을 작성하시오.


응용 문제

회원 탈퇴 과정에서

다음 작업을 수행하려고 합니다.

  • 장바구니 삭제
  • 포인트 삭제
  • 회원 삭제

이 작업을 트랜잭션으로 처리해야 하는 이유를 설명하시오.


도전 문제

다음 상황을 설명하시오.

START TRANSACTION;

UPDATE Products
SET Price = Price * 0.9;

ROLLBACK;

최종적으로 Products 테이블의 가격은 어떻게 될까요?


정답

기본 문제

START TRANSACTION;
COMMIT;
ROLLBACK;

도전 문제

가격은 변경되지 않습니다.

ROLLBACK을 실행했기 때문에

트랜잭션 시작 이전 상태로 되돌아갑니다.


💡 실무 이야기

실무에서는 트랜잭션이 거의 모든 업무 시스템에서 사용됩니다.

예를 들어 쇼핑몰에서는 상품 주문, 결제, 재고 차감이 하나의 트랜잭션으로 처리됩니다. 은행에서는 계좌 이체가, 학교 행정 시스템에서는 성적 입력과 이력 기록이 하나의 트랜잭션으로 묶일 수 있습니다.

학생들이 기억해야 할 가장 중요한 점은 "트랜잭션은 SQL을 더 많이 하는 기능이 아니라, SQL을 더 안전하게 실행하는 기능"이라는 것입니다.


✨ 다음 장 예고

다음 장에서는 지금까지 학습한 내용을 바탕으로 "초보 개발자가 가장 자주 하는 SQL 실수"를 정리해 보겠습니다.

문법을 아는 것만으로는 좋은 개발자가 될 수 없습니다.

실무에서는 실수를 예방하는 습관이 더 중요합니다.

WHERE를 빼먹는 실수, DELETE 실행 전 SELECT COUNT(*)로 확인하는 습관, UPDATE 전에 백업하는 습관 등 지금까지 배운 내용을 종합적으로 정리하며 실무 감각을 완성해 보겠습니다.