[DB] 트랜잭션(Transaction)

2025. 8. 22. 16:36·Computer Science/데이터베이스

트랜잭션(Transaction)의 정의

트랜잭션(Transaction)이란 "하나의 연속적인 업무 단위"를 의미한다.

 

예를 들어 A 고객이 B 고객에게 100만원을 이체하려고 한다고 가정하자.

해당 상황을 단계별로 나누어본다면,

1) A 고객의 잔액이 100만원 이상인지 확인해야 한다.

2) 100만원 이상이면, A 고객의 잔액을 100만원 차감한다.

3) B 고객의 잔액에 100만원을 더해준다.

 

이 모든 과정을 통틀어 트랜잭션이라고 한다.

트랜잭션은 한꺼번에 수행되어야 하며, 중간에 일련의 과정이 삭제되거나 삽입될 수 없다.

 

트랜잭션 수행 방식은 다음과 같다.

START TRANSACTION;
	-- 1. a 계좌의 잔액이 100만원 이상이면
    -- 2. a 계좌의 잔액을 100만원 차감하여 update
    -- 3. b 계좌의 잔액을 100만원 증가하여 update
COMMIT;

 


 

트랜잭션의 특징

트랜잭션의 대표적인 특징은 원자성(atomicity), 일관성(consistency), 고립성(isolation), 지속성(durability) 4가지이다.

 

원자성(atomicity)

원자성은 트랜잭션이 데이터베이스에 모두 반영되거나 or 전혀 반영이 되지 않아야 한다.

 

일관성(consistency)

일관성은 트랜잭션의 수행 전후로 데이터베이스에 정의된 무결성을 항상 만족해야 한다.

 

고립성(isolation)

고립성은 둘 이상의 트랜잭션이 동시에 실행되고 있을 경우, 각 트랜잭션이 다른 트랜잭션에게 영향을 주지 않아야 한다.

 

지속성(durability)

지속성은 트랜잭션이 성공적으로 수행되면 갱신된 데이터베이스 내용이 영구적으로 저장되어야 한다.

 


 

트랜잭션 연산(COMMIT, ROLLBACK, SAVEPOINT)

COMMIT

COMMIT 연산은 트랜잭션을 데이터베이스에 적용하는 연산이다.

START TRANSACTION;
	INSERT INTO
    	USERS
    VALUES (1, '홍', '길동', '서울시 용산구', 24, '010-1234-1234');
COMMIT;

SELECT * FROM USERS;

 

트랜잭션이 시작되어 작업을 실행하고 데이터베이스에 반영하기 위해 최종적으로 커밋(COMMIT)하는 명령어이다.

 

ROLLBACK

ROLLBACK 연산은 트랜잭션 실행 중의 변경 사항을 모두 취소하고, 트랜잭션 시작 이전 상태로 되돌리는 연산이다.

START TRANSACTION;
	SELECT
    	*
   	FROM
    	USERS;
	INSERT INTO
    	USERS
    VALUES (1, '홍', '길동', '서울시 용산구', 24, '010-1234-1234');
ROLLBACK;

SELECT * FROM USERS;

 

트랜잭션을 시작하고 작업을 실행하는 도중 ROLLBACK 명령어를 수행하면,

홍길동의 정보는 USERS 테이블에서 찾아볼 수 없다.

트랜잭션 시작 후의 작업이 모두 취소되었기 때문이다!

 

SAVEPOINT

SAVEPOINT는 트랜잭션 내에서 복구 지점을 설정하여, 해당 지점 이후로 선택적으로 ROLLBACK할 수 있도록 하는 연산이다.

예시로 자세히 살펴보자.

START TRANSACTION;
	INSERT INTO
    	USERS
    VALUES (1, '홍', '길동', '서울시 용산구', 24, '010-1234-1234');
    SAVEPOINT A;
    INSERT INTO
    	USERS
    VALUES (2, '박', '보검', '서울시 중구', 25, '010-1234-5678');
	ROLLBACK TO A;
COMMIT;

SELECT * FROM USERS;

 

트랜잭션을 시작하고 홍길동의 정보를 삽입한 후, A라는 이름으로 SAVEPOINT를 지정하였다.

이후 박보검의 정보를 삽입하였지만,

ROLLBACK TO A; 명령어로 인해 A 지점으로 롤백되어 → A 지점 이후의 작업들은 모두 취소되었다.

따라서 USERS 테이블에서 홍길동의 정보는 조회가 되겠지만, 박보검의 정보는 조회되지 않을 것이다.

 


 

이처럼 트랜잭션은 복구 지점을 직접 지정함으로써 원하는 작업만 수행할 수 있다.

특히 복잡한 작업을 수행할 때는 즉시 작업을 처리하기보다,

중간중간 복구 지점을 설정하여 관리하는 것이 더 안전하다.

 

:)

 

출처

https://mommoo.tistory.com/62

https://daily-progress.tistory.com/76

'Computer Science > 데이터베이스' 카테고리의 다른 글

[DB] 트랜잭션 고립 수준(Transaction Isolation Level)  (0) 2025.09.19
[DB] 공통 테이블 식(CTE)  (0) 2025.09.19
[DB] Union vs Union All  (0) 2025.09.10
[MySQL] JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN  (4) 2025.08.07
[DB] RDBMS vs NoSQL  (0) 2025.06.10
'Computer Science/데이터베이스' 카테고리의 다른 글
  • [DB] 공통 테이블 식(CTE)
  • [DB] Union vs Union All
  • [MySQL] JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN
  • [DB] RDBMS vs NoSQL
jjangsudiary
jjangsudiary
jjangsudiary 님의 블로그 입니다.
  • jjangsudiary
    jjangsudiary 님의 블로그
    jjangsudiary
  • 전체
    오늘
    어제
    • 분류 전체보기 (81) N
      • 이모저모 (0)
        • 회고 (0)
      • Development (17) N
        • 개발 공부 (14) N
        • 프로젝트 (2)
      • Android (10)
        • Compose (1)
      • AI (15)
      • Computer Science (25)
        • 네트워크 (8)
        • 데이터베이스 (10)
        • 운영체제 (6)
        • 자료구조 (0)
        • 컴퓨터구조 (1)
      • Java (9)
        • 디자인패턴 (2)
      • Spring (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    운영체제
    Ai
    인공지능
    database
    자바
    java
    코딩 테스트
    android
    프로그래머스
    백준
    CS
    db
    TensorFlow
    딥러닝
    baekjoon
    os
    Python
    파이썬
    머신러닝
    안드로이드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
jjangsudiary
[DB] 트랜잭션(Transaction)
상단으로

티스토리툴바