트랜잭션 ACID

민선규·2023년 2월 2일

데이터베이스

목록 보기
4/11
post-thumbnail

트랜잭션

원자성(atomicity)

  • 원자성(atomicity)은 하나의 트랜잭션이 더 이상 작게 쪼갤 수 없는 최소한의 업무 단위이다. 트랜잭션이 데이터베이스에 모두 반영되던지, 아니면 전혀 반영되지 않아야 하며 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장하는 것으로 즉, All or Nothing의 개념으로서 작업 단위를 일부분만 실행하지 않는다는 것을 의미한다.
  • 예시로 여행을 하기 위해서 비행기표를 예약을 한다고 가정해보자. 간략하게 과정을 적어보면
  1. 예약하고 싶은 자리를 선택한다.
  2. 결제를 시작한다.
  3. 자리가 예약된다.
    이다. 그런데 2번 과정까지 완료된 상태에서 3번 과정이 오류로 인해 실행되지 않고 완료되었다고 가정을 해보면 결제는 되었지만 실제로 예약한 자리는 없게 되는 문제가 발생된다. 그러므로 3번 과정 직전에 오류가 발생한다면 1번 과정 실행 직전으로 돌아가는 것을 보장한다.

일관성(consistency)

  • 일관성(consistency)은 트랜잭션이 완료된 결과값이 일관적인 DB 상태를 유지하는 것을 말한다.
  • 예시로 예약된 비행기 표를 관리하는 DB 테이블이 있다고 가정해보자 그리고 테이블에는 예약자 성명을 저장하는 에트리뷰트가 있는데 반드시 값이 있어야 한다는 제약이 있을 때 데이터를 추가하거나 수정했을 때 예약자 에트리뷰트에는 값이
    무조건 있어야 한다.

고립성(isolation)

  • 고립성(isolation)이란 하나의 트랜잭션 수행시 다른 트랜잭션의 작업이 끼어들지 못하도록 보장하는 것이다. 즉, 트랜잭션 끼리는 서로를 간섭할 수 없다. 트랜잭션이 실행하는 도중에 변경한 데이터는 이 트랜잭션이 완료될 때까지 다른 트랜잭션이 참조하지 못하게 하는 특성이다.
  • 예시로 비행기 좌석이 마지막 한 자리만 남았다고 가정해보자 그렇다면 A이용자와 B이용자가 동시에 예약하는 경우와 A이용자가 예약하고 B이용자가 예약하는 경우 두 결과가 동일하다는 것을 보장해야 한다.

지속성(durability)

  • 트랜잭션이 정상적으로 종료된 다음에는 영구적으로 데이터베이스에 작업의 결과가 저장되어야 한다.
  • 예시로 비행기 좌석 예약을 성공적으로 완료하고 해당 항공사 DB가 오류가 발생해 종료되더라도 예약 내역은 기록으로 남아있는 것을 보장해야 한다.

Commit, Rollback

Commit

Commit은 트랜잭션을 정상적으로 처리하겠다고 확정하는 명령어로서, 처리 과정을 DB에 영구적으로 저장하는 것이다.

Rollback

Rollback은 작업 중 문제가 발생하여 트랜잭션의 처리과정에서 발생한 변경사항을 취소하는 명령어이다.
이 트랜잭션의 일부가 정상적으로 처리되더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소한다는 특징이 있다. 트랜잭션이 시작되기 이전의 상태로 되돌린다. 즉, 마지막 커밋을 완료한 시점으로 다시 돌아간다. 커밋하여 저장한 것만 복구한다

참고 문서 및 링크

0개의 댓글