본문 바로가기

Database/MSSQL

[MS SQL] 트랜잭션(Transaction)이란? - 이해하기 쉬운 트랜잭션 개념

반응형

안녕하세요! Plitche(플리체)입니다.
이번 포스팅은 [MS SQL] 트랜잭션(Transaction)이란? - 이해하기 쉬운 트랜잭션 개념입니다.

Intro

데이터베이스 트랜잭션은 데이터 베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위이다. 여기서 유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미한다.

자! 위의 설명은 위키피디아에 나와있는 설명이다. 당신은 이해할 수 있는가?

그렇다면 당신은 이 글을 읽지 않아도 괜찮다..


적어도 나는 아무리 개념적인 정의를 읽어도 잘 이해가 되지 않았다. 때문에 내가 현재까지 이해한 내용에 대해서 최대한 설명하고자 한다.

트랜잭션(Transaction)이란?

트랜잭션(Transaction)이란, 데이터베이스를 수정하거나 상태를 변화시키는 등의 작업을 수행하는 단위를 말한다.

어떤 Database이든 당신이 상태를 변화시키기 위해 하는 작업은 Query문이다.

  • INSERT
  • UPDATE
  • DELETE
  • SELECT

즉! DML(Data Manipulation Language) - 데이터 조작어를 사용한 query라는 뜻이다.

DML은 데이터베이스에 입력된 레코드(행, row)를 조회/수정/삭제하는 등의 역할을 한다.

주의!

  • 여기서 주의 해야 하는 것은 단위는 단 하나의 쿼리문이 아니라는 것이다.
업무수행 단위란 작업을 하기 위해서 실행되는 쿼리의 묶음이다.

 

이 때 단위의 기준은 개발자가 정하게 되며, 업무 수행단위, 논리적인 수행단위라고도 한다.

Example(예시)

만약 당신이 쇼핑몰을 운영한다고 생각해보자. 운영에 필요한 작업은 무수히 많겠지만, 가장 중요한 것은 역시 구매, 판매일 것이다.
정말 간단하게만 작성해도 고객이 코트라는 상품을 하나 구매할 때 아래 3개의 쿼리문이 필요하게 된다.

-- 유저 정보 가져오기
SELECT 아이디, 번호, 주소
FROM CUSTOMER 
WHERE 아이디 = 'plitche';

-- 주문하기
INSERT INTO ORDER
VALUES ('주문번호', 'plitche', '번호', '주소', '상품정보');

-- 상품 재고 수정하기
UPDATE ITEM 
SET 재고 = 재고-1
WHERE 상품이름 = '코트'

내가 고객이 상품을 구매하는 과정을 하나의 단위로 정하게 된다면, 위의 3개의 쿼리문이 하나의 트랜잭션이 되는 것이다.

Why? 트랜잭션 처리!

위의 예제에서 '3개의 쿼리문이 실행되어야 하나의 트랜잭션 실행됐다.' 라고 볼 수 있다.

 

하지만 어떤 오류로 인해서 주문은 되었는데 상품 재고 수정은 안되었다고 생각해보자.

 

주문은 계속해서 되고 있는데 상품 재고가 없어서 발송이 어려운 상황이 생길 수 있다.

 

때문에 이런 오류를 방지하기 위한 것이 트랜잭션 처리이다.

 

이런 트랜잭션 처리는 아래 특징을 고려해야 한다.

트랜잭션의 특징(ACID)

트랜잭션의 특징은 크게 4가지 정도로 구분된다.

  • 원자성 : Atomicity
    • 깨지지 않는다. => 3개의 쿼리문이 원자처럼 하나로 묶여있다.
    • 트랜잭션이 모두 반영되거나, 아니면 전혀 반영되지 않아야 한다.
  • 일관성 : Consistency
    • 데이터 결함과 관련.
    • 트랜잭션의 작업 처리 결과가 항상 일관성 있어야 한다.
  • 독립성 : Isolation
    • 둘 이상의 트랜잭션이 실행되고 있을 경우, 어떤 특정 트랜잭션이라도 다른 트랜잭션에 끼어들 수 없다.
  • 지속성 : Durability
    • 트랜잭션이 성공적으로 완료되었을 경우, 결과는 영구적으로 반영되어야 한다.

트랜잭션의 사용(Commit, Rollback)

Commit

  • 트랜잭션이 성공적으로 실행되었고, 위의 4가지 특징을 침해하지 않는다면 하나의 트랜잭션이 끝났다라는 것을 명시하는 연산이다.
  • 실행된 트랜잭션이 로그에 저장되며 실질적으로 반영/적용 하겠다라는 뜻이다.

Rollback

  • 하나의 트랜잭션 처리가 성공적으로 실행되지 않았고 비정상적으로 종료되어 위의 4가지 특징이 깨진 경우 수행되는 연산이다.
  • 트랜잭션을 처음부터 다시 시작하거나, 부분적으로 연산된 결과를 취소시키는(되돌리는) 역할을 한다.

Review

  • 연관되어있는 작업들을 하나의 트랜잭션으로 묶어, 하나처럼 같이 수행되도록 하는 것이 트랜잭션 입니다.
  • 여러 작업들 중 하나라도 제대로 수행되지 않는다면 일부분만 적용 되는 것을 방지하기 위함입니다.
  • 또한 실제 업무에서 실제 서버에 반영하기전에 개발자 본인과 QA를 통하여 여러가지 Test를 수행 할 것입니다.
  • 만약 여기서 임의의 데이터를 만든다거나 임의로 데이터를 변경할 경우가 생긴다면 유용하게 사용할 수 있습니다.
    (2개 이상의 insert, update, select, delete 쿼리문이 연관된 하나의 작업일 경우 트랜잭션을 사용하는 것이 좋습니다.)
반응형