개발을 하게 되면서 데이터베이스를 다루어야 한다면 트랜잭션이라는 단어를 접하게 됩니다. 트랜잭션이란 간단히 설명하자면 '데이터베이스의 상태를 변화시키는 작업의 단위'라고 할 수 있습니다. 데이터베이스를 다룰 때에 이 트랜잭션에 대한 깊은 이해가 필요한데 왜 작업의 단위에 대해서 이해가 필요한지 이유를 적어보도록 하겠습니다.
먼저 어떠한 데이터베이스를 사용할 때에 우리가 인지하지 못한 오류가 발생하는 경우가 존재합니다. 가장 많이 쓰이는 예제인 은행거래의 상황을 살펴보며 이해 보겠습니다.
- A가 B에게 50,000원을 계좌 이체해주기로 하였습니다.
- 그리고 A가 B에게 계좌 이체를 요청하였고 은행 애플리케이션에서 계좌 이체 작업이 진행됩니다.
1. A의 계좌에서 50,000원이 차감됩니다. ( - )
2. B의 계좌에 50,000원이 추가됩니다. ( + )
- 생각되는 간단한 작업으로는 위의 두 단계를 거치게 됩니다. 그런데 만약 2번 단계에서 오류가 생긴다면 데이터 자체에 문제가 생기게 됩니다.
1. A의 계좌에서 50,000원이 차감됩니다. ( - )
2. B의 계좌에 50,000원이 추가되지 못하고 오류가 발생하였습니다. ( ? )
=> A는 50,000원을 차감했지만 B는 50,000원을 받지 못했습니다. 이를 바로잡기 위해서는 은행이 50,000원을 배상하고 손해를 보게 됩니다.
여기서 트랜잭션의 성질 중 하나인 원자성을 적용해 본다면 은행은 손해를 보지 않을 수 있습니다. 트랜잭션은 계좌이체 즉 A의 계좌에서 50,000원이 차감되는 것과 B의 계좌에 50,000원이 추가되는 것 까지를 하나의 작업 단위로 가지게 되며 이 작업 단위 내에서 하나의 처리라도 실패한다면 모두 실패한 것으로 처리하여 데이터베이스에 반영하지 않고 모두 성공했을 때 비로소 데이터베이스에 작업 결과를 반영하는 것입니다.
즉 두 번째 상황처럼 2번 단계에서 오류가 생겼다면 1번 작업인 A의 계좌에서 50,000원이 차감된 것조차도 실제 데이터베이스에는 반영되지 않았기 때문에 계좌이체 자체는 실패했지만, 데이터 자체가 손상을 입은 것은 아무도 없는 상태이게 되는 것입니다.
트랜잭션을 사용해야하는 예시는 위와 같으며 이제 자세히 트랜잭션의 요소들에 대하여 알아보도록 하겠습니다.
트랜잭션의 특징
트랜잭션은 ACID(Atomicity, Consistency, Isolation, Durability)라고 불리는 특성들이 존재합니다. 이는 데이터베이스에서 트랜잭션이 안전하게 수행된다는 것을 보장하기 위해 필요한 특징들 입니다.
- 원자성 ( Atomicity ) : 위의 은행 예시에서 들었던 원자성 입니다. 트랜잭션이 DB에 모두 반영되거나 전혀 반영되지 않아야 한다는 특성입니다.
- 일관성 ( Consistency ) : 트랜잭션의 작업 처리 결과는 항상 일관성이 있어야 합니다.
- 독립성 ( Isolation ) : 두 가지 이상의 트랜잭션이 동시에 실행되고 있을 때, 각각의 트랜잭션은 서로의 연산에 개입할 수 없어야 합니다.
- 영속성 ( Durability ) : 트랜잭션이 성공적으로 완료되었다면 그 결과는 영구적으로 반영되어야 합니다.
트랜잭션 기능
데이터베이스에서 트랜잭션 처리를 하기 위해서 사용하는 명령어에는 Commit, Rollback, SavePoint가 있습니다.
- 커밋( Commit ) : 작업들이 모두 성공적으로 완료되었다면 이 사항들을 최종적으로 DB에 반영할 때에 사용하는 명령어입니다.
- 롤백( Rollback ) : 이름 그대로 작업을 되돌리는 명령어입니다. 작업 도중 문제가 발생하게 될 경우 이번 작업단위의 처음 즉 이번 작업단위가 실행되기 이전의 상태로 되돌려주게 됩니다.
- 세이브포인트( SavePoint ) : 세이브 포인트 말 그대로 저장 지점 입니다. 게임에서의 세이브 포인트 처럼 트랜잭션 내 작업의 중간에 세이브포인트를 설정해 놓는다면 작업에 문제가 생겨 롤백이 일어날 때에 중간에 지정해 놓은 세이브포인트 까지만 롤백이 일어나게 됩니다.
내용을 추가할 예정입니다.
'Study > DataBase' 카테고리의 다른 글
[DataBase] 일관성과 지속성의 차이 (0) | 2022.01.19 |
---|