본문 바로가기
ORACLE/DB

[Oracle] Transaction 왜 사용하는 걸까요? :: 마이자몽

by 마이자몽 🌻♚ 2020. 3. 25.

은행 송금처리

A계좌에서 B계좌로 $5,000를 정상적으로 송금하는데 처리되는 과정입니다.  A계좌에서 B계좌로 송금 요청을 하면

1. A계좌에서 $5,000를 출금합니다.

2. B계좌에 $5,000를 입급합니다.

그럼 결과로 A계좌에는 $5,000 B계좌에는 $10,000가 되어야합니다.

 

 

 

위 이미지는 송금 처리 과정에서 오류가 발생한 경우 입니다.

1. A계좌에서 $5,000를 출급합니다.

2. 에러 발생

송금처리 과정에서 오류가 발생하여 A계좌에서 $5,000를 출금하고 B계좌로는 돈이 입금되지 않아 $5,000가 사라집니다.

 

실제 은행에서 위와 같은 문제가 발생한다면 여러 방면으로 엄청난 피해가 발생할 것 입니다. 예상하지 못한 상황에서 오류가 발생하여 하여 데이터의 부정합이 발생하는 경우, 다시 원상복귀 해야합니다. 이러한 상황을 대비하기 위해 Transacation을 사용합나다.

 

 

Transaction 이란?

Transaction은 업무의 논리적인 단위입니다. 여러개의 작업을 하나의 논리적 단위로 묶어 반영과 원상복귀를 조정할 수 있기 위해 사용됩니다. 위 은행 송금예시에서는 A계좌에서 $5,000를 출금하고 B계좌로 $5,000를 입금하는 것을 하나의 논리적 단위! 송금에 대한 하나의 단위로 묶어 작업을 처리하는 것 입니다.

 

비정상 처리되어 데이터의 부정합이 발생했을 때는 원상 복귀하고, 정상적으로 프로그램이 진행되었다면 데이터에 최종적으로 적용합니다. Transaction을 사용하면 데이터의 부정합을 방지할 수 있습니다.

 

 

Commit & Rollback

출처 : https://kdata.or.kr

하나의 Transaction의 처리과정 입니다.

 Transaction의 처리가 이상없이 완료되면 영구적인 반영을 위해 COMMIT작업을 진행합니다.

Transaction의 처리과정에서 오류가 발생하면 Aborted 상태로 Transaction의 시작 전 상태로 ROLLBACK 작업을 합니다.

 

 

Transaction의 특징 ACID

원자성(ATOMICITY)

ALL OR NOTHING을 보장합니다. 부분적으로 실행되는것 없이, 모두 성공적으로 실행되거나, 전혀 실행되지 않은 채로 남아 있는 특징을 말합니다. 위의 은행 송금 처리예시에서 Transaction의 원자성을 확인할 수 있습니다.

 

일관성(CONSISTENCY)

성공적으로 Transaction이 완료되면 일관적인 DB 상태를 유지합니다.

즉, SELECT 하는 시점에서 DB에 변경이 확정된 데이터만 읽어 항상 일관적인 데이터를 조회합니다. 일관성에 대한 내용은 읽기 일관성과 관련되어 있습니다.

 

격리성(ISOLATION)

Transaction 수행시 다른 Transaction의 작업이 끼어들지 못하도록 보장하는 특징이 있습니다. 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안됩니다.

 

지속성(DURABILITY)

성공적으로 수행된 Transaction은 Database에 영구적으로 반영됩니다.

 

 

Transaction의 시작과 끝

지금까지 Transaaction에 대해서 알아봤습니다. 그렇다면 Transaction의 시작과 끝은 언제 일까요?

 

Transaction의 시작

Transaction의 시작은 이전 Transaction이 끝나고 첫번째 실행 가능한 문장(DML SQL 문)이 시작입니다.

즉, COMMIT이 완료되고 다음으로 오는 DML 명령문입니다. DDL과 DCL 명령은 명령이 하나의 TRANSACTION으로 DML과 달리 실행이 성공적으로 완료되면 바로 COMMIT 됩니다.

 

Transaction의 끝

Transaction의 끝은 상황에 따라 4가지로 구분됩니다.

 

1. Transaction COMMIT 또는 ROLLBACK문을 실행한 경우

여러 쿼리를 실행하다 COMMIT 또는 ROLLBACK문을 실행하면 Transaction을 종료합니다.

 

2. DDL 또는 DCL문 실행

DML 명령을 사용하다가 중간에 DDL이나 DCL명령을 사용하게 되면 암시적 COMMIT을 진행합니다. DDL과 DCL 명령은 명령이 하나의 Transaction이라고 했습니다. DDL이나 DCL 명령을 실행하기 위해 암시적으로 이전 Transaction을 COMMIT하게 됩니다.

 

3. SQL DEVELOPER, SQL PLUS 종료

사용하는 DBMS를 종료하게 되면 COMMIT 또는 ROLLBACK이 필요하면 적용 여부를 묻습니다.

 

4. 시스템 중단

비정상적인 방법으로 시스템이 중단되면 Transaction은 ROLLBACK하고 종료됩니다.

 

태그

댓글0