Transaction(트랜잭션)이란?

KIMA·2022년 7월 17일
0

Database

목록 보기
3/9
post-thumbnail

트랜잭션이란?

DB의 상태를 변화시키기 위해 수행하는 하나의 논리적인 작업 단위

  • 하나의 작업은 여러 SQL문들로 이루어져 있음
  • 예) 출금 기능
    1. 잔액이 얼마인지 조회
    2. 출금하려는 금액이 잔액보다 작은지 검사
    3. 출금하려는 금액이 잔액보다 작다면, (잔액 - 출금액)으로 수정
    4. 언제, 어디서 출금했는지 정보를 기록
    5. 사용자에게 출금

트랜잭션의 특징 4가지

1. 원자성(Atomicity)

위의 트랜잭션 예시를 다시 보자.

  • 출금 기능의 동작 순서
    1. 잔액이 얼마인지 조회 : SELECT
    2. 출금하려는 금액이 잔액보다 작은지 검사
    3. 출금하려는 금액이 잔액보다 작다면, (잔액 - 출금액)으로 수정 : UPDATE
    4. 언제, 어디서 출금했는지 정보를 기록 : CREATE
    5. 사용자에게 출금

5번까지 모두 성공한다면, 출금 정보를 모두 반영 (= commit)하지만

4번에서 오류가 발생했다면, 앞의 작업을 모두 원래대로 복원(= rollback)해야한다. 하나의 작업을 처리하기 위해 여러 SQL문들을 실행하던 도중 중간에 문제가 발생할 경우, 그 전에 실행되었던 SQL문들을 취소해야만 하는 것이다.

정리하자면 하나의 원자 트랜잭션은 모두 성공(= commit)하거나 실패(= rollback)하는 SQL문들의 집합이다.

즉, 트랜잭션은 rollback되거나 commit되어야하는 것이 원자성이다.

2. 일관성(Consistency)

트랜잭션이 진행되는 동안에 데이터가 변경되더라도 업데이트된 데이터로 트랜잭션이 진행되는 것이 아니라, 처음에 트랜잭션을 진행 하기 위해 참조한 데이터로 진행되어야 함

3. 독립성(Isolation)

둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 경우, 어느 하나의 트랜잭션이라도 다른 트랜잭션의 연산을 끼어들 수 없음

  • 즉, 하나의 특정 트랜잭션이 완료될 때까지, 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 수 없음

4. 지속성(Durability)

트랜잭션이 성공적으로 완료되었을 경우, 결과는 영구적으로 반영되어야 함

적용 범위

  • 데이터를 변경할 경우, 즉 DDL이나 DML 에서 테이블이나 레코드를 추가/수정/삭제할 때만 사용
    • 중간에 문제가 생기면 변경된 데이터를 다시 되돌려야 하므로
  • 데이터를 조회만 할 경우, 즉 SELECT 를 사용할 때는 트랜잭션이 굳이 필요 없음

적용 방법

BEGIN; -- = START TRANSACTION; , 자동 commit이 수동 commit으로 변경됨

-- SQL문들
-- ROLLBACK 명령어를 작성하면 이전 SQL문들의 실행을 취소하고, BEGIN 이전 상태로 돌아감 

END; -- = COMMIT; , 변경 사항들을 DB에 반영
profile
안녕하세요.

0개의 댓글