트랜잭션 - 1

초보개발·2022년 3월 25일
0

Database

목록 보기
6/10

트랜잭션

데이터베이스는 다수의 사용자가 동시에 사용하더라도 항상 모순이 없도록 정확한 데이터를 유지해야 하며, 데이터베이스에 장애가 발생하더라도 빠르게 원상 복구할 수 있어야 한다.
데이터베이스는 정확하고 일관성 있는 상태를 유지할 수 있도록 하기 위해 데이터베이스는 트랜잭션이라는 기능을 제공한다.

트랜잭션의 개념

🌟트랜잭션은 작업 하나를 수행하는 데 필요한 데이터베이스의 연산들을 모아놓은 것이다. 데이터베이스에서 논리적 작업의 단위나 장애가 발생했을 시 데이터를 복구하는 작업의 단위도 된다.

트랜잭션의 모든 명령문이 완벽히 처리되거나 하나도 처리되지 않아야 데이터베이스가 모순이 없는 일관된 상태를 유지할 수 있다. 일반적으로 데이터베이스를 변경하는 INSERT, DELETE, UPDATE 문의 실행을 트랜잭션으로 관리한다.

🌟ACID

1. 원자성(Atomicity)

원자성은 트랜잭션을 구성하는 연산들이 모두 정상적으로 실행되거나 하나도 실행되지 않아야 한다는 all or nothing 방식을 뜻한다.
트랜잭션을 수행하다 장애가 발생해 작업을 마무리하지 못했을 때, 지금까지 수행한 모든 연산을 취소하고 데이터베이스를 트랜잭션 작업 실행 전 상태로 되돌린다.

2. 일관성(Consistency)

일관성은 트랜잭션이 성공적으로 수행된 후에도 데이터베이스가 일관된 상태를 유지해야 함을 말한다.
트랜잭션이 수행되기 전에 데이터베이스가 일관된 상태였다면 트랜잭션의 수행이 완료된 후 결과를 반영한 데이터베이스도 또 다른 일관된 상태가 되어야한다는 의미이다.

3. 고립성(Isolation)

고립성은 현재 수행 중인 트랜잭션이 완료될 때까지 트랜잭션이 생성한 중간 연산 결과에 다른 트랜잭션들이 접근할 수 없음을 말한다.
여러 트랜잭션이 동시에 수행되지만 각 트랜잭션이 독립적으로 수행될 수 있도록 다른 트랜잭션의 중간 연산 결과에 서로 접근하지 못하도록 막는다.

4. 지속성, 영속성(Durability)

지속성은 트랜잭션이 성공적으로 완료된 후 데이터베이스에 반영한 수행 결과는 어떠한 경우에도 손실되지 않고 영구적이여야 한다.
시스템에 장애가 발생하더라도 트랜잭션의 작업 결과는 없어지지 않고 데이터베이스에 남아있어야 한다는 뜻이다. 지속성을 보장하려면 시스템에 장애가 발생했을 때 데이터베이스를 원상복구하는 회복 기능이 필요하다.

트랜잭션의 연산

작업완료, Commit

트랜잭션이 성공적으로 완료되었음을 선언한다.
commit이 실행되고 나서 트랜잭션의 수행 결과가 데이터베이스에 반영되어 데이터베이스가 일관된 상태를 지속적으로 유지하게 된다.

작업취소, Rollback

트랜잭션을 수행하는 데 실패했음을 선언한다.
rollback 연산이 실행되면 트랜잭션이 지금까지 실행한 모든 연산의 결과가 취소되고 트랜잭션 수행 전 상태로 되돌아간다. 데이터베이스를 트랜잭션 수행 전의 일관된 상태로 되돌려 모순이 발생하지 않게 한다.

트랜잭션의 상태

  • 활동 상태(active): 트랜잭션이 수행되기 시작해 현재 수행 중인 상태
  • 부분 완료 상태(partially committed): 트랜잭션의 마지막 연산이 실행된 직후의 상태, 트랜잭션의 모든 연산을 처리한 상태
    • 이 상태의 트랜잭션은 상황에 따라 완료 상태나 실패 상태가 될 수 있다.
  • 완료(committed) 상태: 트랜잭션이 성공적으로 완료되어 commit 연산을 실행한 상태
    • 완료 상태가 되면 트랜잭션이 수행한 최종 결과를 데이터베이스에 반영하고 데이터베이스가 새로운 일관된 상태가 되면서 트랜잭션 종료
  • 실패(failed) 상태: 하드웨어, 소프트웨어의 문제 또는 트랜잭션 내부의 오류 등 이유로 인하여 장애가 발생해 트랜잭션의 수행이 중단된 상태
  • 철회(aborted) 상태: 트랜잭션을 수행하는 데 실패하여 rollback 연산을 실행한 상태
    • 지금까지 실행한 트랜잭션의 연산을 모두 최소하고 트랜잭션이 수행되기 전의 데이터베이스 상태로 되돌리면서 트랜잭션 종료
    • 하드웨어, 소프트웨어 오류로 철회 상태가 된 트랜잭션은 다시 수행을 재개한다.
    • 트랜잭션이 처리하려는 데이터가 디비에 없거나 트랜잭션의 내부 논리적 오류가 원인이라면 철회된 트랜잭션을 폐기한다.

0개의 댓글