트랜잭션(transaction) ACID

2 분 소요


1. Transaction

트랜잭션(transaction)은 완결성 있게 처리되어야 하는 하나의 논리적인 작업 단위를 의미한다. 논리적 작업 단위 내에는 여러 동작(질의, query)이 존재하며 이들은 모두 실행되거나 모두 실행되지 않아야 한다.

  • 작업 단위가 중간에 실패한다면 이를 롤백(rollback)하여 이전 상태로 되돌린다.
  • 작업 단위가 모두 성공한다면 커밋(commit)하여 현재 데이터 상태를 확정지어야 한다.

트랜잭션은 작업 수행의 논리적 단위이기 때문에 DBMS(Database Management System)에서는 TPS(Transaction Per Second)로 성능을 측정한다. 트랜잭션은 데이터의 부정합성을 방지하기 위해 사용한다.

2. ACID

데이터베이스 트랜잭션이 가져야 하는 ACID 특징에 대해 살펴본다. 우선 원자성(Atomic)은 다음과 같은 특징을 의미한다.

  • 트랜잭션의 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장한다.
  • All or Nothing의 개념으로서 작업 단위의 일부분만 실행하지 않는다는 것을 의미한다.
  • 커밋 이전 상태를 롤백 세그먼트(rollback segment)라는 임시 영역에 저장하고 트랜잭션에 의해 내용들을 변경해 나간다.
  • 트랜잭션이 실패하는 경우 수행한 내용들을 삭제하고 롤백 세그먼트에 있는 데이터 상태로 롤백한다.

은행 계좌 이체를 예로 들어보겠다. A 계좌에서 100,000원을 출금하고 B 계좌에 100,000원을 입금하는 작업이 하나의 트랜잭션이다. 만약 출금은 성공했지만 입금 도중에 오류가 발생하면, 출금한 돈은 다시 A 계좌로 복구되어야 한다. 즉, 두 작업 모두 완료되거나, 둘 다 실행되지 않아야 한다. 부분적으로만 실행되는 경우가 없어야 하는 것이 원자성이다.

일관성(Consistency)은 다음과 같은 특징을 의미한다.

  • 트랜잭션을 마친 후의 데이터베이스 상태는 트랜잭션 시작 전 상태와 동일하게 정상 상태를 유지해야 한다.
  • 트랜잭션 수행 후에도 데이터 모델의 제약 조건(기본키, 외래키, 도메인, 도메인 제약조건 등)을 만족하게 함으로써 일관성을 보장한다.

쇼핑몰 주문 시스템을 예로 들어보자. 주문이 완료되면 재고가 감소하고 주문 내역이 저장된다. 이 때, 데이터베이스 제약조건으로 재고가 0 이하가 될 수 없도록 설정되어 있다. 트랜잭션이 성공적으로 완료되면 재고 감소와 주문 기록이 모두 반영되어 데이터 일관성이 유지된다. 만약 재고가 부족한 상태라면 트랜잭션이 롤백되어 일관성이 유지된다.

격리성(Isolation)은 다음과 같은 특징을 의미한다.

  • 여러 클라이언트가 데이터베이스에 접속하여 동일한 레코드(record)에 접근할 때 발생하는 동시성 문제를 다루기 위한 특징이다.
  • 격리성 수준(level)에 따라 트랜잭션끼리의 간섭 수준이 결정된다.
    • Read Uncommitted
    • Read Committed
    • Repeatable Read
    • Serializable
  • 격리 수준에 따라 동시에 실행되는 트랜잭션끼리 영향을 줄 수 있는 정도가 다르며 이로 인해 수행 결과가 바뀔 수도 있다.
  • 동시에 실행되는 트랜잭션은 서로를 방해하지 않아야 하므로 적절한 격리 수준이 요구된다.

일관성과 동일하게 주문 시스템을 예로 들어본다. 두 사용자가 동시에 같은 상품을 구매하려고 할 때, 재고가 1개 남아 있다고 가정한다. 각각의 트랜잭션은 독립적으로 처리되어야 하며, 한 사용자의 구매가 완료되기 전까지 다른 사용자는 재고가 1개 있는 상태만 보아야 한다. 격리성이 낮으면 두 사용자가 동시에 구매해서 재고가 음수가 될 수 있다. 적절한 격리수준을 통해 이런 문제를 방지한다.

지속성(Durability)은 다음과 같은 특징을 의미한다.

  • 성공적으로 수행된 트랜잭션의 결과가 데이터베이스에 반영되는 것을 의미한다.
  • 커밋 수행 이후 현재 상태가 남아 있는 것을 보장한다.
  • 데이터베이스가 죽더라도 트랜잭션에서 기록한 모든 데이터는 손실되지 않는 것을 보장한다.

온라인 결제 후 트랜잭션이 커밋되면, 결제 내역은 디스크에 안전하게 저장되어야 한다. 서버가 갑자기 다운되거나 재부팅되더라도 결제 정보가 손실되지 않고 보존되어야 한다. 이것이 지속성이다. 이를 위해 트랜잭션 로그와 같은 기술을 사용한다.

RECOMMEND NEXT POSTS

REFERENCE

댓글남기기