트랜잭션(transaction)은 데이터베이스 조작 작업들을 하나의 논리적인 작업 단위로 묶어 순차적으로 수행하는 것을 의미합니다. 즉, 트랜잭션에 포함된 모든 개별 연산이 성공해야만 트랜잭션이 완전히 완료되며, 그중 하나라도 실패하면 전체 트랜잭션이 실패로 처리됩니다. 실무에서는 여러 개의 SQL 쿼리를 하나의 그룹으로 묶어 트랜잭션의 일부로 함께 실행할 수 있습니다.
트랜잭션의 4가지 핵심 속성 (ACID)
트랜잭션은 일반적으로 ACID라는 약어로 불리는 네 가지 표준 속성을 가집니다.
1. 원자성 (Atomicity)
작업 단위 내의 모든 연산이 반드시 성공적으로 완료되어야 함을 보장합니다. 만약 중간에 오류가 발생하면 트랜잭션은 해당 지점에서 중단되며, 이전에 수행된 연산들은 모두 원래 상태로 롤백(Rollback)됩니다.
2. 일관성 (Consistency)
트랜잭션이 성공적으로 커밋(Commit)되면 데이터베이스가 올바른 상태로 전환됨을 보장합니다. 트랜잭션 수행 전후로 데이터의 무결성과 제약 조건이 항상 유지됩니다.
3. 격리성 (Isolation)
여러 트랜잭션이 서로 독립적으로 실행되도록 하며, 동시에 수행되더라도 각 트랜잭션은 다른 트랜잭션의 중간 상태에 영향을 받거나 노출되지 않고 투명하게 동작합니다.
4. 지속성 (Durability)
한 번 커밋된 트랜잭션의 결과나 효과는 시스템 장애가 발생하더라도 손실 없이 영구적으로 저장·유지됨을 보장합니다.
MySQL에서의 트랜잭션 사용 예시
MySQL에서 트랜잭션은 기본적으로 InnoDB 스토리지 엔진에서 지원됩니다(MyISAM은 트랜잭션을 지원하지 않음). 대표적인 계좌 이체 예시는 다음과 같습니다.
START TRANSACTION;
UPDATE accounts SET balance = balance - 10000 WHERE id = 'A';
UPDATE accounts SET balance = balance + 10000 WHERE id = 'B';
COMMIT;위 예시에서 출금과 입금 두 연산은 하나의 트랜잭션으로 묶여 있습니다. 만약 입금 처리 중 오류가 발생하면 ROLLBACK;을 실행하여 출금까지 포함한 모든 변경 사항을 되돌릴 수 있습니다. 이처럼 트랜잭션은 금융 시스템처럼 데이터 정합성이 중요한 환경에서 필수적인 기능입니다.