Skip to content

Latest commit

 

History

History
111 lines (61 loc) · 6.04 KB

Transaction.md

File metadata and controls

111 lines (61 loc) · 6.04 KB

트랜잭션(Transaction)

💡트랜잭션(Transaction)이란?

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

트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다.

트랜잭션의 특징

  1. 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위이다.
  2. 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위이다.
  3. 하나의 트랜잭션은 Commit되거나 Rollback된다.

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

  1. A 은행에서 출금하여 B은행으로 송금하려고 합니다.
  2. 송금 중, 알 수 없는 오류가 발생하여 A은행 계좌에서 돈은 빠져 나갔지만 B은행의 계좌에 입금되지 않았습니다.
  3. 이와 같은 상황을 막기위해 거래가 성공적으로 모두 끝나야 이를 완전한 거래로 승인하고, 거래 도중 뭔가 오류가 발생했을 때는 이 거래를 처음부터 없었던 거래로 완전히 되돌리는 것입니다.

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

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

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

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

바로 커밋과 롤백입니다.

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

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

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

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

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

- SAVEPOINT

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

- SAVEPOINT를 지정하는 방법

SAVEPOINT 세이브포인트이름;

- ROLLBACK 형태 :

ROLLBACK TO 세이브포인트이름;

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

  • 데이터베이스 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위
  • 데이터베이스 시스템에서 복구 및 병행 수행 시 처리되는 작업의 논리적 단위
  • 한꺼번에 수행되어야 할 일련의 연산

img

활성(Active) : 트랜잭션이 정상적으로 실행중인 상태 실패(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태 철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태 부분 완료(Partially Committed) : 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태 완료(Committed) : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태

💡 트랜잭션(Transaction)의 성질

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

  • Atomicity(원자성)
  1. 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.
  2. 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.
  • Consistency(일관성)
  1. 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.
  2. 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.
  • Isolation(독립성,격리성)
  1. 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없다.
  2. 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.
  • Durablility(영속성,지속성)
  1. 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.

참고

https://devuna.tistory.com/30

https://victorydntmd.tistory.com/129 - ACID 자세히

https://limkydev.tistory.com/100