[DB] 트랜잭션이란

rg.log·2022년 5월 9일
0
post-thumbnail

공부한 트랜잭션에 대해 정리해 보려 한다. 트랜잭션 처리의 원리라는 책 한 권으로 나올 정도로 깊은 내용이 많지만 우선은 간단하게 시작해 본다.

트랜잭션(Transaction)이란?

작업의 완전성을 보장해 주는 것이다.
즉, 논리적인 작업 셋을 모두 완벽하게 처리하거나 또는 처리하지 못할 경우에는 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능이다. 사용자의 입장에서는 작업의 논리적 단위이고, 시스템의 입장에서는 데이터들을 접근 또는 변경하는 프로그램의 단위이다.

트랜잭션에 의해 제공되는 안전 보장은 ACID로 설명된다.

  • Atomicity (원자성)
    ex. 클라이언트가 여러 번 쓰기를 원하지만 일부 쓰기가 처리된 후 오류 발생 시(process 충돌, nw 연결 중단, disk 가득 차는 등) 쓰기가 원자적 트랜잭션으로 함께 그룹화되고 오류로 인해 트랜잭션을 완료할 수 없는 경우 트랜잭션이 중단되고, DB는 해당 트랜잭션에서 지금까지 작성한 모든 쓰기를 삭제하거나 실행 취소해야 한다.

    원자성으로 인해 트랜잭션이 중단된 경우 애플리케이션은 아 것도 변경하지 않았음을 확신하고 안전하게 재시도할 수 있다!

  • Consistency (일관성)

    일관성은 데이터에 대한 특정 진술에 대해 항상 참이어야 한다는 것이다.

    ex. 회계 시스템에서, 모든 계정의 입금액과 출금액은 비율(균형)이 맞아야 한다. 4000원을 입금하여 총 금액이 4000원 있는 계정에서 5000원을 출금할 수 없듯이 말이다.
    그러나 일관성

    원자성, 격리, 내구성은 DB의 속성이지만, 일관성은 응용 프로그램의 속성이다. 왜냐하면 불변성을 위반하는 잘못된 데이터를 작성한다면 데이터베이스가 사용자를 막을 순 없기에 이를 데이터베이스가 보장할 수 있는 것이 아니기 때문이다.

  • Isolation (격리)

    격리는 동시에 실행되는 트랜잭션이 서로 격리되어, 각 트랜잭션이 전체 DB에서 실행되는 유일한 트랜잭션인 것처럼 하는 것이다.

    대부분 DB는 동시에 여러 클라이언트에서 접근한다. DB의 다른 부분을 읽고 쓰는 경우 문제가 되지 않지만 동일한 DB 레코드에 액세스하는 경우 동시성 문제에 부딪힐 수 있다. 해서 격리는 동시에 실행되는 트랜잭션이 서로 격리되어, 각 트랜잭션은 전체 DB에서 실행되는 유일한 트랜잭션인 것처럼 가장하는 것이다. 그렇게 되면 트랜잭션이 커밋될 때 실제로는 동시 실행되더라도 마치 직렬로 (하나씩) 실행된 것과 동일하다. 그러나 실제 직렬화 가능한 격리는 성능 저하를 수반하기에 거의 사용되지 않는다.

  • Durability (내구성)
    DB의 목적은 데이터를 잃어버릴 염려 없이 데이터를 저장할 수 있는 아전한 장소를 제공하는 것이다.

    내구성은 트랜잭션이 성공적으로 커밋되면 하드웨어 결함이 있거나 DB가 충돌하더라도 기록된 모든 데이터가 잊혀지지 않는다는 약속이다.

0개의 댓글