공든탑앱 열기

트랜잭션과 동시성 제어

정보처리기사 · SQL 응용 · 약 14분

쉽게 말하면

트랜잭션은 '모두 되거나, 하나도 안 되거나' 해야 하는 작업 묶음이에요. 계좌 이체에서 내 돈은 빠졌는데 상대 계좌에 안 들어가면 큰일이잖아요. 그래서 트랜잭션은 네 가지 성질(ACID)을 지켜요. 또 여러 사람이 같은 데이터를 동시에 고치면 꼬이니까, 순서를 정리하는 병행 제어가 필요해요. 대표 방법이 데이터에 자물쇠를 거는 로킹이에요.

시험용 정의

트랜잭션은 데이터베이스의 상태를 바꾸는 하나의 논리적 작업 단위다. 특성 ACID: 원자성(Atomicity, 전부 또는 전무), 일관성(Consistency, 실행 후에도 일관된 상태), 독립성·격리성(Isolation, 실행 중인 트랜잭션에 다른 트랜잭션이 끼어들 수 없음), 영속성·지속성(Durability, 완료된 결과는 영구 반영). 상태는 활동 → 부분 완료 → 완료, 실패 시 실패 → 철회다. 회복은 장애 시 이전 상태로 되돌리는 것으로 로그를 이용한 REDO(재실행)와 UNDO(취소), 즉시 갱신, 지연 갱신, 검사점(Checkpoint), 그림자 페이징이 있다. 병행 제어는 동시에 실행되는 트랜잭션이 일관성을 해치지 않게 하는 것으로 로킹, 2단계 로킹(확장 → 축소), 타임스탬프 순서, 낙관적 검증, 다중 버전 기법이 있다.

비유로 이해하기

은행 창구 이체다. 출금과 입금은 한 묶음이라 하나만 되면 안 된다(원자성). 내가 이체하는 동안 다른 창구가 같은 통장을 건드리지 못하게 통장에 자물쇠를 건다(로킹).

자세히

먼저 알아 둘 말

말뜻
로그트랜잭션이 바꾼 내용의 이전 값·이후 값을 적어 둔 기록
REDO / UNDO로그로 완료된 작업을 다시 실행 / 미완료 작업을 취소
검사점회복할 때 로그를 처음부터 다 보지 않도록 표시해 둔 지점
로킹데이터에 잠금을 걸어 다른 트랜잭션이 접근하지 못하게 하는 기법
로킹 단위잠금을 거는 데이터 크기 (DB, 테이블, 행, 필드)

ACID

성질뜻보장 수단
원자성 (A)모두 반영 또는 전혀 반영 안 됨COMMIT·ROLLBACK, 회복 기법
일관성 (C)실행 전후 모두 일관된 상태무결성 제약
독립성 (I)다른 트랜잭션이 중간 결과를 볼 수 없음병행 제어
영속성 (D)완료한 결과는 장애가 나도 유지회복 기법

트랜잭션 상태

상태뜻
활동 (Active)실행 중
부분 완료 (Partially Committed)마지막 연산까지 실행했지만 COMMIT 전
완료 (Committed)COMMIT으로 성공적으로 끝남
실패 (Failed)오류로 더 진행할 수 없음
철회 (Aborted)ROLLBACK으로 실행 전 상태로 되돌림

로킹 단위와 병행성

로킹 단위가 크면 잠금 수가 적어 관리가 쉽지만 병행성은 낮아진다. 단위가 작으면 관리가 복잡하고 오버헤드가 크지만 병행성은 높아진다.

2단계 로킹: 잠금만 하는 확장 단계, 해제만 하는 축소 단계로 나눠 직렬 가능성을 보장한다. 교착 상태는 생길 수 있다.

병행 제어가 없을 때 문제

문제뜻
갱신 분실 (Lost Update)두 트랜잭션이 같은 값을 고쳐 한쪽 변경이 사라짐
모순성 (Inconsistency)다른 트랜잭션이 고치는 중간 값을 읽어 불일치
연쇄 복귀 (Cascading Rollback)한 트랜잭션이 철회되며 그 값을 읽은 다른 트랜잭션도 철회
비완료 의존성완료되지 않은 트랜잭션의 결과를 다른 트랜잭션이 참조

시험에 이렇게 나와요

확인 문제

Q1. 트랜잭션의 연산은 모두 반영되거나 전혀 반영되지 않아야 한다는 성질은?

  1. 일관성
  2. 독립성
  3. 지속성
  4. 원자성
정답 보기

4번 원자성

원자성(Atomicity)은 All or Nothing. 중간에 실패하면 ROLLBACK으로 모두 취소한다.

Q2. 로킹 단위에 대한 설명으로 옳은 것은?

  1. 로킹 단위가 작으면 병행성이 높아지고 오버헤드가 커진다
  2. 로킹 단위는 데이터베이스 전체만 가능하다
  3. 로킹 단위가 크면 병행성이 높아진다
  4. 로킹 단위가 작으면 로크 수가 적어진다
정답 보기

1번 로킹 단위가 작으면 병행성이 높아지고 오버헤드가 커진다

작을수록 병행성↑, 관리 부담↑.

Q3. 트랜잭션이 마지막 연산까지 실행했지만 아직 COMMIT하기 전인 상태는?

  1. 활동
  2. 완료
  3. 철회
  4. 부분 완료
정답 보기

4번 부분 완료

Partially Committed.

Q4. 완료된 트랜잭션의 결과는 시스템 장애가 나도 영구히 반영되어야 한다는 성질은?

  1. 독립성
  2. 일관성
  3. 원자성
  4. 영속성
정답 보기

4번 영속성

영속성(Durability)이다. 원자성은 전부 되거나 전부 취소, 일관성은 규칙을 지킨 상태 유지, 독립성은 동시에 실행돼도 서로 간섭하지 않는 성질이다.

Q5. 장애 회복 기법이 아닌 것은?

  1. 즉시 갱신
  2. 2단계 로킹
  3. 지연 갱신
  4. 그림자 페이징
정답 보기

2번 2단계 로킹

2단계 로킹은 병행 제어 기법이다. 즉시 갱신·지연 갱신(로그 기반), 그림자 페이징은 장애 회복 기법이다.

헷갈리기 쉬운 O·X

독립성은 둘 이상의 트랜잭션이 동시에 실행될 때 서로의 중간 연산에 끼어들 수 없다는 성질이다.

정답 보기

O

REDO는 완료되지 않은 트랜잭션의 작업을 취소하는 것이다.

정답 보기

X 그건 UNDO. REDO는 완료된 작업을 다시 반영.

2단계 로킹은 교착 상태를 완전히 막아 준다.

정답 보기

X 직렬 가능성은 보장하지만 교착 상태는 생길 수 있다.

함께 보면 좋은 개념