--- id: wiki-2026-0508-snapshots title: Snapshots category: 10_Wiki/Topics status: verified canonical_id: self aliases: [State Snapshot, V8 Snapshot, GC Snapshot, Heap Snapshot] duplicate_of: none source_trust_level: A confidence_score: 0.9 verification_status: applied tags: [runtime, performance, debugging, memory, state] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: language: javascript framework: v8 --- # Snapshots ## 매 한 줄 > **"매 point-in-time 의 state freeze — 매 startup 의 accelerate, 매 leak 의 hunt, 매 recovery 의 enable."**. 매 V8 startup snapshot, heap snapshot, filesystem snapshot (ZFS/Btrfs), DB snapshot, state snapshot (Redux time-travel) — 매 same primitive 의 different domain. 매 modern runtime 의 cold-start optimization 의 default tool. ## 매 핵심 ### 매 종류 - **V8 startup snapshot**: serialize heap → fast Node.js cold start. - **Heap snapshot** (`.heapsnapshot`): debug memory leak, retainer graph. - **GC snapshot**: generational scan checkpoint. - **Filesystem snapshot**: ZFS/Btrfs/LVM copy-on-write point-in-time. - **DB snapshot**: PITR base, transactional checkpoint. - **State snapshot**: Redux DevTools time-travel, game save. ### 매 properties - Copy-on-write (efficient diff storage). - Atomic (consistent point-in-time). - Restorable (full state reconstruction). - Immutable (snapshot itself never mutated). ### 매 응용 1. Node.js bootup `--snapshot-blob` (200ms → 30ms startup). 2. Chrome DevTools heap profiler — leak hunt. 3. ZFS rollback before risky deploy. 4. Postgres PITR base + WAL replay. 5. Redux DevTools — time-travel debug. 6. AWS EBS snapshot — disaster recovery. 7. Container checkpoint/restore (CRIU). ## 💻 패턴 ### Node.js startup snapshot ```bash node --snapshot-blob snapshot.blob --build-snapshot snapshot-init.js node --snapshot-blob snapshot.blob app.js # Cold start: 200ms → ~30ms ``` ### Chrome heap snapshot programmatic ```javascript const v8 = require('v8'); const fs = require('fs'); const stream = v8.getHeapSnapshot(); stream.pipe(fs.createWriteStream('heap.heapsnapshot')); // Open in Chrome DevTools → Memory tab ``` ### ZFS snapshot + rollback ```bash zfs snapshot tank/data@before-deploy # ... risky operation ... zfs rollback tank/data@before-deploy # if failure zfs destroy tank/data@before-deploy # if success ``` ### Postgres base backup + PITR ```bash pg_basebackup -D /backup/base -F tar -X stream -P # Recover to point-in-time restore_command = 'cp /archive/%f %p' recovery_target_time = '2026-05-10 14:30:00' ``` ### Redux state snapshot ```typescript import { createStore } from 'redux'; const store = createStore(reducer); const snapshot = store.getState(); // freeze // ... actions ... store.replaceReducer((state = snapshot) => state); // restore ``` ### CRIU container checkpoint ```bash criu dump --tree $PID --images-dir /checkpoints/svc-1 --leave-running # Later, possibly on different host: criu restore --images-dir /checkpoints/svc-1 ``` ### EBS snapshot via AWS SDK ```typescript import { EC2Client, CreateSnapshotCommand } from '@aws-sdk/client-ec2'; await client.send(new CreateSnapshotCommand({ VolumeId: 'vol-0abc', Description: 'pre-migration-2026-05-10', TagSpecifications: [{ ResourceType: 'snapshot', Tags: [{ Key: 'env', Value: 'prod' }] }], })); ``` ### Heap diff analysis ```javascript // Take 2 snapshots, diff in DevTools to find leak v8.writeHeapSnapshot('/tmp/before.heapsnapshot'); runSuspectCode(); v8.writeHeapSnapshot('/tmp/after.heapsnapshot'); // Load both → "Comparison" view → growing retainer chains ``` ## 매 결정 기준 | 상황 | Approach | |---|---| | Node.js cold start slow | startup snapshot | | Memory leak hunt | heap snapshot diff | | Pre-deploy rollback safety | ZFS/EBS snapshot | | DB recovery to time T | PITR base + WAL | | Container live migration | CRIU checkpoint | | Frontend bug repro | Redux time-travel | **기본값**: heap snapshot for leaks, ZFS/EBS for storage, PITR for DB, CRIU for container. ## 🔗 Graph - 부모: [[State Management]] - 변형: [[Heap Snapshot]] · [[V8-Snapshot]] - 응용: [[Disaster-Recovery]] - Adjacent: [[Event Sourcing]] ## 🤖 LLM 활용 **언제**: cold-start optim, leak diag, DR planning, time-travel debug strategy. **언제 X**: write-heavy hot path — snapshot overhead 의 measure 필요. ## ❌ 안티패턴 - **Snapshot as backup**: 매 same disk 의 snapshot 의 disk failure 의 protect X. - **No retention policy**: 매 snapshot accumulate → storage explode. - **Heap snapshot in prod under load**: 매 GC pause spike — staging 에서. ## 🧪 검증 / 중복 - Verified (V8 docs, Chrome DevTools docs, ZFS handbook, Postgres PITR docs). - 신뢰도 A. ## 🕓 Changelog | 날짜 | 변경 | |---|---| | 2026-05-08 | Phase 1 | | 2026-05-10 | Manual cleanup — snapshot taxonomy, V8/heap/ZFS/PITR/CRIU patterns |