
개발을 하면서 create, delete 메소드에 주로 사용하긴 했지만
정확히 transaction은 어떻게 동작하는지, 왜 중요한지 짚고 넘어가지 못했던 것 같아 정리를 해보고자 한다.
먼저 트랜잭션이란?
흔히들 은행 계좌의 입출금으로 예시를 드는데, 다수의 요청이 데이터베이스를 동시에 접근하더라도 일관성을 유지시켜야 하는 것이 중요하다.

A 계좌에서 B 계좌로 송금을 한다고 생각해보자.
먼저 A계좌에서 10만원을 차감한 다음, B계좌에 10만원을 입금하는 절차를 거친다.
만약 A계좌에서 10만원이 차감되고, 오류가 발생한다면? B계좌는 입금받지 못하고 A계좌에서 출금만 되는 아찔한 상황이 일어날 것이다.
트랜잭션을 사용하면 이런 문제를 해결할 수 있다.
시스템 오류를 감지하고, A계좌에서 차감되었던 10만원을 다시 돌려놓는 것이다.
이러한 트랜잭션은 다양한 데이터 항목들을 엑세스하고 갱신하는 프로그램 수행의 단위가 된다.
모든 작업이 정상적으로 성공하는 경우 데이터베이스에 정상 반영하는 것을 Commit이라고 하며,
작업 중 하나라도 실패해서 이전으로 되돌리는 것을 Rollback이라고 한다.
ACID는 트랜잭션의 네 가지 기본 속성을 나타내는 약어이다.
이 속성들은 데이터베이스 시스템이 안정성과 일관성을 유지하는 데 중요한 역할을 한다.
이 네가지 속성을 입출금 예시에 빗대어 간단하게 이해해 보자면,
이와 같이 트랜잭션은 데이터의 원자성, 일관성, 고립성, 지속성을 가능하게 하는 데이터베이스 시스템의 중요한 기능이다.
따라서 트랜잭션은 높은 수준의 데이터 무결성이 필요한 비지니스 트랜잭션에 중요하다.
특히 전자 상거래, 금융 시스템과 같이 데이터 오류의 결과가 심각한 영향을 끼칠 수 있는 서비스의 데이터의 신뢰성과 무결성을 보장하는 데 중요한 역할을 한다.
그러나,,
안전하고 일관된 데이터베이스의 상태를 유지하는데 도움을 주지만, 트랜잭션에 따른 여러가지 문제점들도 발생할 수 있는데
이를 방지하기 위해 적절한 설계와 구현으로 트랜잭션을 잘 사용해야 한다.
다음에는 Go언어로 트랜잭션 기능을 사용하는 글을 이어 써보려고 한다.