데이터베이스

13. 트랜잭션(Transaction)

코카(Coca) 2018. 4. 8. 13:11

트랜잭션(Transaction)

1) 트랜잭션의 정의

 트랜잭션이란 데이터베이스 내에서 한꺼번에 모두 수행해야 할 연산들의 집합으로, 하나의 작업 처리를 위한 논리적인 단위를 뜻합니다. 이는 동시성제어(Concurrency Control)의 기본 단위기도 합니다. 트랜잭션 내의 연산은 모두 한꺼번에 완료되어야 하며, 일련의 연산을 실행하는 도중 오류가 생긴다면 모든 작업을 취소해야 합니다. 트랜잭션이 성공적으로 종류되었을 경우에는 그 결과를 데이터베이스에 영구적으로 반영하기 위해 COMMIT 명령어를 사용하고. 도중 오류가 발생했을 경우에는 수행 작업을 취소하고 이전 상태로 되돌리기 위해 ROLLBACK 명령어를 사용합니다.

 [예시] 은행에서 계좌에 입금을 하는 경우 <계좌번호 입력> → <계좌번호 정보 불러오기> → <입금할 금액 입력> → <승인> → <계좌의 잔액에 입금된 금액을 추가> 이라는 일련의 작업이 하나의 트랜잭션이 될 수 있습니다. 이 작업들이 마지막까지 성공하여  COMMIT명령어가 실행되면 영구적으로 반영되지만, 도중에 오류가 생긴다면 ROLLBACK명령을 통해 모든 작업을 취소해야 합니다.

 


2) 트랜잭션의 특성

 

 

 이 트랜잭션에는 ACID로 요약되는 4가지 중요한 특성이 있습니다.

원자성(Atomicity): 트랜잭션의 가장 중요한 특성으로, 트랜잭션 내의 연산은 반드시 모두 반영되거나 아니면 전혀 반영되지 않아야 한다는 것을 뜻합니다. 즉, 부분 실행이 허용되지 않습니다.

일관성(Consistency): 트랜잭션이 실행을 성공적으로 완료했다면, 언제나 일관성 있는 데이터베이스 상태를 유지해야하며 결과에 모순이 없어야합니다.

- 독립성(Isolation): 격리성이라고도 부르며, 하나의 트랜잭션이 수행되고 있을때 다른 트랜잭션이 접근할 수 없는 성질입니다. 즉 각각의 트랜잭션은 독립적이여야 합니다.

- 지속성(Durability): 영속성이라고도 부르며, 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 반영되어야 합니다.

 


3) 트랜잭션의 상태도

 

트랜잭션이 수행되는 과정에는 활동, 부분완료, 완료, 실패, 철회 5가지의 상태가 있습니다. 아래는 그 상태들의 변화를 그린 상태도입니다.

 

 

 

 

 

- 활동(active): 트랜잭션이 현재 실행중인 상태

- 부분 완료(partially committed): 실행을 마치고선 데이터베이스에 결과를 저장하기 직전의 상태

- 완료(committed): 트랜잭션의 변경 내용을 성공적으로 저장한 상태

- 실패(failed): 트랜잭션 실행 중 오류가 난 상태

- 철회(aborted): ROLLBACK명령어를 통해 트랜잭션의 수행 이전상태로 돌린 상태

 


4) 트랜잭션 스케쥴

 여러 트랜잭션들이 동시에 실행되는 경우 스케쥴링을 통하여 트랜잭션의 연산들이 실행되는 순서를 정합니다. 이런 스케쥴 기법에는 직렬 스케쥴(Serial Schedule)비직렬 스케쥴(Nonserial Schedule)이 있습니다.

- 직렬 스케쥴(Serial Schedule): 각 트랜잭셜 별로 구분하여 한 트랜잭션을 구상하는 일련의 연산들이 모두 실행된다면, 다른 트랜잭션을 실행하는 방법입니다.

- 비직렬 스케쥴(Nonserial Schedule): 인터리브(Interleave) 실행기법을 통하여 각 트랜잭션의 연산들이 번갈아가며 병행 실행히는 방법입니다.

직렬 가능 스케쥴(Serializable Schedule): 직렬 스케쥴을 이용한 결과와 비직렬 스케쥴을 이용한 결과가 동일하게 나오는 경우를 말합니다.