본문 바로가기

공부

[DB] 트랜잭션 ACID란? (Atomicity, Consistency, Durability, Isolation)

반응형

 

트랜잭션

: 논리적인 작업 단위 (a single logical unit of work)

- 논리적인 이유로 여러 SQL문들을 단일 작업으로 묶어서 나누어질 수 없도록 만든 것

- 트랜잭션 내 SQL 문들은 모두 성공하는 경우 commit, 하나라도 실패하는 경우 전체 rollback

- 트랜잭션 내 SQL문 중 일부만 성공해서 DB에 반영되는 일은 일어나지 않는다.

 

트랜잭션 ACID란?

ACID 규칙을 모두 보장하여 데이터베이스 트랜잭션이 안전하게 수행되어야 한다.

원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)의 앞글자를 딴 규칙

 

원자성(Atomicity)

- ALL OR NOTHING

- 트랜잭션은 모두 실행하거나 모두 실행하지 않음의 두가지 상태만

 

트랜잭션은 논리적으로 쪼개질 수 없는 작업 단위이기 때문에 내부의 SQL 문들이 모두 성공하거나, 어떤 하나의 SQL문이라도 실패하면, 지금까지 작업은 모두 취소해 이전 상태로 롤백해야 한다.

=> 일부만 성공하는 상태는 존재해서 안된다.

 

일관성(Consistency)

- 트랜잭션 이전과 이후에 데이터베이스는 항상 consistent한 상태여야 한다는 규칙이다.

트랜잭션은 DB 상태를 consistent 상태에서 또 다른 consistent 상태로 가야 한다.

 

만약에, constraints, trigger 등을 통해서 DB에 정의된 규칙을 트랜잭션이 위반했다면 롤백해야 한다.

예시로, 계좌에 잔액을 업데이트하는 트랜잭션 결과로 잔액이 마이너스로 가버렸다면 그냥 롤백해야 한다.

또 다른 예시로, 데이터는 미리 정의된 규칙에서만 수정이 가능한 특성을 의미하는데, 숫자 컬럼에 문자열 값을 저장이 안되도록 보장해준다.

 

트랜잭션이 DB에 정의된 규칙을 위반했는지는 DBMS가 커밋 전에 확인하고 알려준다.

 

고립성(Isolation)

- 여러 트랜잭션이 동시 실행 시, 혼자 실행되는 것처럼 동작하도록 만들어야 한다.

즉, 동시에 실행되는 여러 트랜잭션은 서로 영향을 주지 않고 독립적으로 실행되는 것처럼 보여야 한다.

 

영속성(Durability)

- 커밋된 트랜잭션의 결과는 데이터베이스에 영구적으로 저장되어야 한다.

영구적 저장 == 비휘발성 메모리(HDD, SSD 등)에 저장

- DB System 에 문제가 생겨도 커밋된 결과는 계속 데이터베이스에 남아있어야 한다.

한번 반영된 트랜젝션의 내용은 영원히 적용되는 특성을 의미

 

 

 

출처 및 참고

- https://engineerinsight.tistory.com/210

- https://chrisjune-13837.medium.com/db-transaction-%EA%B3%BC-acid%EB%9E%80-45a785403f9e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

출처 및 참고

- ACID란? https://engineerinsight.tistory.com/210

- https://chrisjune-13837.medium.com/db-transaction-%EA%B3%BC-acid%EB%9E%80-45a785403f9e

반응형