IT 프로그래밍/데이터베이스

[데이터베이스] 트랜잭션과 개념

기술1 2025. 3. 30. 16:50

트랜잭션(Transaction)이란?

트랜잭션은 DBMS에서 데이터를 다루는 논리적 작업 단위입니다.
단일 SQL문일 수도 있고, 여러 개의 SQL문이 순차적으로 실행되는 복합적인 작업일 수도 있습니다.

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

  • 복구 단위: 오류 발생 시 이전 상태로 되돌릴 수 있음
  • 분리 단위: 여러 트랜잭션이 동시에 동일 데이터를 다룰 때 독립성 보장
  • 원자성 보장: 전체 작업이 전부 수행되거나 전혀 수행되지 않아야 함
BEGIN TRANSACTION
	A 계좌 10000 인출 (UPDATE)
    B 계좌 10000 입금 (UPDATE)
COMMIT TRANSACTION

시작과 끝을 말합니다. 

 

트랙잭션의 성질

  • 원자성 : 전부 수행되거나 수행되지 않아야 함
  • 일관성 : 수행 전이나 수행 후 일관된 상태 유지해야
  • 고립성 : 수행 중 다른 트랙잭션 끼어들면안됨
  • 지속성 : 성공적 완료한 데이터 영구 저장 

원자성

트랜잭션이 원자처럼 쪼개지 않는 하나의 단위로 동작을 해야합니다. 전부 수행하거나 전부 수행되지 않아야 하며 BEGIN TRANSACTION, COMMIT TRANSACTION 명령어를 사용합니다. 트랜잭션 중간에 작업을 멈취면 회복 알고리즘으로 변경 내용 취소, 자의적 트랜잭션 취소 명령은 ROLL BACK 사용 

 

명령어 문법 설명
BEGIN BEGIN {TRAN | TRANSACTION} 트랜잭션 시작 표시
COMMIT  COMMIT {TRAN | TRANSACTION} 트랜잭션 종료 표시
ROLLBACK ROLLBACK {TRAN | TRANSACTION} ]<savepoint>] 트랜잭션 전체 or 부분 취소
SAVE SAVE{TRAN | TRANSACTION} ]] 중간 저장 포인트 생성

일관성

테이블이 생성될 때 CREATE 문과 ALTER 문의 무결성 제약 조건을 통해 명시하며 트랜잭션은 조건에 따라 일관성이 유지됩니다. 

  • 수행중 일관성을 유지하는 못하는 상태가 될 수 있음
  • A계좌에서 B 계좌로 입금하는 중 총액 일시적 맞지 않음
  • 트랜잭션 완료되면 총 금액은 다시 맞음

고립성

데이터베이스는 공유가 목적이기에 여러 트랜잭션 동시에 수행합니다. 그리고동시에 수행되는 트랜잭션은 상호 존재를 모르고 독립적으로 수행하며 이를 고립성이라고 합니다.  고립성 유지 위해선 트랜잭션 변경 중인 임시 데이터를 다른 트랜잭션이 읽고 쓸 때 제어가 필요합니다. 

지속성

트랜잭션이 정상적 완료 혹은 부분완료한 데이터는 DBMS가 책임지고 데이터베이스에 기록하며 이를 지속성이라고 합니다. DBMS 시스템은 작업 내용을 로그에 기록, 문제 발생시 로그 파일 이용해 복구 작업을 수행합니다. 

 

트랜잭션과 DBMS

DBMS는 트랜잭션이 원자성, 일관성, 고립성, 지속성 유지할 수 있도록 지원합니다. DBMS는 일관성 유지 위해서 무결성 제약 조건을 활용하며 동시 두개의 트랜젝션 수행 때 무결성 제약조건으로 일관성이 깨지는 현상을 감지할 수 없습니다.

 

동시 접근에 대한 일관성 유지 위해 동시 제어 알고리즘을 사용합니다.

 

원자성 같은 경우 회복을 하기 위해 log 관련이 있고 일관성은 무결성과 동시성을 제어하면서 유지할 수 있으며 고립성또한 동시접근에 대한 것을 제거합니다. 지속성은 log즉 회복을 통해 동작이 되는 것을 알 수 있습니다. 

 

동시성

DBMS는 다수의 트랜잭션이 동시에 수행될 수 있도록 지원합니다. 하지만 이 과정에서 다음과 같은 문제가 발생할 수 있습니다:

  • 갱신 손실(Lost Update): 두 트랜잭션이 같은 데이터를 동시에 수정할 경우, 하나의 변경사항이 사라질 수 있음
  • 일관성 훼손: 여러 트랜잭션이 동시에 접근하면서 무결성 조건이 깨질 수 있음

🔒 락(Lock): 동시성 문제 해결 도구

락은 데이터에 접근하는 트랜잭션의 순서를 제어하여 충돌을 방지합니다.

종류설명
공유락 (Shared Lock, S-lock) 데이터를 읽을 때 사용하는 락. 다른 트랜잭션도 읽을 수 있지만, 쓰기는 막음
배타락 (Exclusive Lock, X-lock) 데이터를 읽고 쓸 때 사용하는 락. 다른 트랜잭션은 읽기도, 쓰기도 불가능

락의 기본 규칙

  • 데이터에 락이 없을 경우, 트랜잭션은 읽기(S락) 또는 쓰기(X락)를 요청할 수 있음
  • 읽기만 할 경우 → S락 요청
  • 읽기 + 쓰기 할 경우 → X락 요청
  • 락이 이미 걸려 있다면, 충돌 방지를 위해 락 해제까지 대기하거나 실패 처리