[DB] 지속성(Durability)DB2024. 12. 1. 16:41
Table of Contents
728x90
지속성(Durability)
지속성(Durability)이란 데이터베이스 시스템에서 트랜잭션이 성공적으로 커밋되었을 경우, 그 변경사항이 비휘발성(non-volatile) 저장소에 영구적으로 저장되어 시스템 장애가 발생하더라도 손실되지 않도록 보장하는 성질을 말함. 이는 데이터베이스의 ACID 속성 중 하나임.
지속성의 핵심 원칙
트랜잭션 커밋 이후:
- 트랜잭션이 커밋되면, 해당 변경사항은 반드시 디스크와 같은 비휘발성 저장소에 영구적으로 저장되어야 함.
- 예를 들어, 전자상거래에서 사용자가 결제를 완료(커밋)한 이후에는 시스템이 꺼지거나 문제가 발생하더라도 결제 내역이 보존되어야 함.
장애 복구 가능성:
- 장애 발생 시에도 트랜잭션의 커밋 상태는 항상 복구 가능해야 함.
지속성을 보장하기 위한 기술들
WAL (Write Ahead Log)
- 트랜잭션의 변경 내용을 데이터베이스에 적용하기 전에 로그 파일에 먼저 기록하는 방식.
- 장애가 발생하면 이 로그를 참조해 복구할 수 있음.
- 예: 노트에 메모한 내용을 기반으로 컴퓨터에 다시 작성할 수 있는 상황.
비동기 스냅샷(Asynchronous Snapshot)
- 특정 시점의 데이터를 스냅샷으로 저장.
- 스냅샷은 주기적으로 백업되므로 장애 발생 시 저장된 시점으로 복구 가능.
- 예: 게임 저장 기능. 게임을 플레이하던 중 시스템이 꺼져도 저장된 시점으로 돌아갈 수 있음.
AOF (Append Only File)
- 변경 사항을 삭제하지 않고, 계속해서 파일 끝에 추가(Append)하는 방식.
- 장애 발생 시 파일을 읽어서 마지막 상태를 복원 가능.
- 예: 일기를 매일 추가로 쓰는 것과 비슷.
OS 캐시
- 운영 체제가 제공하는 캐싱 메커니즘을 활용해 데이터를 쓰기 전용 버퍼에 임시 저장.
- 다만 OS 캐시를 사용하는 경우에도, 데이터가 영구 저장되었는지 확인을 위해 주기적으로
fsync
와 같은 명령을 사용함. - 예: 문서 작성 후 저장 버튼을 눌러야 파일이 디스크에 저장되는 것처럼 확인 작업이 필요함.
추가적인 고려 사항
- Durability는 성능과의 트레이드오프:
- 즉시 디스크에 기록하면 성능이 저하될 수 있으므로, 성능을 높이기 위해 버퍼를 사용하는 등 다양한 기법이 활용됨.
- 파일 시스템 및 하드웨어의 신뢰성:
- 내구성 있는 하드웨어와 안정적인 파일 시스템도 지속성을 보장하는 데 중요한 역할을 함.
쉬운 예시로 이해하기
- 노트에 기록하기:
친구에게 빌려준 돈을 기억하기 위해 종이에 적는다고 가정.- 돈을 빌려줄 때 종이에 적으면 → Write Ahead Log.
- 매일 저녁 노트를 복사해 두는 것 → Snapshot.
- 기록을 수정하지 않고 계속 덧붙여 쓰는 것 → AOF.
- 기억만 해두고 저장하지 않는 경우 → OS 캐시(하지만 기억이 지워질 수 있음).
결론
지속성은 데이터베이스 시스템에서 트랜잭션의 신뢰성을 보장하기 위한 핵심 요소 중 하나임. 이를 보장하기 위해 다양한 기술들이 활용되며, 각 기술은 성능, 복구 시간, 저장 공간 등의 측면에서 차이를 가짐.
추천 해시태그
#Database #Durability #ACID #트랜잭션 #WAL #AOF #Snapshot #OSCache #DataPersistence #장애복구
'DB' 카테고리의 다른 글
[DB] 일관성(Consistency) (0) | 2024.12.01 |
---|---|
[DB] 고립성(Isolation) (0) | 2024.12.01 |
[DB] 원자성(Atomicity) (0) | 2024.11.27 |
[DB] 트랜잭션(Transaction) (0) | 2024.11.26 |
[DB] django 에서 다대다(Many-to-Many) 관계 예시 (1) | 2024.09.16 |
@mane Lab :: 마네의 연구소
배움에 즐거움을 느끼는 마네의 연구소입니다. 이미지 출처 : https://www.instagram.com/hoseobiiiiiii._.0410/
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!