본문 바로가기
카테고리 없음

트랜잭션이란? 이를 제어하는 TCL?

by moment-love 2025. 1. 24.

 

 

트랜잭션이란?

트랜잭션(Transaction)이란
데이터베이스에서 하나의 논리적인 작업 단위를 말합니다.
트랜잭션은 여러 작업을 하나로 묶어 일괄적으로 처리하며,
데이터의 일관성, 안정성, 무결성을 보장하기 위해 사용됩니다.

 

 

 

트랜잭션은 성공적으로 실행되면 모든 작업을 영구적으로 반영하고,

실패하면 모든 작업을 취소하여 데이터베이스를 원래 상태로 복구합니다.

 


 

1. 트랜잭션의 예시

 

트랜잭션은 주로 금융 시스템, 전자상거래, 물류 시스템 등에서 사용됩니다

 

예를 들어, 은행에서 계좌 이체를 처리하는 경우를 생각해 봅시다.

 

  1. 계좌 A에서 1,000원을 차감

  2. 계좌 B에 1,000원을 추가


위 두 작업은 하나의 트랜잭션으로 묶입니다.


만약 1번 작업은 성공했지만 2번 작업이 실패한다면,

계좌 A에서 차감된 금액을 복구해야만 데이터베이스의 일관성을 유지할 수 있습니다.

이처럼 트랜잭션은 이러한 작업을 원자적으로 처리하여 데이터의 신뢰성을 보장합니다.

 


2. 트랜잭션의 특징 (ACID 속성)

 

트랜잭션은 데이터의 무결성을 유지하기 위해
ACID라는 네 가지 속성을 갖습니다.

 

 

2-1. Atomicity (원자성)

  • 트랜잭션은 모든 작업이 성공하거나, 전혀 실행되지 않아야 합니다.

  • 트랜잭션 내의 일부 작업만 성공하거나, 일부 작업만 실패하는 상황은 허용되지 않습니다.

  • 예 : 계좌 A에서 돈을 차감했지만, 계좌 B에 추가하지 못했다면, 트랜잭션 전체를 취소해야 합니다.


2-2. Consistency (일관성)

  • 트랜잭션이 실행되기 전과 후의 데이터베이스 상태는 항상 일관성을 유지해야 합니다.

  • 트랜잭션 도중 데이터베이스가 불완전한 상태가 되더라도, 최종적으로는 규칙을 준수하는 상태로 복구됩니다.

  • 예 : 은행 시스템에서 계좌 간의 금액 합계는 트랜잭션 전후에 동일해야 합니다.

2-3. Isolation (격리성)

  • 하나의 트랜잭션이 실행되는 동안, 다른 트랜잭션이 해당 작업에 간섭할 수 없습니다.

  • 동시 실행되는 트랜잭션은 서로 독립적으로 수행됩니다.

  • 예 : A 계좌에서 B 계좌로 돈을 이체하는 트랜잭션과 동시에
    • 다른 트랜잭션이 A 계좌의 잔고를 읽는다면, 변경이 완료된 후의 결과만 읽을 수 있습니다.

2-4. Durability (지속성)

  • 트랜잭션이 성공적으로 완료되면, 변경 사항은 영구적으로 저장됩니다.

  • 데이터베이스에 장애가 발생하더라도, 완료된 트랜잭션의 결과는 사라지지 않습니다.

  • 예 : 은행 이체 작업이 완료된 후, 서버가 다운되더라도 계좌 간의 금액 변경은 유지됩니다.

 


TCL(Transaction Control Language) : 트랜잭션 제어어

 

 

 

데이터베이스를 다룰 때, 데이터의 일관성과 신뢰성을 유지하는 것은 매우 중요합니다.
이러한 데이터의 일관성을 보장하기 위해 사용되는 것이
TCL(Transaction Control Language)입니다.

 

TCL은 데이터베이스에서 트랜잭션을 관리하고 제어하기 위한 명령어 집합으로,

트랜잭션의 시작과 종료를 다루며 데이터의 무결성을 유지합니다.

 

위의 트랜잭션 개념을 바탕으로 이를 제어하는 TCL의 주요 명령어와 그 역할을 자세히 살펴보겠습니다.


1. TCL의 주요 명령어

 

TCL은 데이터베이스 트랜잭션을 관리하는 데 사용되며,
주요 명령어로는
COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION이 있습니다.

 

 

 

1-1. COMMIT
  • 데이터베이스 트랜잭션을 "확정"하는 명령어입니다.

  • COMMIT을 실행하면 트랜잭션에서 실행된 모든 변경 사항이 영구적으로 저장되며,
    • 다른 사용자도 해당 변경 사항을 확인할 수 있습니다.
INSERT INTO Orders (OrderID, ProductName) VALUES (1, 'Laptop');

COMMIT;
  • 위 명령어는 데이터를 삽입한 후, COMMIT을 통해 변경 사항을 확정합니다.

 


 

1-2. ROLLBACK
  • 트랜잭션에서 발생한 모든 변경 사항을 취소합니다.

  • 트랜잭션이 정상적으로 완료되지 않거나 오류가 발생했을 경우,
    • 데이터를 이전 상태로 되돌리기 위해 사용됩니다.
INSERT INTO Orders (OrderID, ProductName) VALUES (2, 'Tablet'); 

ROLLBACK;
  • ROLLBACK을 실행하면 삽입된 데이터는 삭제되고, 데이터베이스는 이전 상태로 복구됩니다.

 

 


 

1-3. SAVEPOINT
  • 트랜잭션 내에서 특정 지점을 저장합니다.

  • SAVEPOINT를 설정하면, 트랜잭션을 완전히 취소하지 않고 특정 지점으로 ROLLBACK을 수행할 수 있습니다.
SAVEPOINT Save1; 

INSERT INTO Orders (OrderID, ProductName) VALUES (3, 'Smartphone'); 

ROLLBACK TO Save1;
  • ROLLBACK TO Save1을 실행하면 SAVEPOINT 이후의 변경 사항만 취소됩니다.

 


 

 

1-4. SET TRANSACTION
  • 트랜잭션의 속성을 설정합니다.

  • 예를 들어, 트랜잭션의 격리 수준(isolation level)을 설정하여 다른 트랜잭션과의 데이터 충돌을 방지할 수 있습니다

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

 

 


3. TCL의 활용 사례

 

TCL은 아래와 같은 상황에서 주로 활용됩니다.

 

  1. 은행 시스템 : 이체 작업 중 오류가 발생하면, ROLLBACK을 사용하여 이전 상태로 복구합니다.

  2. 전자상거래 : 상품 주문 처리 중 문제가 발생하면 트랜잭션을 취소하여 데이터 무결성을 유지합니다.

  3. 대규모 데이터 처리 : SAVEPOINT를 통해 변경 사항을 단계별로 저장하고, 필요시 특정 지점으로 롤백합니다.

결론 : 트랜잭션의 개념을 이해하고 이를 TCL로 제어해 보기

 

TCL(Transaction Control Language)은 데이터베이스에서

트랜잭션의 시작과 종료를 제어하여

데이터 무결성과 일관성을 유지하는 데 중요한 역할을 합니다.

 

COMMIT으로 트랜잭션을 확정하거나 ROLLBACK으로 취소하며,

SAVEPOINT로 특정 지점을 저장하는 등 다양한 명령어를 제공합니다.

 

트랜잭션의 ACID 특성을 이해하고 적절히 활용하면 데이터베이스 작업의 신뢰성과 안정성을 높일 수 있습니다.

반응형