CS (Computer Science)

[개발 공부 101일차] DB 개론 | 트랜잭션과 동시성

MOLLY_ 2024. 9. 23. 21:37
728x90

< 목차 >

0. TL;DR

1. 트랜잭션의 개념

2. 트랜잭션의 4가지 성질

3. 동시성

 

 

0. TL;DR

  1. 트랜잭션: DBMS에서 데이터를 다루는 ‘논리적 작업 단위’
  2. 트랜잭션의 4가지 성질: 원자성, 일관성, 고립성, 지속성
  3. 락(lock): 트랜잭션이 데이터를 읽거나 수정할 때 데이터에 표시하는 잠금장치

 

 

1. 트랜잭션의 개념

: DBMS에서 데이터를 다루는 ‘논리적 작업 단위’

 

  • 단일 SQL문을 사용하기도 하지만 여러 개의 SQL문을 순차적으로 수행하기도 함
  • 장애 시에 데이터를 복구(롤백)하는 단위가 되기도 함
  • DB에서 여러 작업이 같은 데이터를 동시에 다룰 때, 작업을 분리하는 단위가 되기도 함
  • 전체가 수행되거나 아예 수행되지 않아야 함 (all or nothing)
  • DB에 저장된 데이터를 다루고, DBMS에 의해 처리됨

 

BEGIN TRANSACTION // 트랜잭션의 시작
	A 계좌에서 10000을 인출 (UPDATE)
	B 계좌에서 10000을 입금 (UPDATE)
COMMIT TRANSACTION // 끝을 표시 (작업이 무사히 완료됨을 의미)

 

 

2. 트랜잭션의 4가지 성질

원자성 전부 수행되거나 수행되지 않음
일관성 수행 전 or 수행 후, 늘 일관된 상태 유지
고립성 수행 중에 다른 트랜잭션이 끼어들어, 변경 중인 데이터 값을 훼손하는 일이 없어야 함
지속성 성공적으로 완료한 데이터는 영구히 저장

 

 

(1) 원자성

: 트랜잭션이 원자처럼 더 이상 쪼개지지 않는 하나의 단위로 동작해야 함을 의미

  • 전부 수행하거나 전부 수행되지 않거나
  • BEGIN TRANSACTION, COMMIT TRANSACTION 명령어 사용
  • 중간에 작업을 멈추면, 회복(recovery) 알고리즘을 이용해 변경 내용 취소
  • 자의적으로 트랜잭션 취소하는 명령어: ROLLBACK

 

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

 

 

(2) 일관성

: 실행되는 과정에서는 일시적으로 일관성이 유지되지 않을 수 있지만, 모든 작업이 완료된 경우에는 일관성이 유지되어야 함

테이블이 생성될 때, CREATE문과 ALTER문의 무결성 제약 조건을 통해 명시한다.

 

 

(3) 고립성

: 동시에 수행되는 트랜잭션이 상호 존재를 모르고 독립적으로 수행되는 것

고립성(isolation) 유지를 위해 변경 중인 임시 데이터를 타 트랜잭션이 읽고 쓸 때 제어가 필요하다. (= isolation level)

 

 

(4) 지속성

: 트랜잭션이 정상적으로 완료 or 부분완료 한 데이터는 DBMS가 DB에 기록

 

 

DBMS 시스템은 작업한 내용을 로그에 기록하고,

문제 발생 시에 로그 파일을 이용해 복구 작업을 수행한다.

 

 

트랜잭션과 DBMS

 

 

3. 동시성

  • 동시성 제어: 일관성을 해치지 않도록 접근을 제어하는 것
  • 갱생 손실 문제: 2개의 트랜잭션이 1개의 데이터를 동시에 갱신할 때 발생 ⇒ 이를 해결하기 위해서 lock을 사용

 

 

락(lock)

: 트랜잭션이 데이터를 읽거나 수정할 때 데이터에 표시하는 잠금장치

 

동시 처리할 때, 순서를 제어하여 갱신손실 문제를 해결한다.

  • 공유락(shared lock): 읽기를 사용할 때 사용
  • 배타락(exclusive lock): 읽고, 쓰기를 할 때 사용

 

이러한 락의 규칙은 다음과 같다.

  1. 데이터에 락이 걸려있지 않으면 락 요청 가능
  2. 타 트랜잭션이 데이터 X를 읽기만 할 경우: LS(X, 공유락) 요청은 허용하고, LX(X, 배타락)은 허용 안 함
  3. 타 트랜잭션이 데이터 LS(X)를 획득한 경우: LS(X)의 요청은 허용, LX(X)는 허용 안 함
  4. 타 트랜잭션이 데이터 LX(X)를 획득한 경우: LS(X)와 LX(X) 모두 허용 안 함
  5. 트랜잭션이 락을 획득받지 못하면 대기 상태 유지

 

 

728x90