loading
본문 바로가기
MY SQL

[SQL] 트랜잭션(Transaction)이란? / 그림으로 쉽게 이해하기

by 원쿤짱쿤 2024. 4. 17.
반응형

 
트랜잭션(Transaction)이란?
 
트랜잭션이란  데이터베이스 내에서 하나의 그룹으로 처리되어야 하는 명령문들을 모아 놓은 논리적인 작업 단위이다
간단하게 말해서 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 뜻한다
 
여기서 데이터베이스의 상태를 변화시킨다는 말이란
간단하게 말해서 질의어(SQL)를 이용해서 데이터베이스에 접근하는 것을 의미한다.
(SELECT, INSERT, DELETE, UPDATE 등)
 
질의어는 한문장이 아닌 사람이 정하는 기준에따라 달라진다
 
아래의 예시로 알아보자
 
<예시>
사용자가 어느 웹사이트에서 문의글을 작성하고 '작성' 버튼을 클릭했을 때
문의글 게시판에는 전체 글중에 사용자가 작성한 문의글이 업데이트되어 보여지게된다.
해당 순서를 데이터베이스 작업으로 봤을 때
사용자가 '작성'버튼을 클릭하면 INSERT문을 사용하여 문의글의 데이터를 데이터베이스에 옮겨진다.
이후 게시판을 구성한 데이터를 다시 SELECT하여 최신 정보를 유지한다
 
여기서 작업단위는 INSERT문과 SELECT문을 합친것이다.
이러한 작업단위를 하나의 트랜잭션 이라고 한다
 

트랜잭션의 필요성

그렇다면 왜 트랜잭션이 필요할까?
트랜잭션은 여러 단계의 처리를 하나의 처리처럼 다루는 기능으로 여러 개의 명령어의 집합이 정상적으로 처리되면 정상 종료된다. 하나의 명령어라도 잘못되면 전체 취소된다.
트랜잭션을 쓰는 이유는 데이터의 일관성을 유지하면서 안정적으로 데이터를 복구하기 위함이다.
 
아래에 예시로 필요성을 알아보자
 
<예시>
트랜잭션은 '거래'라는 뜻으로, 자판기에서 음료를 구매하는 과정으로 생각해봅니다.
 
1  자판기에 동전을 넣어 원하는 음료를 선택 했다고 가정합니다
2. 동전은 들어갔지만 알 수 없는 오류가 발생하여 음료수가 정상적으로 나오지 않았습니다
3. 이때 우리는 담당자에게 연락하여 돈을 환불 받거나, 아니면 다시 동전을 넣어 좌석을 하면됩니다
4. 하지만 해당 방법은 번거롭고 더 심한 오류를 발생시킬 수 있습니다
5.그래서 생각해낸 해결책이, 거래가 성공적으로 모두 끝난 후에야 이를 완전한 거래로 승인하고, 거래 도중 뭔가 오류가 발생했을 때는 이 거래를 아예 처음부터 없었던 거래로 되돌리는 것입니다.
7. 이렇게 거래의 안전성을 확보하는 방법이 트랜잭션입니다
8. 데이터베이스에선 테이블에서 데이터를 읽어 온 후 다른 테이블에 데이터를 입력하거나 갱신, 삭제하는데 처리 도중 오류가 발생하면 모든 작업을 원상태로 되돌립니다
9. 데이터베이스에선 처리 과정이 모두 성공했을 때만 최종적으로 데이터베이스에 반영합니다.
 
그림을 통해 다시 알아봅시다
 
 

 
[1], [2]번까지 잘 실행되다가 [3]번 작업 시 소프트웨어가 중단되거나 하드웨어가 고장이 발생하여 작업에 오류가 생긴다면?
[2]번까지의 모든 작업을 취소하고 트랜잭션 작업 전인 데이터베이스 초기 상태로 돌아가게 됩니다.
 

트랜잭션의 특징

트랜잭션에는 4가지 특성이 있으며 각 특성의 앞글자를 따서 ACID라고 칭하며 아래와 같이 정리할 수 있습니다.

 
1. Atomicity (원자성)

내가 동생한테 10000원을 보낸다고 가정하자

내 통장 잔액  -10000원
동생 통방 잔액 +10000원
이 둘중에 하나만 처리된다면 원자성(Atomicity) 위반이다.


2. Consistency (일관성)

기존의 데이터베이스가 Correct State라면 트랜잭션을 수행하고 난 후에도 Correct State여야 한다.

Correct State ?
도메인의 유효범위, 무결성 제약조건 등의 제약조건을 위배하지 않는 정상적인 상태

Example
통장 잔액 : 0보다 커야한다.
은행 : 국민/우리/신한

계좌에 잔액이 없는데 동생 송금이 가능하지 않는것!

(단, 트랜잭션 도중에 위배하더라도 결과가 정상적인 상태면 상관없다.)


3. Isolation (고립성)

한 트랜잭션이 실행하는 동안의 중간결과를 다른 트랜잭션이 접근할 수 없다.


4. Durability (영속성, 지속성)

완료(commit) 된 트랜잭션은 데이터베이스에 영구적으로 보존되어야 한다.
완료 후에 컴퓨터가 꺼진다면 데이터는 이미 저장되었으므로 보존된다.

완료 전에 컴퓨터가 꺼진다면 데이터는 Atomicity 원칙을 따라, 트랜잭션 수행하기 전으로 돌아간다.


트랜잭션의 상태

트랜잭션의 상태에 대해서 알아봅시다

 
활동(Active) : 트랜잭션이 실행 중인 상태입니다.
실패(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태입니다.
철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 롤백 연산을 수행한 상태입니다.
부분 완료(Partially Committed) : 트랜잭션의 마지막 연산까지 실행했지만, 커밋 연산이 실행되기 직전의 상태입니다.
완료(Committed) : 트랜잭션이 성공적으로 종료되어 커밋 연산을 실행한 후의 상태입니다.

'MY SQL' 카테고리의 다른 글

3일차  (0) 2022.02.23
SQL)2일차  (0) 2022.02.21
SQL ) 1일차  (0) 2022.02.20