Programming

; develop a program

DataBase/DB 지식

[DB 지식] 트랜잭션(Transaction)

Clloud_ 2023. 6. 9. 08:11
반응형

이번 포스팅에서는 컴퓨터 과학 및 데이터베이스 관리 시스템에서 중요한 개념인 트랜잭션(Transaction)에 대하여 공부를 해보고자 한다.

 


트랜잭션이란

트랜잭션이란 데이터베이스 상태를 변경하는 작업 단위를 의미한다.
보통은 데이터베이스 상태를 변경하는 작업을 여러 단계로 나누어서 처리하며, 이러한 단계를 트랜잭션이라고 부른다.

 

예를 들어, 은행 계좌 이체를 예로 들면, 계좌 A에서 일정 금액을 출금하고, 계좌 B로 동일한 금액을 입금하는 두 개의 연산이 포함된 트랜잭션이 될 수 있다.
이러한 연산들은 모두 한꺼번에 실행되거나 아예 실행되지 않아야 한다.

트랜잭션은 데이터의 일관성과 무결성을 보장하기 위해 사용된다.

 

트랜잭션의 상태

트랜잭션은 다양한 상태를 가지며, 각 상태는 트랜잭션의 실행 단계와 관련이 있다.

 

트랜잭션의 상태

  • 활동(Active) 상태
    트랜잭션이 시작되고 아직 실행 중인 상태를 말한다.
    트랜잭션은 Begin 연산으로 시작되고, 아직 Commit 또는 Rollback 연산이 수행되지 않은 경우에는 활동 상태이다.

  • 실패(Failed) 상태
    트랜잭션의 실행 도중 오류가 발생하여 트랜잭션이 중단된 상태를 말한다.
    실패 상태에 도달한 트랜잭션은 더 이상 진행할 수 없으며, 롤백 연산을 통해 이전 상태로 회복해야 한다.

  • 부분 완료(Partially Committed) 상태
    트랜잭션의 모든 연산이 성공적으로 실행되었으며, 커밋 연산을 대기 중인 상태를 말한다.
    부분 완료 상태에서는 트랜잭션의 결과를 아직 영구적으로 저장하지 않았기 때문에 롤백이 가능하다.

  • 완료(Committed) 상태
    트랜잭션의 실행이 성공적으로 완료되고, 커밋 연산이 수행된 상태를 말한다.
    커밋이 수행되면 트랜잭션의 변경 사항이 영구적으로 데이터베이스에 저장되고, 트랜잭션은 종료된다.

  • 중단(Aborted) 상태
    트랜잭션이 롤백 연산을 통해 이전 상태로 되돌려진 상태를 말한다.
    롤백이 수행되면 트랜잭션의 변경 사항은 취소되고, 데이터베이스는 이전 상태로 복원된다.
    중단 상태에서는 트랜잭션을 재시작하거나 버릴 수 있다.
트랜잭션은 위와 같은 상태 변화를 거치며, 각 상태는 트랜잭션의 진행 상황을 나타낸다.
이러한 상태 변화는 데이터베이스 관리 시스템(DBMS)에 의해 자동적으로 처리되거나, 프로그래머가 명시적으로 제어할 수 있다.

 


트랜잭션의 성질

트랜잭션은 보통 4가지 속성을 가지는데, 이를 ACID 속성이라고 부른다.

 

원자성(Atomicity)

  • 트랜잭션은 원자적인 작업 단위로 간주된다. 
  • 즉, 트랜잭션 내의 모든 연산은 전부 성공적으로 완료되거나 전혀 실행되지 않아야 한다. 
  • 중간에 어떤 연산이 실패하면 트랜잭션은 이전 상태로 롤백된다. 
  • 이는 트랜잭션이 부분적으로 실행되거나 중단되어 데이터베이스가 일관성을 잃는 것을 방지한다.

 

일관성(Consistency)

  • 트랜잭션이 실행되기 전과 후에 데이터베이스는 일관된 상태를 유지해야 한다.
  • 트랜잭션은 데이터베이스의 일관성 규칙을 준수해야 한다.
  • 예를 들어, 정해진 규칙에 따라 데이터의 유효성이나 무결성을 검증하고 유지해야 한다.
  • 트랜잭션은 일관성을 유지하고 데이터베이스에 올바른 상태를 유지하는 데 중점을 둔다.

 

격리성(Isolation)

  • 트랜잭션은 다른 트랜잭션으로부터 격리되어야 한다.
  • 즉, 동시에 여러 트랜잭션이 실행되는 경우에도 각각의 트랜잭션은 다른 트랜잭션에 영향을 주지 않고 독립적으로 실행되는 것처럼 보여야 한다.
  • 격리성은 동시성 제어를 통해 보장되며, 트랜잭션은 다른 트랜잭션의 변경 사항을 볼 수 없으며, 다른 트랜잭션도 현재 실행 중인 트랜잭션의 변경 사항을 볼 수 없다.

 

지속성(Durability)

  • 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 유지되어야 한다.
  • 시스템 장애나 전원 손실과 같은 예기치 않은 상황이 발생하더라도 트랜잭션의 결과는 지속되어야 한다.
  • 성공적으로 커밋된 트랜잭션은 디스크에 영구적으로 저장되며, 데이터베이스 시스템은 장애 발생 시 이러한 영구 저장소에서 데이터를 복구하여 지속성을 보장한다.

 


트랜잭션의 Commit과 Rollback

트랜잭션의 Commit과 Rollback은 트랜잭션의 성공 또는 실패에 따라 수행되는 연산이다.

 

Commit(커밋)

  • Commit은 트랜잭션의 성공적인 완료를 의미한다.
  • Commit 연산은 트랜잭션의 모든 연산이 성공적으로 실행되고 데이터 일관성이 유지되었을 때 수행된다.
  • 트랜잭션을 성공적으로 완료하고 변경된 데이터를 영구적으로 저장하는 연산이다.
  • 커밋이 수행되면, 데이터베이스는 트랜잭션의 결과를 지속적으로 유지하고 다른 트랜잭션에게도 반영된다.

 

Rollback(롤백)

  • Rollback은 트랜잭션의 실패 또는 중단을 의미한다.
  • Rollback 연산은 트랜잭션 내에서 오류가 발생하거나 일관성이 깨진 경우 수행된다.
  • 롤백은 트랜잭션 이전 상태로 되돌리는 작업을 의미하며, 변경된 데이터를 취소하여 데이터베이스를 이전의 일관된 상태로 복원한다.
  • 롤백이 수행되면, 이전의 모든 연산은 취소되고 데이터베이스는 트랜잭션 이전 상태로 회복된다.
  • 트랜잭션 내의 어떤 연산이 실패하거나, 일관성이 깨진 경우에는 롤백이 수행된다.

 

트랜잭션의 Commit과 Rollback은 ACID 원칙을 준수하기 위해 중요한 역할을 한다.
Commit은 트랜잭션이 성공적으로 완료되었으며, 변경된 데이터를 영구적으로 저장하는 것을 보장한다.
반면에 Rollback은 트랜잭션의 실패나 예외 상황에 대비하여 트랜잭션을 취소하고 이전 상태로 복원하여 데이터 일관성을 유지한다.

 


반응형

'DataBase > DB 지식' 카테고리의 다른 글

[DB 지식] 레디스(Redis)  (0) 2023.07.01
[DB 지식] 저장 프로시저(Stored PROCEDURE)  (0) 2023.06.25