신뢰할 수 있는 지갑 전송 시스템 설계 및 ACID 보장 pt - 4 (Durability)

발행: (2026년 3월 29일 PM 06:26 GMT+9)
3 분 소요
원문: Dev.to

Source: Dev.to

내구성

내구성은 트랜잭션이 성공적으로 커밋된 후, 시스템 장애가 발생하더라도 그 변경 사항이 데이터베이스에 영구적으로 저장된다는 것을 보장합니다.

스키마

CREATE TABLE accounts (
  id SERIAL PRIMARY KEY,
  name TEXT NOT NULL,
  balance INT NOT NULL CHECK (balance >= 0),
  last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

샘플 데이터

INSERT INTO accounts (name, balance)
VALUES ('Alice', 1000), ('Bob', 500);

초기 잔액: Alice = 1000, Bob = 500.

트랜잭션 테스트

BEGIN;

UPDATE accounts
SET balance = balance - 200
WHERE name = 'Alice';

COMMIT;

COMMIT 후, Alice의 잔액은 800이 되며 변경 사항이 영구적으로 저장됩니다.

내구성 검증

  1. 커밋 직후에 충돌을 시뮬레이션합니다.
  2. 데이터베이스를 재시작합니다.
  3. Alice의 잔액을 조회합니다; 여전히 800이어야 합니다.

커밋된 데이터가 재시작 후에도 유지된다면 내구성이 확인된 것입니다.

내구성을 달성하는 방법

  • Write‑Ahead Logging (WAL) 은 데이터 파일에 적용되기 전에 변경 사항을 기록합니다.
  • 디스크 저장 은 로그와 데이터 페이지가 안정적인 매체에 플러시되도록 보장합니다.
  • 충돌 복구 는 시작 시 WAL을 처리하여 아직 디스크에 반영되지 않은 커밋된 트랜잭션을 다시 수행합니다.

이러한 메커니즘은 트랜잭션이 커밋된 후 그 효과가 이후의 어떤 장애에도 살아남도록 보장합니다.

0 조회
Back to Blog

관련 글

더 보기 »

CA 36 – 격리 (ACID)

시나리오 이 실험은 두 세션이 동일한 계좌에 동시에 작업하려 할 때 ACID의 Isolation 특성이 어떻게 작동하는지를 보여줍니다. 단계 세션...

내구성

Durability는 트랜잭션이 성공적으로 커밋되면 그 변경 사항이 데이터베이스에 영구적으로 저장된다는 것을 의미합니다. 시스템이 충돌하거나 …

멱등성 상황

데이터베이스 트랜잭션을 활용한 신뢰할 수 있는 금전 이체 보장 디지털 월렛 시스템(PhonePe, Google Pay, Paytm 등)에서 사용자는 자신의 돈이…