본문 바로가기

Development/TIL

Transaction과 ACID

트랜잭션(Transaction)이란?

데이터베이스에서 수행되는 작업의 논리적 단위이다.

다시 말해 DB의 데이터를 변경하는 일련의 작업을 하나의 단위로 묶어서 처리하는 것이다.

예를들어 DB에 새로운 데이터를 추가하거나 기존 데이터를 수정 또는 삭제할 때

여러개의 작업을 순서대로 실행하는 것이 아니라, 하나의 트랜잭션으로 묶어서 처리하는 것이다.

쉽게 말해 하나의 작업에 하나의 쿼리를 종속하는 것이 아닌 여러개의 작업(쿼리)를 묶어 하나의 단위로 그룹화하여

처리하는 작업을 뜻한다.

이렇게 트랜잭션을 사용하면 작업의 완전성이 보장된다.

특정한 작업을 전부 처리하거나 전부 실패하게 만들어 데이터의 일관성을 보장해주는 기능이다.

 

 

트랜잭션의 예시

은행에서 계좌이체를 하는 상황이다.

a계좌에서 b계좌로 10만원을 송금한다.

작업 단위로 나눠보자면,

  1. a계좌에서 10만원을 차감하고
  2. b계좌에 10만원을 추가한다.

그런데 여기서 1번 작업을 완료한 후 2번 작업 수행 중에 문제가 생겨 중단이 된다면?

a계좌에서 10만원이 차감된 후 b계좌에 10만원이 입금이 되지 않는 문제가 발생한다.

그래서 1, 2번 작업을 하나의 트랜잭션으로 묶어서 처리하는 것이다.

그래서 중간에 문제가 생긴다면 트랜잭션으로 묶인 작업 단위 전체를 실패 처리시켜 작업의 완전성을 보장하는 것이다.

 

 

ACID란?

트랜잭션의 특징을 나타내는 약어이다.

  • Atomicity (원자성)
    트랜잭션의 작업들은 모두 수행되거나 모두 수행되지 않아야한다.
    즉, 하나의 트랜잭션 내의 작업 중 일부가 실패하면 해당 트랜잭션의 모든 작업은 취소된다.
    은행의 계좌이체 기능을 예로 들수 있다.

  • Consistency (일관성)
    트랜잭션이 실행되기 전과 후에 데이터베이스의 일관성은 유지되어야 한다.
    작업중 에러가 발생해도 데이터베이스에는 이상이 없어야 한다.
    예를 들어 유튜브에 영상을 올리는 작업을 하나의 트랜잭션이라고 했을 때
    영상이 모두 업로드되면 영상 목록 생성 완료,
    만약 영상 업로드 중간에 문제가 생긴다면 영상 목록 또한 생성이 되지 않는 것이다.
    그래서 작업이 실패한다면 실패 전과 후의 데이터베이스에는 차이가 없는 것이다.
    원자성의 개념과 유사하다.

  • Isolation (격리성)
    동시에 실행되는 여러 트랜잭션이 있다고 가정했을 때 서로에게 영향을 미치지 않아야한다.
    즉, 하나의 트랜잭션이 실행되는 동안에는 다른 트랜잭션에 간섭할 수 없다.
    트랜잭션이 실행되기 전이나 작업이 완료된 후에 비로소 참조가 가능해진다.

  • Durability (지속성)
    트랜잭션이 성공적으로 수행된 후에는, 해당 트랜잭션이 완료된 이후의 상태는 영구적으로 보존되어야 한다.
    예를 들어 어플리케이션에서 하나의 작업(트랜잭션)이 완료된 후 기기나 데이터베이스가 비정상 종료되었을 때
    완료된 작업의 상태는 보존이 되어야 한다는 것이다.



위와 같은 개념은 거의 모든 데이터베이스에 적용되어있다고 한다.

데이터베이스의 일관성 보장이 얼마나 중요한지 다시 한번 체크한다.

Isolation(격리성)과 관련해서 동시성(Concurrency)와 격리수준(Isolation Level)이라는 개념이 있던데
주말 동안 추가로 학습해봐야겠다.

'Development > TIL' 카테고리의 다른 글

객체지향 프로그래밍(Object Oriented Programming)  (0) 2023.05.03
트랜잭션의 동시성과 격리수준  (0) 2023.05.02
Thunder Client  (0) 2023.04.28
MongoDB와 MySQL  (0) 2023.04.27
Sequelize 탐구  (0) 2023.04.26