백엔드

트랜잭션이란 무엇이고, ACID는 무엇인가요?

Newbie Developer 2025. 5. 6. 13:26

데이터베이스나 분산 시스템을 다루는 개발자라면 번쯤은 들어봤을 용어가 있습니다. 바로 트랜잭션(Transaction)ACID입니다. 글에서는 트랜잭션이 무엇인지, 그리고 트랜잭션을 안전하게 처리하기 위해 데이터베이스가 지켜야 ACID 특성에 대해 알아보겠습니다.



💡 트랜잭션(Transaction)이란?

트랜잭션은 하나의 작업 단위(Unit of Work)입니다. 여러 개의 작업을 하나로 묶어서 모두 성공하거나, 모두 실패해야만 하는 연산 단위를 의미합니다.

예를 들어 은행에서 A 계좌에서 B 계좌로 돈을 이체할 때,

  1. A 계좌의 잔액을 감소시키고
  2. B 계좌의 잔액을 증가시키는

작업은 하나의 트랜잭션입니다. 하나만 성공하고 다른 하나가 실패하면 데이터 일관성이 깨지기 때문이죠.

즉, 트랜잭션은 다음과 같은 역할을 합니다:

  • 정합성 유지: 실패 이전 상태로 되돌림(Rollback)
  • 동시성 제어: 여러 사용자/프로세스가 동시에 작업해도 안정성 보장

🧱 ACID란?

트랜잭션이 올바르게 처리되기 위해서는 데이터베이스 시스템이 ACID라는 가지 특성을 보장해야 합니다.

1. Atomicity (원자성)

트랜잭션의 작업들은 모두 성공하거나, 전부 실패해야 합니다. 중간에 일부 작업만 성공하는 일은 없습니다.

예: A → B 이체 A 계좌 차감 성공, B 계좌 입금 실패 → 전체 롤백

2. Consistency (일관성)

트랜잭션이 실행되기 전과 후에 데이터의 상태는 일관된 상태를 유지해야 합니다.

예: 계좌 이체 전후로 전체 계좌 잔액 총합은 같아야

3. Isolation (격리성)

여러 트랜잭션이 동시에 실행될 때, 서로 영향을 주지 않아야 합니다. 마치 순차적으로 실행된 것처럼 보여야 합니다.

예: 다른 사용자의 이체 작업이 작업에 간섭하지 않아야

4. Durability (지속성)

트랜잭션이 성공적으로 완료되면, 결과는 영구적으로 저장되어야 합니다. 시스템 장애가 발생해도 손실되지 않아야 하죠.

예: 이체 완료 서버가 꺼져도 입출금 내역은 유지


🛠 트랜잭션은 어디에 사용되나요?

트랜잭션은 다음과 같은 다양한 분야에서 사용됩니다:

  • 관계형 데이터베이스 (RDBMS): MySQL, PostgreSQL, Oracle
  • NoSQL DB 일부: MongoDB, Redis에서도 트랜잭션 지원
  • 분산 시스템: Kafka, RabbitMQ 등의 메시지 처리에서도 트랜잭션 유사 개념 존재
  • 애플리케이션 레벨 트랜잭션 관리: Spring, Java EE, NestJS 프레임워크에서도 트랜잭션 처리 지원

정리하며

용어 의미 요약
트랜잭션 여러 작업을 하나로 묶어 모두 성공하거나 실패하게 처리하는 연산 단위
ACID 트랜잭션의 안전성과 일관성을 보장하기 위한 4가지 속성 (Atomicity, Consistency, Isolation, Durability)
 

트랜잭션과 ACID안정적인 시스템 개발을 위한 기본 개념입니다. 특히, 데이터 무결성과 신뢰성이 중요한 시스템구축할 반드시 이해하고 있어야 필수 요소이죠.