개발용어

트랜잭션: DB 논리적 기능을 수행하기 위한 작업 단위, 네가지 속성 ACID

sakuraop 2023. 3. 12. 16:06

트랜잭션이란?

트랜잭션이란 데이터베이스를 수정하는 하나의 논리적 기능을 수행하기 위한 작업의 단위를 의미합니다. 

여러 개의 쿼리가 실행되는 중에 어느 하나라도 실패하게 되면 

모든 작업이 취소되는 ACID(원자성, 일관성, 격리성, 지속성) 원칙을 준수하는 작업의 단위입니다.

예를 들어,

은행에서 송금 기능을 구현한다고 가정해봅시다. 

이때 송금은 여러 개의 쿼리가 실행되어야 하며, 

예금 계좌에서 돈을 빼고, 대상 계좌에 돈을 추가하는 쿼리가 모두 성공적으로 수행되어야 합니다. 

이때 어느 하나라도 실패하게 되면, 

예금 계좌에서 돈을 빼는 작업만 수행되고 대상 계좌에 돈을 추가하는 작업은 수행되지 않는 문제가 발생할 수 있습니다.

따라서

모든 작업이 성공적으로 수행되는 경우에만 결과를 적용하고,

어느 하나라도 실패하면 모든 작업을 취소합니다.

이를 통해 데이터 일관성과 안정성을 보장할 수 있습니다.

 

ACID이란? 트랜잭션 처리에서 중요한 네 가지 속성

  • 원자성(Atomicity): 트랜잭션의 모든 작업이 전부 수행되거나 전부 수행되지 않아야 합니다. 
    즉, 하나의 작업이라도 실패하면 이전 작업을 모두 롤백하여 이전 상태로 되돌리는 것을 의미합니다.

  • 일관성(Consistency): 트랜잭션 이전과 이후의 데이터 상태가 일관성을 유지해야 합니다. 
    즉, 데이터베이스의 제약 조건을 만족해야 하며, 일관성 있는 상태로 유지되어야 합니다.

  • 격리성(Isolation): 동시에 여러 트랜잭션이 수행되더라도 각각의 트랜잭션은 서로 독립적으로 수행되는 것처럼 격리되어야 합니다.
    즉, 한 트랜잭션이 수행 중일 때 다른 트랜잭션에서는 해당 작업이 완료되기 전까지 데이터를 수정하거나 조회할 수 없습니다.

  • 지속성(Durability): 트랜잭션을 성공적으로 수행한 후에는 그 결과가 영구적으로 유지되어야 합니다.
    즉, 시스템 장애가 발생해도 트랜잭션 결과는 보존되어야 합니다.


예를 들어, 

한 고객의 계좌에서 일정 금액을 인출하는 트랜잭션을 수행한다고 가정해보겠습니다. 

이 트랜잭션에서는 다음과 같은 ACID 원칙이 필요합니다.

  • 원자성: 인출 작업이 일부 실패하면, 이전 작업을 롤백하여 고객의 계좌에서는 인출 전 상태로 되돌려야 합니다.
  • 일관성: 계좌에서 인출한 금액은 고객의 잔액에서 감소되어야 합니다.
  • 격리성: 다른 고객이나 관리자가 해당 계좌를 동시에 수정하더라도, 인출 작업이 끝날 때까지 해당 계좌는 잠금 상태로 유지되어야 합니다.
  • 지속성: 인출 작업이 완료되면, 계좌의 잔액 정보는 시스템 장애 등의 문제로 인해 손실되지 않고 영구적으로 보존되어야 합니다.