[Database] Transaction & ACID

chungjung·2022년 9월 26일
0

Database 기본

목록 보기
1/2

Introduce

개발을 하면서 Transaction이라는 개념을 참 많이 사용한 것 같은데, 실제로 내가 그 개념을 제대로 이해하고 있는지에 대해서 의문이 들어서 Transaction에 대해서 조금 정리하는 시간을 가져보려고 합니다.

Transaction과 ACID 그리고 Isolation Level까지 어렴풋이만 알았던 개념들을 이참에 블로그 글로 정리하면서 알아보려고 합니다. 처음 글은 ACID까지만 다루고, 그 뒤에 Isolation Level에 대해서 다뤄보고자 합니다.

혹시 틀린 점이나, 잘못된 부분이 있으면 지적 부탁드릴게요

Transaction

DB에서 트랜젝션은 "여러개의 작업을 하나로 묶어서 실행하는 작업 수행의 논리적 단위" 라고 할 수 있습니다.

조금 풀어서 설명해 볼게요. 예를 들어서 A가 친구 B에서 10000원을 송금하는 상황을 생각해 봅시다. 이런 상황에서는 A의 통장에서 돈이 빠져나가는 출금 1번, B의 통장으로 돈이 들어오는 입금 1번이 각각 진행되게 됩니다.

트랜잭션을 사용하지 않을 경우 , 만약 A의 통장에서 돈이 빠져나갔고, 돈이 계좌에서 빠져나간 사실이 은행 DB에 저장이 되었지만, 네트워크 장애로 인해서 B에게 입금이 되지 않는 상황이 발생했다고 합시다.

이 경우 은행 DB에는 통장 출금 기록만 남고 입금 기록은 남지 않는 참사가 발생하게 됩니다.

트랜잭션을 사용한 경우 위와 같은 상황에서 입금과 출금을 하나의 작업으로 묶어서 처리하기 때문에 만약 입금이 실패했을 경우 A의 출금기록을 Rollback 시키게 됩니다.

즉 트랜젝션을 사용하는 이유는 데이터의 정합성을 보장하기 위해서 사용하는 것입니다.

ACID

트랜잭션은 DB의 정합성을 보장하기 위해서 4가지 특성을 만족해야 하는데, 이 4가지 특성의 앞글자를 따서 ACID라고 부릅니다.

다만 제 경험상, 완벽하게 Isolation을 만족하는 Transaction을 모든 곳에서 사용하지는 않았던 것 같아서 가이드라인 정도로 생각하면 좋을 것 같아요.

이 부분은 혹시 제 생각이 틀릴수도 있을 것 같아서, 다른 의견이 있다면 댓글로 달아주시면 정말 감사할 것 같습니다.

트랜잭션은 위에서 말했듯이 4가지 특성 Atomicity, Consistency, Isolation, Durability를 만족합니다.

Atomicity [원자성]

트랜잭션내에 묶여있는 작업이 일부만 실행되거나 중단되지 않는 것을 보장합니다. 즉 All or Notion, 전체 다 수행되거나 아니면 아예 수행되지 않거나를 보장합니다.

Consistency [일관성]

기존의 DB와 Transaction후의 DB가 consistent 해야 한다. 즉 일관성을 유지해야 합니다.

조금 더 풀어서 설명하면, 기존의 DB에서 설정한 제약 조건들에 만족하도록 항상 유지되어야 한다는 것입니다. 만약 특정 column에 Int 타입만 들어갈 수 있다면 float 타입의 값이 들어가서는 안됩니다.

Isolation [격리성]

각 트렌잭션 끼리는 서로 격리되어야 합니다. 즉 서로 다른 트렌잭션끼리는 서로 간섭할 수 없습니다.

Durability [지속성]

성공적으로 트랜잭션이 수행되었다면 영원이 반영이 되어야 합니다. 즉 Commit을 하게 되면 트랜잭션은 영원히 반영됩니다.

다음 글에서는 Transaction Isolation Level에 대해서 다뤄보도록 하겠습니다.

Reference

Image

https://www.geeksforgeeks.org/acid-properties-in-dbms/

Docs

https://www.geeksforgeeks.org/acid-properties-in-dbms/
https://victorydntmd.tistory.com/129

0개의 댓글