조준장 개발자 생존기

트랜잭션과 ACID 본문

CS/데이터베이스

트랜잭션과 ACID

JunJangE 2025. 5. 18. 16:18

우리는 일상에서 은행 앱으로 송금을 하고, 쇼핑몰에서 주문을 한다. 그런데 만약 송금 버튼을 눌렀는데 돈은 빠져나갔지만 상대 계좌에는 입금되지 않았다면? 이런 일이 실제로 일어난다면, 사용자들은 더 이상 그 서비스를 신뢰하지 않을 것이다.

바로 이런 신뢰를 지키기 위해 데이터베이스는 “트랜잭션”이라는 개념을 사용한다.

트랜잭션이란?

트랜잭션(Transaction)은 데이터베이스에서 하나의 논리적인 작업 단위를 뜻한다.

예를 들어, A 계좌에서 1만 원을 출금하고 B 계좌에 입금하는 과정은 두 가지 데이터 조작이지만, 실제로는 하나의 트랜잭션으로 처리된다.
즉, 두 작업이 모두 성공하거나, 둘 다 실패해야 데이터의 신뢰성이 유지된다.

ACID: 트랜잭션의 4가지 원칙

트랜잭션이 제대로 작동하기 위해선 다음의 ACID 원칙을 지켜야 한다.
여기서 ACID는 다음 네 가지 특성의 첫 글자를 따온 용어다.
Atomicity (원자성), Consistency (일관성), Isolation (고립성), Durability (지속성)

그럼 하나 하나 알아보도록 하자.

1. 원자성 (Atomicity)

트랜잭션의 모든 작업은 하나의 단위로 실행되어야 한다.
→ 송금 중 입금만 실패하는 상황은 절대 허용되지 않아야 한다.

2. 일관성 (Consistency)

트랜잭션 실행 전과 후에 데이터의 제약 조건이 유지되어야 한다.
→ A 계좌에서 1만 원이 빠졌다면, 반드시 B 계좌에는 1만 원이 더해져야 한다.

3. 고립성 (Isolation)

여러 트랜잭션이 동시에 실행될 때 서로 간섭하지 않아야 한다.
→ 동시에 상품을 주문해도, 재고가 1개면 2명이 동시에 결제할 수 없어야 한다.

4. 지속성 (Durability)

트랜잭션이 성공적으로 끝났다면, 결과는 영구적으로 저장되어야 한다.
→ 갑자기 전원이 꺼져도 이미 완료된 주문은 복구되어야 한다.

왜 ACID가 중요한가요?

동시에 수많은 사용자가 데이터를 다루는 환경에서는 충돌, 중복, 유실 등 수많은 문제가 발생할 수 있다.
하지만 ACID 원칙이 지켜지면, 서비스는 예외 상황에도 데이터의 신뢰를 유지할 수 있다.

  • 쇼핑몰에서는 같은 상품을 두 번 결제하는 일이 없어야 한다.
  • 은행 앱에서는 돈이 사라지거나 두 번 이체되는 일이 없어야 한다.
  • 포털 게시판에서는 글을 수정하던 중 오류가 나도, 기존 글이 사라지면 안 된다.

이처럼 트랜잭션과 ACID는 보이지 않는 곳에서 우리의 데이터와 신뢰를 지키는 기본 장치이다.

마무리하며

ACID는 어렵고 기술적인 개념처럼 보이지만, 사실은 모든 서비스가 신뢰를 유지하기 위해 반드시 지켜야 하는 약속이다.

트랜잭션은 단순한 기능이 아니라, 데이터를 책임지는 철학이기도 하다.
이 약속이 지켜질 때, 우리는 안심하고 ‘송금하기’ 버튼을 누를 수 있다.