본문 바로가기
DB

[트랜잭션] 정의 및 ACID

by 대우니 2024. 9. 16.
728x90
반응형

추석을 맞이하여 개념을 정리할 겸, DB의 꽃인 트랜잭션의 정의와 트랜잭션과 lock의 차이, 그리고 무결성과 정합성, ACID, 격리 수준, mysql 기준 MVCC 등에 대해 알아보고자 한다. 해당 블로그의 도움을 많이 받아 작성한 문서이다. 

https://mangkyu.tistory.com/category/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4

 

트랜잭션이란?

시작에 앞서 트랜잭션이란 무엇일까? 트랜잭션이란 DB 상태를 변경시키기 위해 수행하는 논리적인 작업의 단위라 할 수 있다.

즉, 상태 변경을 처리하기 위해 필요한 DB 연산을 모아놓은 것이다.

그런데, 트랜잭션으로 묶인 작업은 하나라도 실패한다면 거래 이전으로 돌려야 하며, 모두 성공한다면 DB에 정상적으로 반영한다.

여기서 전자의 경우 롤백이라고 칭하며, 후자는 커밋이라 칭한다.

주로 금액을 인출하는 은행 업무에서 DB 명령이 트랜잭션으로 묶이는데, 잔고가 100원일 때, 모든 금액을 인출하여 이를 DB에 반영했는데, 반영 직전에 누군가 인출을 해버리면, 잔고가 마이너스로 남게 된다. 이런 케이스를 방지하기 위해 트랜잭션으로 묶여야 한다. 대충 개념은 잡았지만 아직 모호할 수 있다. 그러면 ACID에 대해 알아보자.

 

트랜잭션이 지켜야 할 4가지 규칙 - ACID

Atomicity(원자성)

위에서 언급했던 롤백, 커밋과 연관된 규칙이다.

: 트랜잭션 내 실행한 작업들은 하나의 작업인 것 처럼 모두 성공하거나 모두 실패해야 함. 하나의 트랜잭션에서 일부 연산만 실행되는 경우는 없음.

ex) update후 select한 뒤, Insert 작업이 일어나는 작업을 트랜잭션 단위로 설정했으나, insert 작업만 일어나지 않는다.

Consistency(정합성)

: 모든 트랜잭션은 일관성 있는 DB 상태를 유지해야 함. DB에서 정한 무결성 제약 조건을 항상 만족해야 함.

ex) 은행 송금 시, 트랜잭션 수행 이전 송금자와 수금자의 잔액 합이 수행 후에 달라지거나, 잔액을 나타내는 자료형이 정수형에서 문자열로 바뀌는 모순이 발생해서는 안된다.

무결성과 정합성이 무엇인지 모호하다면 해당 글을 읽어보길 바란다.
https://daewoony.tistory.com/111
 

[DB] 무결성과 정합성

ACID 중, Consistency는 정합성에 해당한다. 이 정합성과 무결성이 헷갈리는 거 같아서 간단하게 이를 정리하고자 블로그에 작성했다.정합성데이터들의 값이 서로 일치하는 상태정합성 훼손 예시Befo

daewoony.tistory.com

 

 

Isolation(격리성, 독립성)

이는 위에서 언급했던 은행 업무 케이스인데, 격리 레벨에 따라서 트랜잭션으로 처리되더라도 문제 케이스가 발생할 수 있고, 안할 수도 있다.

: 트랜잭션은 다른 트랜잭션에 간섭을 주거나 받지 않고 독립적으로 수행되어야 함.

둘 이상의 트랜잭션이 병행 실행될 경우, 현재 실행 중인 트랜잭션이 완료되기 전 현재 트랜잭션이 생성한 중간 연산 결과를 다른 트랜잭션이 접근해서는 안된다.

Durability(영속성,지속성)

: 트랜잭션이 성공적으로 완료되었다면, 그 결과는 영구적으로 반영되어야 한다.

시스템 장애가 발생하더라도 결과는 DB에 그대로 남아있어야 하며, 지속성을 보장하기 위해 DB로그를 남긴다던지, 복제 서버를 만들어놓는다던지의 복구가 필요하다.

 

격리성, 독립성에 해당하는 규칙 중 격리 수준의 개념이 나오는데, 이것이 무엇인지 다음 포스팅에서 자세히 확인해보자.

 

반응형

'DB' 카테고리의 다른 글

[DB] 무결성과 정합성  (0) 2024.09.16