본문 바로가기

데이터베이스

트랜잭션 ACID

훈수/저작권 관련 지적 환영합니다 - 댓글 또는 audgnssweet@naver.com

 

트랜잭션 ACID


지난 글에서는 트랜잭션의 개념에 대해서 알아보았습니다.

ACID는 큰 주제여서 따로 빼서 새로운 글로 다룬다고 말씀드렸었는데

오늘 다뤄보겠습니다.


ACID란?

 

ACID
ACID는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다.
그 종류에는
원자성(atomicity), 일관성(consistency), 격리성(isolation), 영속성(durability)이 있다.
-위키백과-

트랜잭션이 반드시 보장해야 하는 4가지 성질입니다.

트랜잭션이 궁금하시면 audgnssweet.tistory.com/45?category=846241 를 참고하세요.

그럼 본격적으로 ACID에 대해서 알아보겠습니다.


원자성 (Atomicity)

원자성이란 하나의 트랜잭션이 발생하면 작업의 처리는 트랜잭션 단위로 일어나야 한다는 것입니다.

 

트랜잭션은 여러 개의 더 작은 작업 단위로 분할될 수 있습니다. (물론 아닐 수도 있습니다)

작업 처리가 트랜잭션 단위로 일어나야 한다는 것은, 트랜잭션이 올바르게 실행되면 트랜잭션 중 진행된 모든 DB에 대한 처리가 적용되어야 한다는 것이고 만약 트랜잭션 진행 중 문제가 생긴다면 진행된 모든 처리가 다시 취소되고 DB에 아무것도 반영되지 않아야 함을 뜻합니다.

 

만약 은행 거래에서 남의 계좌로 계좌 이체하는 것이 하나의 트랜잭션이라면, 내 계좌에서 돈이 없어지고 상대 계좌로 돈이 들어가는 것이 반드시 하나의 작업 단위로 일어나야 할 것입니다. 상대 계좌로 돈이 들어가는 도중에 문제가 생겼다고 해서 내 계좌에서만 돈이 없어지고 상대 계좌로 돈이 들어가지 않는다면 큰 문제가 될 수 있습니다. 이처럼 트랜잭션 단위의 일처리를 보장하는 것을 원자성이라고 합니다.


일관성 (Consistency)

모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다는 것입니다.

 

여기서 말하는 일관성 있는 상태란 어떠한 제약조건이나 DB 내부적으로 정한 올바른 상태를 의미합니다.

DB에서는 적어도 무결성 제약조건을 모두 충족시키는 상태를 일관성 있는 상태라고 말합니다.

이에는 primary key는 유일해야 한다, 참조 무결성 제약조건은 지켜져야 한다, column내부적으로 정한 규약은 지켜져야 한다(ex. 계좌 잔고는 0원보다 작아질 수 없다) 등을 의미합니다.

 

만약 어떤 은행 시스템에서 후불 교통카드 금액을 자동이체하려고 하는데, 고객이 가진 돈이 부족하다고 해서, 이체 후 잔고가 음수가 되면 문제가 생깁니다. 이를 보장하는 것을 일관성이라고 합니다.


격리성 (isolation)

우리는 보통 단일 사용자를 위한 프로그램보다는 여러 사용자가 동시에 사용하는 프로그램을 만드는 경우가 많습니다. 여러 사용자가 하나의 DB에 접근한다면 여러 개의 트랜잭션이 동시에 발생하는 상황이 일어납니다.

 

이 때, 접속은 동시에 일어나지만 기술적으로 직렬적 처리 방식으로 만드는 것이 격리성입니다.

직렬적 처리방식이라는 것은 트랜잭션이 마치 하나씩 순차적으로 일어나는 것처럼 만드는 것을 말합니다.

 

만약 내 계좌에서 친구 계좌로 5만원을 인출하려고 하는데 이체하는 도중 내 계좌에서 후불 교통비가 빠져나가버려 돈이 없어져 실패한다면 문제가 생길 것입니다. 그러므로 내가 이체하는 도중 내 계좌에 lock을 걸어 다른 트랜잭션이 접근하지 못하도록 하는 것. 이것이 격리성입니다


영속성 (durability)

영속성은 트랜잭션이 성공적으로 commit이 되었다면, 하드웨어에 문제가 생기거나 DB가 다운되더라도 트랜잭션에서 기록한 모든 데이터는 그대로 남아있어야 한다는 것입니다.

 

오늘날 우리는 어디에서든 DB를 사용합니다. DB에는 민감하고 중요한 정보들이 저장되는 경우가 많습니다. 그런데 문제가 생겼다고 해서 DB에 저장되었던 정보가 없어지면 아주 큰 문제가 생길 수 있습니다.

그러므로 영속성을 보장하는 것은 DB에서 매우 중요한 부분이라고 할 수 있습니다


 

트랜잭션의 ACID에 대해서 알아보았습니다.

 

참고자료

https://johngrib.github.io/wiki/ACID/

 

'데이터베이스' 카테고리의 다른 글

(MySQL) 와일드카드 기반 like 검색과 예시  (0) 2021.05.12
(MySQL) Index 개념과 종류  (0) 2021.05.12
모델링 개념  (0) 2021.05.12
MySQL 트랜잭션 개념과 예제  (0) 2021.04.14
MySQL DCL 예제  (0) 2021.04.07