DATABASE

[DATABASE] 트랜잭션이란?

Sunwoo_bang 2021. 1. 21. 10:57

[트랜잭션]

데이터베이스의 *상태를 변화시키기 위해서 수행하는 작업의 단위. 또는 일련의 연산.

    *데이터베이스의 상태변화: SELECT, INSERT, DELETE, UPDATE


   즉 트랜잭션은 데이터베이스 작업의 완전성을 보장해주는 것이라고 할 수 있어.

각 상태에 대한 설명은 접은 글에 적어놨으니 참고하시길.

더보기

활동(Active) 
- 트랜잭션의 활동상태.
- 트랜잭션이 실행중이며 동작중인 상태.

실패(Failed) 
- 트랜잭션 실패상태
- 더이상 정상적으로 진행 할 수 없는 상태.

부분적 완료(Partially Committed)
- 트랜잭션의 Commit 명령이 도착한 상태
- commit 이전 sql문이 실행되고 commit만 남은 상태.

완료(Committed)
- 트랜잭션 완료상태
- 트랜잭션이 정상적으로 완료된 상태.

철회 (Aborted)
- 트랜잭션이 취소상태
- 트랜잭션이 취소되고 트랜잭션 실행 이전 데이터로 돌아간 상태.

 

 

[트랜잭션의 성질]

 하나의 트랜잭션은 COMMIT되거나 ROLLBACK된다.

 트랜잭션의 연산은 Yes or No 야. 되면 되는거고, 조금이라도 문제가 있으면 안되는 거지.
정상적으로 완료된 것을 COMMIT이라고 하고,
문제가 생겨서 연산을 전부 취소해버린 것을 ROLLBACK이라고 해.

 

COMMIT 연산

 연산이 성공적으로 마치고 일관된 데이터베이스 상태일 때 트랜잭션 관리자에게 연산 완료를 고지해.
커밋(commit) 연산은 모든 작업들을 정상적으로 처리하겠다고 확정하는 명령어로서, 
처리과정을 데이터베이스에 영구적으로 저장하는 것이지. 커밋을 수행하면 이전 데이터가 완전히 업데이트되고 트랜잭션 과정을 종료하게 돼.

 

ROLLBACK 연산

ROLLBACK은 작업 중 문제가 발생되어 트랜잭션의 처리과정에서 발생한 변경사항을 취소하는 명령어야.
마지막 COMMIT을 완료한 시점으로 다시 돌아가지.
따라서 COMMIT하여 저장한 것만 복구한다고 볼 수 있어.

 

[트랜잭션의 특징]

ACID. 자 따라해보자. ACID. 원자성, 일관성, 독립성, 영구성의 줄임말이야.
ACID는 트랜잭션의 네 가지 특징이야.


A 원자성 (Atomicity)

 트랜잭션의 작업은 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않거나 둘 중 하나야.
 수행하고 있는 트랜잭션에서 오류가 발생하면 현재 내역을 날려버리고 **임시영역에 저장했던 상태로 ROLLBACK을 하게 돼.
     **임시영역: 롤백 세그먼트(ROLLBACK SEGMENT) 이전 데이들이 임시 저장되는 곳.

 

 SAVEPOINT
  ROLLBACK을 하면 현재 진행 내역을 전부다 취소하지만, SAVEPOINT를 이용하면 부분적 취소가 가능해. 

 

  SAVEPOINT 세이브포인트이름;
  ROLLBACK TO 세이브포인트이름; 

 

이렇게 하면 지정한 SAVEPOINT 까지만 ROLLBACK 할 수 있어!

C 일관성 (Consistency)

 트랜잭션의 작업처리 결과는 항상 일관된 데이터베이스 상태로 변환이 되어야 해. 
tb_fruit과 tb_apple 테이블이 있고, tb_apple이 apple_name 이라는 값을 외래키로 갖는 상황에서
tb_fruit에서 apple_name의 제약조건이 달라진다면, tb_apple에서도 달라져야한다고 생각하면 이해가 좀 쉬울거야.

독립성 (Isolation)

 트랜잭션이 하고 있는 연산에 다른 트랙잭션의 연산이 끼어들 수 없게 보장해야 해. 
여러 트랜잭션들이 연산될 때, 공통적인 데이터를 조작하게 되는데, 이런 경우에 데이터가 혼란스러워 질 수 있기 때문이지. 데이터가 혼란스러워진다라- 이게 어떤 경우인지 좀 살펴보자.

  1) 오손데이터 읽기

 스케줄표를 보면 T1에서 업데이트를 했고, T2에서는 그 데이터를 읽어들이고 있지? 

T2가 SELECT를 완전히 COMMIT하기 전에 T1에서 ROLLBACK을 해버리면 T2는 완료되지 않은 트랜잭션이 갱신한 데이터, 즉 틀린 데이터를 읽게 돼.

 

  2) 반복할 수 없는 읽기

위 스케줄표같은 경우는 T2가 동일한 읽기 연산을 여러 번 수행할 때 매번 서로 다른 값을 보게 될 수 있어.

 

  3) 팬텀문제

한 트랜잭션 T1에 속한 첫 번째 SELECT문과 두 번째 SELECT문의 수행 결과가 다르게 나타나는 현상.

 


 따라서, 데이터를 읽거나 쓸 때 해당 데이터에 LOCK을 걸어서 다른 트랜잭션이 접근하지 못하게 한 후 연산이 끝나면 UNLOCK을 해주는 식으로 독립성을 보장해줘.

 이때 LOCK을 걸고 해제하는 순서때문에 교착상태(dead lock)가 발생할 수 도 있어.

 

 1) 교착상태

  데드록은 두 개 이상의 트랜잭션들이 서로 상대방이 보유하고 있는 로크를 요청하면서 기다리고 있는 상태를 이야기해. 단어 그대로, 트랜잭션이 교착되어 있는 상태를 이르는 말이지.
 

D 영구성 (Durability)

 트랜잭션 연산의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 해.

시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미하지. 
전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있어.

 

 

 


참고

1. victorydntmd.tistory.com/129

2. mungto.tistory.com/303

3. wiki.hash.kr/index.php/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98#.EC.9D.BC.EA.B4.80.EC.84.B1

 

그 외 20여개 블로그 및 사이트 정독