영호

[DB] 트랜잭션이란? 본문

DB

[DB] 트랜잭션이란?

0h0 2022. 5. 9. 20:57

트랜잭션(transaction)이란 무엇인가?

  • 트랜잭션이란 데이터베이스의 상태를 변경하기 위한 작업 단위를 의미한다.
    • 데이터베이스의 상태 변경은 (Insert, Delete, Update)
  • 여기서 작업 단위에 대한 간단한 예시를 들어보자면,
    A가 B에서 만원을 송금하려고 한다. 그렇다면 해당 과정은 정말 간단하게 2가지로 나눠볼 수 있다.

A의 계좌에서 만원을 출금된다.
B의 계좌로 A계좌에서 출금된 만원이 입금된다.

  • 만약 1번과 2번 사이에서 에러가 발생된다면? A의 계좌에서 빠져나갔지만, 출금된 만원이 B의 계좌에는 입금되지 않고 서비스가 중지될 것이다.
    • 이렇게 되면 A만 만원을 잃게 된다.
  • 이러한 상황을 방지하기 위해 1,2번의 SQL문이 데이터베이스의 상태를 변경할 수 있는 하나의 트랜잭션(작업 단위)인 것이다.

트랜잭션의 성질(ACID)

원자성 (Atomicity)

  • 모든 연산들이 완전하게 실행되거나 그렇지 않으면 아무 연산도 실행하지 않는 성질이다. all or nothing

일관성 (Consistency)

  • 성공적인 트랜잭션이 완료되어도 데이터베이스의 상태는 일관성 있게 유지되어야 하는 성질이다. 타입이 int인 column에 string이 들어가면 안 된다.

독립성 (Isolation)

  • 연산이 수행되고 있는 트랜잭션의 연산에 다른 트랜잭션이 간섭할 수 없는 성질이다.

지속성 (Durability)

  • 트랜잭션이 성공적으로 완료된 경우, 해당 결과는 영구적으로 보존되는 성질이다.

TCL(Transaction control language) - 트랜잭션 제어 언어

commit

  • 하나의 트랜잭션이 정상적으로 완료되어서 해당 결과를 데이터베이스에 반영시켜 주는 연산. commit명령어를 통해 트랜잭션을 완료한다.
  • commit 전에는 메모리 버퍼에만 영향이 있기 때문에 복구가 가능하다.

rollback

  • 트랜잭션이 정상적으로 완료되지 못해서 해당 트랜잭션이 수행되기 전의 상태로 돌려놓는 연산.

savepoint

  • rollback을 할 때 savepoint로 지정해둔 부분이 있다면 트랜잭션이 완전 rollback 되는 것이 아닌 savepoint지점으로 돌아갈 수 있다.
  • 보스를 깨는 게임에서 중간까지 과정을 저장해두는 느낌.

 

트랜잭션의 상태

트랜잭션-상태-구성도
트랜잭션 상태 구성도

Active

  • 트랜잭션이 현재 실행 중인 상태이다.

Failed

  • 트랜잭션이 실행되다가 에러가 발생해 실패한 상태이다.

Aborted

  • 트랜잭션이 실패해 Rollback을 실행한 상태이다.

Partially Committed

  • 트랜잭션이 끝까지 실행됐지만, 아직 Commit은 안된 상태이다.

Committed

  • 트랜잭션이 성공해 Commit까지 진행된 상태이다.

'DB' 카테고리의 다른 글

분산 환경에서 로컬 캐시의 정합성을 어떻게 보장할까  (0) 2024.08.25
Comments