본문 바로가기
DB

Transaction(트랜잭션)

by 이건 뭐야 2024. 2. 16.

Transaction : 거래, 처리

 

트랜잭션데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위를 뜻한다. 혹은 데이터베이스 시스템에서 복구 및 병행 수행 시 처리되는 작업의 논리적 단위이다.

여기에서 작업의 단위많은 질의어 명령문들을 사람이 정하는 기준에 따라 정해진다.

쉽게 말해 한꺼번에 수행되는 일련의 연산모음이라고 생각하면 된다!

 

데이터베이스 상태 변화란 다음과 같은 질의어(SQL)를 이용하여 데이터베이스에 접근하는 것을 의미한다.

  • SELECT
  • INSERT
  • DELETE
  • UPDATE

 

 

 

간단한 예시

A의 계좌에 50,000원

B의 계좌에 50,000원이 있을 때

 

A가 B에게 10,000원을 계좌이체한다.

하지만 전산상 오류로 인해 A의 소지금은 40,000원으로 줄었으나 B의 소지금은 50,000원 그대로인 경우 인출은 성공했으나 입금은 실패한 것으로 볼 수 있다.

 

Transaction 전

A 계좌 이체 -> A 계좌에서 10,000원 인출 -> B 계좌 10,000원 입금 -> 계좌 이체 성공

 

Transaction 후

A 계좌 이체 -> (A 계좌에서 10,000원 인출 & B 계좌 10,000원 입금) -> 계좌 이체 성공

 

따라서 인출과 입금은 동시에 처리될 수 있도록 묶어줘야 한다. (하나로 묶음으로써 Atomic해졌다!)

이렇게 동시에 묶는 방법이 트랜잭션이다.

 

위의 예시를 통해 데이터베이스와 애플리케이션의 데이터 거래에 있어서 안전성을 확보할 수 있는 장점을 확인할 수 있다!

 

 

 

트랜잭션의 특징

- 원자성(Atomicity)

트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다.

 

- 일관성(Consistency)

트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다.

(트랜잭션이 진행되는 동안 데이터베이스가 변경되어도 업데이트된 데이터베이스가 아닌 처음에 트랜잭션을 진행하기 위해 참조한 데이터베이스로 진행한다.)

 

- 독립성(Isolation)

둘 이상의 트랜잭션이 동시에 실행되고 있을 경우, 어떤 하나의 트랜잭션이라도 다른 트랜잭션의 연산에 끼어들 수 없다.

 

- 지속성(Durability)

트랜잭션이 성공적으로 완료되었을 경우, 결과는 영구적으로 반영되어야 한다.

 

 

 

트랜잭션 상태

- Active(활성) : 트랜잭션이 정상적으로 실행 중인 상태

 

작업 성공 시,

- Partially Committed(부분 완료) : 트랜잭션의 마지막까지 실행되었지만, Commit 연산이 실행되기 직전의 상태

- Committed(완료) : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태

 

작업 실패 시,

- Failed(실패) : 트랜잭션 실행에 오류가 발생하여 중단된 상태

- Aborted(철회) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태

 

 

 

트랜잭션의 연산

Commit

모든 작업들을 정상 처리로 확정하는 명령어로서, 해당 처리 과정을 DB에 영구 저장하겠다는 의미이다.

Commit을 수행하면 하나의 트랜잭션 과정이 종료되며, 이전 데이터가 완전히 반영되어 UPDATE된다.

 

Rollback

작업 중 문제가 발생되어 트랜잭션의 처리 과정에서 발생한 변경사항을 취소하는 명령어이다.

트랜잭션에 해당 명령을 내리면 트랜잭션은 시작되기 이전의 상태로 되돌아간다.

Commit하여 저장한 예전 상태로 복구한다.

 

※주의※

DDL문(CREATE, DROP, ALTER, RENAME, TRUNCATE)은 트랜잭션의 Rollback대상이 아니다.

 

 

 

 

 

참조

트랜잭션이란? - 개발자로 홀로 서기 님

트랜잭션 개념 & 사용 완벽 정리 - 인파 님

 

'DB' 카테고리의 다른 글

MySQL vs PostgreSQL  (0) 2024.03.22
DDL, DML, DCL, TCL  (0) 2024.02.17