슬기로운 개발생활

[DataBase] 트랜잭션(Transaction)이란?

by coco3o
반응형

트랜잭션의 정의

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

이러한 관점에서 데이터베이스 응용 프로그램은 트랜잭션의 집합으로 정의 할 수 있습니다.


트랜잭션의 필요성

트랜잭션은 작업의 완전성을 보장해주는 것입니다.

논리적인 작업들을 모두 완벽하게 처리하거나 또는 처리하지 못할 경우 이전 상태로 복구하여

작업의 일부만 적용되는 현상이 발생하지 않게 만들어 주는 기능입니다.


계좌이체를 예를 들어 보겠습니다.

많은 사람들은 ATM기계에서 카드를 이용해 계좌이체를 한 경험이 있을 것입니다.

이 때 ATM기계를 작동하는 도중에 기계오류나 정전 등과 같은 예기치 못한 상황이 발생하여

카드가 나오지 않거나 기계가 멈추는 경우가 있습니다.

이 때 가장 우려되는 것은 내 계좌에선 금액이 빠져나간 것으로 기록되고

정작 상대방 계좌에는 이체가 되지 않는 상황입니다.

트랜잭션이란 바로 이러한 문제가 발생되지 않도록 하는 강력한 수단을 제공해주는 것입니다.

즉, 내 계좌에서 금액이 빠져나가기 전 상태로 돌아가던지,
아니면 상대방 계좌에 이체가 성공적으로 끝나도록 보장해줘야 합니다.


트랜잭션의 특징

1. 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 처리 시 처리되는 작업의 논리적 단위이다.

2. 사용자가 시스템에 대한 서비스 요구시 시스템이 응답하기 위한 상태 변환 과정의 작업단위이다.

3. 하나의 트랜잭션은 Commit 되거나 Rollback 된다.


트랜잭션의 성질

트랜잭션이 성공적으로 처리되어 데이터베이스의 무결성과 일관성을 보장하려면 아래의 네 가지 특성을 만족해야 합니다.

트랜잭션의 네 가지 특성을 영어 단어들의 첫자를 따서 ACID 특성이라고 합니다.

원자성(Atomicity)
1. 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.
2. 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 하나라도 오류가 발생하면 트랜잭션 전부 취소 되어야 한다.

일관성(Consistency)
1. 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태를 유지해야 한다.
2. 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.

독립성,격리성(Isolation)
1. 둘 이상의 트랜잭션이 동시에 실행될 경우 어떤 하나의 트랜잭션이 다른 트랜잭션의 연산에 끼어들 수 없다.
2. 수행중인 트랜잭션이 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.

영속성,지속성(Durablility)
1. 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.


트랜잭션의 연산 및 상태

Commit 연산
- Commit 연산은 한 개의 논리적 단위(트랜잭션)에 대한 작업이 성공적으로 끝났고 데이터베이스가 일관된 상태에 있을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산이다.

Rollback 연산
- 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때,
이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소한다.


트랜잭션의 상태

출처 :https://junghn.tistory.com/entry/DataBase%EA%B8%B0%EC%B4%88-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-Transaction

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

블로그의 정보

슬기로운 개발생활

coco3o

활동하기