트랜잭션, transaction, 데이터베이스 트랜잭션 은 데이터베이스에서 수행되는 작업의 논리적인 단위입니다. 여러 개의 SQL 명령문을 하나의 트랜잭션으로 묶으면, 트랜잭션의 ACID 속성을 통해 데이터의 안전하고 일관된 처리를 보장할 수 있습니다. 트랜잭션 정의 및 예제를 알기 쉽게 알려드립니다.
트랜잭션, transaction, 데이터베이스 트랜잭션
트랜잭션, transaction, 데이터베이스 트랜잭션 이란 데이터베이스의 일관성을 유지하기 위한 작업 단위입니다. 트랜잭션은 원자성, 일관성, 고립성, 지속성을 가지고 있습니다.
트랜잭션 정의
트랜잭션은 데이터베이스에서 수행되는 작업의 논리적인 단위로, 여러 개의 SQL 명령문으로 구성됩니다. 이러한 작업은 원자성 Atomicity, 일관성 Consistency, 고립성 Isolation, 그리고 지속성 Durability 이라는 ACID 속성을 따릅니다.
- 원자성, Atomicity, 트랜잭션은 모든 작업이 성공하거나 실패할 때까지 아무 작업도 수행되지 않거나 수행된 작업들이 모두 롤백됨을 보장합니다.
- 일관성, Consistency, 트랜잭션이 완료된 후에는 데이터베이스가 일관된 상태로 유지되어야 합니다. 즉, 트랜잭션이 수행되기 전과 후의 데이터베이스 상태가 일관성을 유지해야 합니다.
- 고립성, Isolation, 여러 트랜잭션이 동시에 실행될 때, 각 트랜잭션은 다른 트랜잭션에 영향을 받지 않고 독립적으로 실행되어야 합니다.
- 지속성, Durability, 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 유지되어야 합니다. 시스템 장애 또는 기타 문제가 발생해도 데이터는 유지되어야 합니다.
트랜잭션 예제 코드
예제 1 은행에 예금을 입금하는 트랜잭션
BEGIN TRANSACTION;
— 사용자 계좌 잔액 업데이트
UPDATE 계좌 SET 잔액 = 잔액 + @입금액 WHERE 계좌번호 = @계좌번호;
— 입금 기록 로그 작성
INSERT INTO 거래내역 계좌번호, 거래유형, 금액 VALUES @계좌번호, ‘입금’, @입금액 ;
COMMIT; — 트랜잭션 커밋
예제 2 A 계좌에서 B 계좌로 이체하는 트랜잭션
BEGIN TRANSACTION;
— A 계좌 잔액 확인
DECLARE @A_현재잔액 INT;
SELECT @A_현재잔액 = 잔액 FROM 계좌 WHERE 계좌번호 = @A_계좌번호;
— 이체 가능 여부 확인
IF @A_현재잔액 >= @이체금액
BEGIN
— A 계좌 잔액 업데이트
UPDATE 계좌 SET 잔액 = 잔액 – @이체금액 WHERE 계좌번호 = @A_계좌번호;
— B 계좌 잔액 업데이트
UPDATE 계좌 SET 잔액 = 잔액 + @이체금액 WHERE 계좌번호 = @B_계좌번호;
— 이체 기록 로그 작성
INSERT INTO 거래내역 계좌번호, 거래유형, 금액 VALUES @A_계좌번호, ‘이체’, @이체금액 ;
INSERT INTO 거래내역 계좌번호, 거래유형, 금액 VALUES @B_계좌번호, ‘입금’, @이체금액 ;
COMMIT; — 트랜잭션 커밋
END
ELSE
BEGIN
ROLLBACK; — 잔액 부족으로 인한 롤백
END;
결론
MSSQL에서의 트랜잭션은 데이터의 안전하고 일관된 처리를 보장하기 위한 필수적인 메커니즘입니다. 은행 거래와 같이 금융 시스템에서는 트랜잭션의 ACID 속성을 준수하여 데이터의 무결성을 보장하는 것이 매우 중요합니다. 신입사원은 트랜잭션의 개념과 구현 방법을 정확히 이해하고, 안전한 데이터베이스 처리를 위해 항상 ACID 원칙을 따르도록 주의해야 합니다.