Database

[Database] 트랜잭션, ACID 란?

jungha_k 2022. 10. 5. 21:26

https://jihunn-kim.github.io/database/database_system_9/

 

트랜잭션 ? 

- 데이터베이스의 논리적인 연산 단위

- 트랜잭션에는 하나 이상의 SQL 문장이 포함됨

 

- 트랜잭션은 밀접히 관련되어 분리될 수 없는 한 개 이상의 DB조작을 가리킴

(= 여러개의 작업을 하나로 묶은 실행 유닛)

 

- 분할할 수 없는 최소단위이므로 -> 전부 적용하거나, 전부 취소해야 함

(= 성공 or 실패 두 개의 결과만 존재함)


ACID ? 

데이터베이스 트랜젝션이 발생할 때, 그 안전성을 보장할 수 있는 성질

  • 원자성 (Atomicity)
  • 일관성(Consistency)
  • 고립성(Isolation)
  • 지속성(Durability)

 

원자성(Atomicity)

트랜잭션의 연산은 모두 적용되던지, 아니면 전혀 실행되지 않은 상태여야함

(= 모든 연산이 성공 or 모두 실패)

 

ex) 한 트랜잭션 안에 

1. A 계좌에서 출금한다.

2. 그 돈을 B 계좌로 넣는다. 가 있다고 쳤을때,

 

1은 성공하고 2는 실패하게 된다면

A 계좌에서 출금한 돈이 어디로 가게 되는거지? --> 데이터 손실 발생

무조건 1+2 함께 성공하거나, 실패하거나.

 


일관성(Consistency)

트랜잭션 실행전 DB에 이상이 없다면, 실행후에도 일관되게 이상이 없어야

 

제약이 변경되거나 하지 않고 일관된 상태를 가져야 한다!

ex) A 데이터베이스의 제약 - '모든 고객은 반드시 이름을 가지고 있어야 한다'

 

어떤 트랜잭션이

  • 이름 없는 새로운 고객을 추가하는 쿼리
  • 기존 고객의 이름을 삭제하는 쿼리

    일 경우, 기존 제약을 위반하게 된다! 안됨안됨

고립성(Isolation)

트랜잭션 실행 중, 다른 트랜잭션의 영향을 받아선 안됨 

(= 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 한다)

 

트랜잭션이 동시에 실행될 경우 = 연속으로 실행될 경우

DB 상태가 동일하다~

 


지속성(Durability)

트랜잭션이 성공적으로 수행되면, 영구적으로 반영되어 저장

 

성공 or 실패한 트랜잭션에는 해당 트랜잭션에 대한 로그가 남는다.

해당 기록은 '영구적'이다. 

로그를 기록하기 전에 실패했을 경우? --> 트랜잭션 실행 이전 원래 상태로 돌아가게 됨.