본문 바로가기
👩‍💻TIL/DB

[DB]트랜잭션(Transaction)이란?/트랜잭션의 개념,특징, 연산과정/savepoint

by devuna 2020. 2. 16.
728x90

트랜잭션(Transaction)이란?/트랜잭션의 개념,특징/UNDO 복구와 REDO복구

출처 economictimes

💡 트랜잭션(Transaction)이란?

컴퓨터 과학분야에 트랜잭션은 "쪼개질 수 없는 업무처리의 단위"를 의미합니다. 

 

ATM으로 계좌이체를 한다고 생각해보면,

1. A 은행에서 출금하여 B은행으로 송금하려고 합니다.

2. 송금 중, 알 수 없는 오류가 발생하여 A은행 계좌에서 돈은 빠져 나갔지만 B은행의 계좌에 입금되지 않았습니다.

3. 이와 같은 상황을 막기위해 거래가 성공적으로 모두 끝나야 이를 완전한 거래로 승인하고, 거래 도중 뭔가 오류가 발생했을 때는 이 거래를 처음부터 없었던 거래로 완전히 되돌리는 것입니다.

 

이렇게 거래의 안전성을 확보하는 방법이 트랜잭션입니다. 데이터베이스에선 테이블에서 데이터를 읽어 온 후 다른 테이블에 데이터를 입력하거나 갱신, 삭제하는데 처리 도중 오류가 발생하면 모든 작업을 원상태로 되돌립니다. 데이터베이스에선 처리 과정이 모두 성공했을 때만 최종적으로 데이터베이스에 반영합니다. 

 

내 계좌의 잔액에서 이체한 금액만큼 빼는 일과, 상대 계좌의 잔액에서 해당 금액만큼 더하는 일은 쪼개어져서는 안됩니다. 두가지 명령 중 하나만 실행되서는 안되며 하나의 업무로 함께 진행되어야 하는 일이기때문입니다.

즉, 더이상 쪼갤 수 없기 때문에 일부만 동작해선 안된다는 것이 트랜잭션의 핵심입니다.

 

부분 작업들 여러개가 모여진 이러한 트랜잭션을 처리하기 위해 데이터베이스는 다음의 두가지 명령어를 활용하는데,

바로 커밋과 롤백입니다. 

 

- 커밋(Commit): 모든 부분작업이 정상적으로 완료하면 이 변경사항을 한꺼번에 DB에 반영합니다.

- 롤백(Rollback): 부분 작업이 실패하면 트랜잭션 실행 전으로 되돌립니다.

      하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스 일관성을 깨뜨렸을 때 트랜잭션의 일부가 정상적으로

      처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소하는 연산입니다.

 

이때, 모든 연산을 취소하지 않고 정해진 부분까지만 되돌리고 싶을 때 사용하는 것이 savepoint입니다.

 

- SAVEPOINT

  • 일반적으로 ROLLBACK을 명시하면 INSERT, DELETE, UPDATE 등의 작업 전체가 취소되지만, 
  • SAVEPOINT를 사용하면 전체가 아닌 특정 부분에서 트랜잭션을 취소시킬 수 있습니다.
  • 취소하려는 지점을 SAVEPOINT로 명시한뒤 ROLLBACK TO 세이브포인트이름;을 실행하면 지정한 해당 SAVEPOINT 지점까지 처리한 작업이 ROLLBACK됩니다.

- SAVEPOINT를 지정하는 방법 

SAVEPOINT 세이브포인트이름;

 

- ROLLBACK 형태 :

ROLLBACK TO 세이브포인트이름;

💡 트랜잭션(Transaction)의 개념과 연산과정

  • 데이터베이스 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위
  • 데이터베이스 시스템에서 복구 및 병행 수행 시 처리되는 작업의 논리적 단위
  • 한꺼번에 수행되어야 할 일련의 연산
활성(Active) : 트랜잭션이 정상적으로 실행중인 상태
실패(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태
철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태
부분 완료(Partially Committed) : 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태
완료(Committed) : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태

💡 트랜잭션(Transaction)의 특징 

ACID(Atomicity, Consistency, Isolation, Durability)는 데이터베이스 트랜젝션이 안전하게 수행된다는 것을 보장하기 위한 트랜잭션의 특징을 말합니다. (줄여서 ACID라고도 합니다.)

  • 원자성(Atomicity) : 트랜잭션이 DB에 모두 반영되거나, 혹은 전혀 반영되지 않아야 한다.
  • 일관성(Consistency) : 트랜잭션의 작업 처리 결과는 항상 일관성이 있어야 한다.
  • 독립성(Isolation) : 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다.
  • 영속성(Durability) : 트랜잭션이 성공적으로 완료 되었으면 결과는 영구적으로 반영되어야 한다.
728x90

댓글