image

트랜잭션의 ACID 속성 중 지속성(Durability)은 데이터베이스에 저장된 데이터의 영구성을 보장하는 특성이다. 시스템 장애나 전원 손실과 같은 예기치 않은 상황에서도 커밋된 트랜잭션의 결과가 영구적으로 보존되도록 보장한다.

지속성(Durability)이란?

지속성은 크게 두 가지 측면에서 의미를 가진다.

  1. 데이터의 영구 보존
    • 커밋된 트랜잭션의 결과가 비휘발성 저장소에 안전하게 저장
    • 시스템 장애나 전원 손실 후에도 데이터 보존 보장
  2. 복구 가능성
    • WAL(Write Ahead Log)을 통한 데이터 복구 메커니즘 제공
    • 시스템 장애 발생 시 데이터 일관성 유지

지속성의 작동 원리

기본 메커니즘

지속성은 다음과 같은 핵심 메커니즘을 통해 구현된다.

  • 트랜잭션 커밋
    • 변경 사항을 영구 저장소에 기록
    • 메모리 버퍼의 데이터를 디스크에 플러시
  • WAL(Write Ahead Log)
    • 변경 사항을 로그에 먼저 기록
    • 시스템 복구 시 참조 포인트로 활용
  • 스냅샷(Snapshot)
    • 주기적인 데이터베이스 상태 저장
    • 복구 시간 단축을 위한 체크포인트

데이터 지속성과 복구

주요 장애 상황과 그에 대한 대응 방식은 다음과 같다.

  • 시스템 장애 상황
    • 상황: 트랜잭션 커밋 후 시스템 충돌 발생
    • 해결: WAL을 통한 데이터 상태 복원
      • WAL의 마지막 체크포인트부터 순차적으로 변경 사항 재실행
      • 커밋되지 않은 트랜잭션은 롤백 처리
  • 전원 손실 상황
    • 상황: 갑작스러운 전원 공급 중단
      - 해결:
      • 비휘발성 저장소의 데이터 활용
      • WAL과 체크포인트를 조합한 복구 전략 실행

지속성 구현 기술

주요 구현 방식

  1. WAL(Write Ahead Log)
    • 변경 사항의 순차적 기록
    • 즉각적인 디스크 동기화
    • 빠른 복구 지원
  2. 스냅샷(Snapshot)
    • 주기적인 데이터베이스 전체 상태 저장
    • 복구 시간 단축을 위한 체크포인트 제공
  3. Fsync 활용
    • OS 캐시 우회
    • 직접적인 디스크 쓰기
    • 데이터 안정성 강화

성능과 트레이드오프

지속성 구현에는 다양한 트레이드오프가 존재한다.

성능 관련 고려사항

요소 높은 지속성 낮은 지속성
쓰기 속도 상대적으로 느림 상대적으로 빠름
리소스 사용 높음 낮음
데이터 안전 매우 안전 일부 위험 존재
복구 능력 완벽한 복구 가능 제한적인 복구 가능

구현 전략

  1. 강한 지속성
    • 모든 트랜잭션을 즉시 디스크에 동기화
    • 완벽한 데이터 보존 보장
    • 성능 저하 감수
  2. 유연한 지속성
    • 주기적인 체크포인트 활용
    • 일부 데이터 손실 허용
    • 성능 최적화 중시

마치며

데이터베이스 시스템에서 지속성은 데이터의 안정성과 신뢰성을 보장하는 핵심 요소다. 시스템의 요구사항과 특성에 따라 적절한 지속성 구현 전략을 선택해야 하며, 다음과 같은 요소들을 고려해야 한다.

  • 시스템의 성능 요구사항과 처리량
  • 허용 가능한 데이터 손실 허용 범위
  • 목표 복구 시간
  • 하드웨어 자원 가용성

결과적으로, 각 시스템에 맞는 최적의 지속성 구현 전략을 선택하는 것이 중요하다.

📝 Note

이 글은 Udemy의 【한글자막】 데이터베이스 엔지니어링 ( Database Engineering ) 마스터하기!강의를 토대로 공부한 내용을 정리한 것입니다.