CS/데이터베이스

[데이터베이스] 트랜잭션의 개념과 ACID 특징 정리

happy_life 2022. 8. 15. 10:51

데이터베이스 트랜잭션의 개념과 ACID 특성에 대해 알려드리고자 합니다. 트랜잭션이란 복수 쿼리를 한 단위로 묶은 것이며, ACID 특성에는 원자성, 일관성, 고립성, 지속성이 있습니다. 이 글에서는 이에 대해 자세히 알아보려 합니다.

 

 

 

데이터베이스 트랜잭션 개념

데이터의 갱신은 단일 쿼리만으로 구성되는 것이 아니라, 복수 쿼리를 연속적으로 수행하는 경우가 대부분이다. 또한 갱신 전의 데이터로 SELECT를 사용할 때 이를 포함해 복수 쿼리를 일관된 형태의 한 덩어리로 다뤄야 한다. 트랜잭션이란 이런 복수 쿼리를 한 단위로 묶은 것이다.

 

 

 

데이터베이스 트랜잭션 특성(ACID)

① 원자성

데이터의 변경(INSERT/DELETE/UPDATE)을 수반하는 일련의 데이터 조작이 전부 성공할지 전부 실패할지를 보증하는 특성이다. 데이터 수정의 절차가 모두 잘 진행되면 트랜잭션 단위는 COMMIT을 수행하지만, 절차 중 문제가 생기면 ROLLBACK을 실행해 절차 실행 전으로 되돌린다.

 

 

 

② 일관성

일련의 데이터 조작 전후 그 상태를 유지하는 것을 보증하는 특성이다. 이는 구체적으로 트랜잭션이 성공적으로 수행 후 데이터 베이스에 적용한 제약조건(PRIMARY KEY, UNIQUE, NULL 등)을 위반하지 않는다는 것을 보증한다는 의미를 가진다. 예를들어, 사용자가 번호를 저장하려고 하는데, 번호에 UNIQUE 제약 조건이 있다면, 같은 번호로는 트랜잭션 할 수 없다. 추가적으로 트랜잭션의 작업이 의도한 대로 정상작동한다는 것을 보증한다는 의미를 가진다. 예를 들어, 재고가 떨어졌을 때, 더 이상 판매를 할 수 없도록 보증한다.

 

 

 

③ 고립성

복수의 사용자가 동시에 실행해도 각각의 처리가 모순 없이 실행되는 것을 보증한다는 특성이다. 예를 들어 고립성이 없다면 아래와 같은 문제가 발생한다.

 

 

 

이런 상태를 방지하기 위해 데이터베이스에서 Lock을 걸어 사용자 A의 사용이 끝날 때까지 사용자 B가 데이터베이스를 사용하지 못하게 한다. 이런 상태를 BLOCKED라고 한다.

동시성 문제 / 해결방법

 

 

 

④ 지속성

일련의 데이터 조작을 완료(COMMIT)하고 완료 통지를 사용자가 받는 시점에서 그 조작이 영구적이 되어 그 결과를 잃지 않는 것을 보증하는 특성이다. 이는 시스템이 정상일 때만이 아니라, 데이터베이스나 OS의 이상 종료 등 시스템의 장애에도 견딜 수 있게 설계되었다는 것을 의미한다. 데이터베이스는 트랜잭션 조작을 하드 디스크에 '로그'로 기록하고 시스템 이상이 발생하면 그 로그를 사용해 이상 발생 전의 상태까지 복원하여 지속성을 실현하고 있다.