> ## Documentation Index
> Fetch the complete documentation index at: https://docs.casebender.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 스토리지 백업 및 복원

> PostgreSQL과 정확한 객체 버전을 하나의 일관성 집합으로 보호합니다

CaseBender 복구 지점은 PostgreSQL과 참조된 모든 정확한 객체 버전,
구성, 암호화 키입니다. 데이터베이스 덤프나 버킷 복사만으로는 유효한
복구 집합이 아닙니다.

## 복구 집합 내용

* PostgreSQL 스냅샷/덤프와 마이그레이션 식별자;
* 기록된 `profileKey`, `objectKey`, `providerVersion`의 삭제되지
  않은 확정된 모든 `StoredObject`;
* 각 객체의 SHA-256과 크기;
* 백업 프로필, 백업 객체 키, 정확한 백업 버전;
* 스토리지/아이덴티티/CA 구성 버전;
* 필드, 자격 증명, 감사 무결성, 인증, 서명 키;
* 불변 CaseBender 이미지 다이제스트와 릴리스 매니페스트; 그리고
* 타임스탬프, 승인, 도구 버전, 측정된 RPO/RTO, 증거 다이제스트.

집합을 암호화하고, 액세스를 제한하며, 기본 장애 도메인과 독립적으로
저장하세요. 백업 로그에 자격 증명이나 객체 내용을 쓰지 마세요.

## 일관성 지점 캡처

사용자/통합 쓰기를 정지하거나, 동등한 일관성 경계를 보장하는
제공자/데이터베이스 스냅샷 방법을 사용하세요. 워커를 드레인하거나
내구성 있게 일시 중지하세요. 재개하기 전에 PostgreSQL 스냅샷/LSN과
정확한 객체 버전을 기록하세요.

객체 인벤토리를 생성하세요.

```bash theme={null}
pnpm storage:backup-verify inventory \
  --output '<protected-manifest.json>'
chmod 600 '<protected-manifest.json>'
```

이 명령은 직렬화 가능 데이터베이스 트랜잭션을 실행하고, 정확한
버전, SHA-256, 크기 메타데이터가 없는 객체를 거부합니다. 바이트를
복사하지 않습니다. 승인된 백업 프로세스가 모든 매니페스트 항목에
대해 `backupProfileKey`, `backupObjectKey`, `backupVersionId`를
채워야 합니다.

완료된 매니페스트를 해시하고 보호하세요.

```bash theme={null}
sha256sum '<protected-manifest.json>' \
  > '<protected-manifest.json>.sha256'
```

## 복사 정책

먼저 복사하고 원본을 유지하세요. 파괴적인 동기화 작업을 첫 번째
백업 또는 마이그레이션 단계로 사용하지 마세요. 바이트를 다운로드하고
SHA-256을 계산하여 검증하세요. ETag에 의존하지 마세요.

필요한 모든 과거 버전과 보존/홀드 상태를 유지하세요. 일반 객체
복사는 제공자별 ACL, CMEK, Object Lock, 불변성, 법적 홀드,
이벤트 기반 홀드, 메타데이터, 버전 이력을 보존하지 않을 수
있습니다. 대상에서 해당 제어를 증명하고 재현하세요.

## 격리된 복원 검증

동일한 호환 CaseBender 릴리스를 사용하여 격리된 환경에
PostgreSQL을 복원하세요. 매니페스트의 데이터베이스 마이그레이션과
저장 객체 메타데이터가 일치하는지 확인한 다음, 전용 검증 접두사로
객체를 복원하세요.

```bash theme={null}
pnpm storage:backup-verify verify-restore \
  --manifest '<protected-manifest.json>' \
  --target-profile '<isolated-restore-profile>' \
  --isolated-prefix 'tenants/<test-tenant>/restore-verification/<exercise-id>' \
  --evidence-output '<sanitized-restore-evidence.json>'
```

스크립트는 각 정확한 백업 버전을 읽고, 크기와 SHA-256을 검증하고,
격리된 대상에 업로드하고, 다운로드한 뒤 SHA-256을 다시 검증합니다.
증거 파일을 모드 `0600`으로 씁니다. 증거 검토 후 승인된 보존 인지
프로세스를 통해 격리된 접두사를 정리하세요.

그런 다음 로그인, 조직, 케이스, 증거, 첨부, 내보내기, 스캐너
상태, 보존, 법적 홀드, 감사 체인 무결성, 권한 부여를 검증하세요.
리허설을 프로덕션 통합에 연결하지 마세요.

## 제공자 주의 사항

### S3 및 Ceph RGW

버전 ID와 모든 delete marker를 캡처하세요. Object Lock은 버킷이
생성될 때 존재해야 하며 어댑터로부터 추론할 수 없습니다. 복사된
객체는 새 버전과 보존 상태를 받을 수 있습니다. 복원 중에 정확한
인증 제품 버전과 프라이빗 CA를 사용하세요.

### Google Cloud Storage

숫자 세대를 캡처하세요. 보존 정책 잠금, 객체 보존, 이벤트 기반
홀드, CMEK 액세스, 균일 버킷 액세스, 공개 액세스 방지를
검증하세요. 다른 버킷으로 복사하면 generation 번호가 변경됩니다.

### Azure Blob Storage

blob 버전 ID를 캡처하세요. 보안 전송, 계정/컨테이너 버전 관리,
암호화 키, 불변성 정책, 법적 홀드를 검증하세요. 복원된 버전은
대상별 ID를 받습니다.

### 로컬 또는 레거시 MinIO

로컬 스토리지는 프로덕션 대상이 아닙니다. 마이그레이션 중에
레거시 MinIO 볼륨 스냅샷과 API 수준 정확한 객체 내보내기를 모두
보존하세요. MinIO의 내부 레이아웃을 일반 파일로 가져오지 마세요.

## RPO 및 RTO 증거

다음을 기록하세요.

* 마지막으로 포함된 데이터베이스 트랜잭션과 객체 버전;
* 첫 번째로 제외된 트랜잭션;
* 백업 기간, 복원 기간, 검증 기간, 서비스 재개 시각;
* 실제 데이터 손실 간격(RPO)과 복구 기간(RTO);
* 누락, 변경, 읽을 수 없음, 홀드됨, 또는 정책으로 차단된 객체;
  그리고
* 롤백 연습 결과.

정책 목표는 증거가 아닙니다. 지원되는 모든 릴리스 트레인과
중대한 스토리지 변경 후에 측정된 결과를 보관하세요.

전환과 롤백은 [스토리지 마이그레이션](/ko/deployment/storage-migration-runbook)을,
더 넓은 설치 복구 집합은 [백업 및 복구](/en/deployment/recovery)를
참고하세요.
