Backend/DataBase

Transaction의 성질 - ACID

Seyun(Marco) 2020. 12. 19. 19:21
728x90

Transaction의 성질 - ACID

트랜잭션이란?

  • 하나의 논리적 작업 단위를 구성하는 일련의 연산들의 집합
  • 예를 들어 계좌이체를 했을 경우 A 계좌에서 10만원을 인출하고 B 계좌에서 10만원을 입금되었을 경우 A 계좌 인출 시 문제가 생겼을 경우 원래 상태(B 계좌에 입금이 되면 안된다.)로 돌아가야 하고 B 계좌 입금시 문제가 생겼을 경우 원래 상태(A 계좌로 인출이 되면 안된다.)로 돌아가야 한다.
  • 이러한 트랜잭션은 다양한 데이터 항목들을 접근하고 갱신하는 프로그램의 수행 단위가 된다.
  • 트랜잭션은 아래의 ACID 성질이라고 하는 것으로 설명된다.

트랜잭션의 성질

  • 트랜잭션이 안전하게 수행되는 것을 보장하기 위한 성질

A - Atomicity(원자성)

  • All or Notihng
  • 모든 트랜잭션 연산들이 정상적으로 수행 완료가 되거나 아니면 전혀 어떠한 연산도 수행해서는 안된다.
  • 즉, 완료되지 않은 트랜잭션의 중간 상태를 DB에 반영되면 안되고 완료된 트랜잭션은 모두 반영되어야 한다는 것이다.

C - Consistency (일관성)

  • 트랜잭션 작업 처리 결과는 항상 일관성이 있어야 한다.
  • 즉, 성공적으로 수행된 트랜잭션은 정당한 데이터들만 데이터베이스에 반영해야 한다.
  • 기본키, 외래 키 제약 같은 명시적인 무결성 제약 조건뿐만 아니라 아까의 계좌이체 예제에서 A와 B 계좌의 잔고 합이 트랜잭션 전과 후가 같아야 한다는 비명시적 일관성 조건도 있다.

I - Isolation (독립성)

  • 둘 이상의 트랜잭션이 동시에 실행되고 있다 해도 각각의 트랜잭션은 다른 트랜잭션의 수행에 영향을 받지 않고 독립적으로 실행해야 한다.
  • 즉, 서로의 간섭없이 독립적으로 이루어져야 한다는 의미이다.
  • 이 독립성을 보장할 수 있는 가장 좋은 방법은 순차적으로 수행하는 것(비동시성)인데, 병렬 처리(동시성)의 장점을 얻기 위해 격리레벨, 전파 옵션을 이용해 독립적은 최소한으로 보장하고 성능은 최대한 가져오는 방법을 제공한다.

D - Durablity (지속성)

  • 트랜잭션이 정상적으로 성공되어 커밋이 되면 해당 트랜잭션에 대한 모든 변경은 영구적으로 반영되어야 한다.

참고자료

NAVER D2

728x90
728x90