Posts [DB 데이터베이스] 트랜잭션 (Transaction)
Post
Cancel

[DB 데이터베이스] 트랜잭션 (Transaction)


Contents



트랜잭션(Transaction)이란?


트랜잭션이란 데이터베이스의 상태를 변화시키는 한 개의 논리적 작업 단위를 의미합니다.

SQL을 이용하여 데이터베이스에 접근하는 것을 말하는데, 이 때 논리적 작업 단위는 SQL 한 문장을 의미하는 것은 아닙니다.


“포스트를 작성하여 블로그에 올리기” 를 하나의 작업 단위로 보자.

이는 Insert 문으로 데이터를 넣고, Select 문으로 데이터를 불러와 블로그 최신상태를 유지한다.

따라서 두 가지를 합한 작업 단위를 하나의 트랜잭션이라고 볼 수 있다.



트랜잭션의 성질


1. 원자성 (Atomicity)

한 개의 트랜잭션 연산은 데이터베이스에 모두 반영되거나, 아무것도 반영되지 않아야 합니다.

All or Nothing

즉, 트랜잭션 내에서 한개의 연산이라도 오류가 발생한다면, 해당 트랜잭션은 모두 취소되어야 합니다.


2. 일관성 (Consistency)

트랜잭션이 수행되기 전에 데이터베이스가 일관된 상태였다면, 트랜잭션 실행 후의 데이터베이스도 일관된 상태를 가져야 합니다.


3. 독립성 (Isolation)

한 개의 트랜잭션이 실행되는 동안 다른 트랜잭션은 해당 연산에 접근할 수 없습니다.

즉, 수행 중인 트랜잭션이 완료될 때까지, 다른 트랜잭션에서 해당 결과를 참조 할 수 없습니다.

여러 트랜잭션이 동시에 처리 될 때, 최종 결과는 임의의 순서대로 트랜잭션들이 수행된 결과와 같아야 합니다.


4. 지속성 (Durability)

트랜잭션이 성공적으로 완료되었다면, 그 결과는 영구적으로 반영되어야 합니다.

시스템에 장애가 발생하더도 해당 결과는 손실되지 않아야 합니다.



트랜잭션의 연산


Commit

하나의 트랜잭션이 성공적으로 끝나 데이터베이스가 일관된 상태에 있을 때, 관리자에게 작업이 완료되었음을 알려주는 연산입니다.


Rollback

트랜잭션이 부분적으로 완료된 경우, 원자성을 보장하기 위해 해당 트랜잭션이 수행한 모든 연산을 취소하는 연산입니다.

트랜잭션 처리가 비정상적으로 종료되어도 그 연산을 취소하고 이전 상태로 돌아갑니다.



트랜잭션의 상태


트랜잭션의 상태는 5가지이며 처리 과정은 아래와 같습니다.

Transaction_State

Active (활동)

현재 트랜잭션이 수행 중인 상태


Failed (실패)

실행 중 오류가 발생해서 중단된 상태


Aborted (철회)

트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태


Partially Committed (부분 완료)

트랜잭션 연산이 성공적으로 끝났지만, Commit 연산이 실행되기 전 상태


Committed (완료)

트랜잭션이 성공적으로 종료되어 Commit 연산을 수행한 상태


This post is licensed under CC BY 4.0 by the author.