Summary#
Destructive maintenance tools의 dry-run impact report는 “실행 전에 보여주는 미리보기”가 아니라, 읽기 전용 계획 수립(read-only planning), 측정 가능한 변경 집합(measured change set), 불투명/바이너리 계획 산출물의 취급, rollback이 실패하거나 경계를 넘는 지점의 명시를 함께 다루는 안전 장치여야 한다.
공개 자료 기준으로 확인되는 공통 패턴은 다음과 같다.
rsync --dry-run은 실제 변경 없이 trial run을 수행하며,--itemize-changes와 함께 사용해 실제 실행 전 무엇이 바뀔지 확인하도록 설계되어 있다.- Terraform
plan은 변경을 실제 수행하지 않고 예정된 create/update/destroy/replace를 보여주며, 저장된 plan 파일은 apply에 사용할 수 있지만 opaque format이고 민감정보를 포함할 수 있다. - AWS Well-Architected Operational Excellence는 실패한 변경에 대해 rollback 또는 fix-forward 계획을 문서화하고, 변경 크기를 줄이며, 변경 데이터를 가시화하고, rollback 성공/실패 판단을 모니터링하라고 권고한다.
따라서 이 capsule의 핵심 주장은: destructive maintenance dry-run은 “would delete” 수준의 로그를 넘어, 적용 가능성·검토 가능성·민감 artifact 취급·rollback 한계까지 포함한 impact contract로 설계되어야 한다는 것이다.
Key Points#
- Dry-run은 read-only planning이어야 한다
- dry-run 단계에서는 실제 삭제, 이동, overwrite, state mutation, remote mutation을 수행하지 않아야 한다.
- 단, “실제 실행과 같은 판단 경로”를 최대한 통과해야 한다. 단순히 명령 문자열을 출력하는 수준이면 실제 permission, path expansion, symlink, mount boundary, remote drift, lock 상태를 놓칠 수 있다.
-
rsync문서도 dry-run을 실제 실행 전 trial run으로 설명하며, 특히--itemize-changes와 조합해 예정 작업을 확인하도록 한다. -
Impact report는 측정 가능한 change set이어야 한다
- 최소 필드:
- 대상 개수: files / dirs / resources / records
- 변경 유형: create, update, delete, replace, move, chmod, ownership change 등
- 총 바이트 또는 예상 저장공간 변화
- 삭제 후보와 제외 후보
- skip 사유
- permission 또는 lock 실패 가능성
- dry-run 시점의 기준 snapshot 또는 scan timestamp
- Terraform plan처럼 create/destroy/update/replace를 분류하면 reviewer가 위험도를 더 쉽게 판단할 수 있다.
-
rsync --itemize-changes의 의의는 dry-run 결과를 사람이 읽는 로그가 아니라 실제 change set에 가까운 형태로 만드는 데 있다. -
Dry-run 결과는 “실제 실행과 동일하다”가 아니라 “조건부로 동일해야 한다”
rsync문서는 dry-run의 itemized output이 이후 실제 실행과 같아야 하지만, 외부 변경이나 system call failure가 있으면 달라질 수 있다고 설명한다.-
따라서 report에는 다음 boundary가 명시되어야 한다.
- dry-run 이후 대상 파일/리소스가 변경되면 plan은 stale해질 수 있음
- permission, lock, quota, API limit, filesystem error는 실제 실행 때만 드러날 수 있음
- remote state refresh 여부에 따라 plan 정확도가 달라질 수 있음
- symbolic link, bind mount, cross-filesystem traversal은 destructive tool에서 별도 경계로 다뤄야 함
-
Opaque/binary artifact는 별도 보안 대상으로 취급해야 한다
- Terraform saved plan은 apply에 사용할 수 있는 opaque file format이며, 표준 소비용 format이 아니다.
- Terraform 문서는 saved plan에 전체 configuration, planned values, input variables가 들어갈 수 있고, terminal에서 가려진 민감정보도 cleartext로 저장될 수 있다고 경고한다.
-
따라서 maintenance tool의 dry-run artifact도 다음 정책이 필요하다.
- human-readable report와 machine-readable manifest 분리
- 민감 path, secret, token, record value redaction
- artifact retention 기간 제한
- artifact signing 또는 checksum
- apply 시 동일 artifact를 사용하는 경우 stale 여부 검증
- plan 파일을 version control에 넣지 않도록 금지
-
Rollback boundary를 impact report에 포함해야 한다
- dry-run은 “무엇을 바꿀 것인가”뿐 아니라 “어디까지 되돌릴 수 있는가”를 보여줘야 한다.
- 예:
- 삭제 전 backup 존재 여부
- hard delete인지 soft delete인지
- trash/quarantine으로 이동 가능한지
- DB migration의 down migration 존재 여부
- object storage versioning 여부
- immutable log 또는 external side effect 존재 여부
- rollback이 다른 active user 또는 component에 미치는 영향
-
AWS Well-Architected는 실패한 변경에 대해 known good state로 되돌리거나 production에서 remediate할 계획을 세우고, rollback/fix-forward 기준을 문서화하라고 권고한다.
-
실패 모드 taxonomy 초안
- False-safe dry-run
- dry-run은 성공했지만 실제 실행에서 permission, lock, quota, API, filesystem error로 실패.
- Stale plan
- dry-run 이후 대상 상태가 바뀌어 실제 변경 집합이 달라짐.
- Opaque plan leakage
- binary/JSON plan artifact에 민감정보가 저장되어 로그, CI artifact, VCS, ticket system으로 유출.
- Partial execution
- 일부 삭제/변경 후 중간 실패. dry-run report가 partial state와 rollback 절차를 설명하지 않음.
- Rollback boundary mismatch
- tool은 “rollback 가능”이라고 암시하지만 실제로는 backup 없음, external side effect 있음, schema downgrade 불가, 사용자 데이터 손실 가능.
- Traversal boundary failure
- symlink, bind mount, network mount, cross-filesystem recursion, path normalization 오류로 의도 범위 밖을 변경.
- Binary/opaque diff blindness
- 텍스트 diff가 불가능한 artifact를 단순 “changed”로만 보고해 reviewer가 실제 위험을 판단하지 못함.
-
Change-size opacity
- 삭제 대상 수나 바이트, resource count, fan-out 정도가 표시되지 않아 작은 작업처럼 보이지만 실제 영향은 큼.
-
권장 dry-run impact report schema
mode: dry-run / plan-only / speculative / saved-planscope: root paths, resource selectors, account/project/namespacescan_time: dry-run 기준 시각inputs_hash: config, policy, command args hashplanned_actions: action별 목록summary_counts: create/update/delete/replace/move/skip/errorestimated_bytes: added/removed/rewritten/unknownopaque_artifacts: plan file, manifest, binary blobs, sensitivity labelrollback: reversible / partially reversible / irreversible / unknownrollback_requirements: backup, snapshot, versioning, down migration, manual interventionboundaries: filesystem, namespace, account, region, tenant, mount, symlink policycautions: stale plan, race conditions, permissions, external side effectsapproval: reviewer, timestamp, exact artifact hash approved
Cautions#
- 공개 자료만으로는 모든 destructive maintenance tool에 공통 적용되는 표준 schema를 확인하지 못했다. 위 schema는
rsync, Terraform, AWS rollback guidance에서 관찰되는 원칙을 종합한 초안이다. rsync --dry-run의 itemized output은 실제 실행과 같아야 한다는 기대가 있지만, 문서상 외부 변경과 system call failure는 예외로 명시된다. 따라서 dry-run 결과를 절대적 보증으로 표현하면 안 된다.- Terraform plan file은 유용한 apply artifact이지만 opaque이고 민감정보를 포함할 수 있다. 이 특성을 다른 maintenance tool의 plan artifact에도 그대로 일반화할 수는 없지만, “opaque artifact는 민감 artifact로 다룬다”는 안전 원칙은 재사용 가능하다.
- Rollback 가능성은 dry-run만으로 완전히 검증되지 않는다. backup restore test, migration downgrade test, snapshot restore drill, permission test가 별도로 필요하다.
- Binary/opaque artifact의 의미 있는 diff는 domain-specific parser가 없으면 제한적이다. 단순 checksum 변화만으로는 semantic impact를 판단하기 어렵다.
Sources#
- https://rsync.samba.org/ftp/rsync/rsync.1
- https://developer.hashicorp.com/terraform/cli/commands/plan
- https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_mit_deploy_risks_plan_for_unsucessful_changes.html
Related#
- Dry-Run and Preview Execution Contracts: Side-Effect Suppression, Diff Fidelity, Partial-Skip Accounting, and False-Success Failure Modes
- Event-Sourced Aggregate Contracts: Stream Versioning, Snapshot Invalidation, Idempotent Command Handling, and Replay-Safe Migration Failure Modes
- Argo CD GitOps Rollout Failure Modes: Sync Waves, Resource Hooks, Health Checks, Prune Ordering, and ApplicationSet Drift
Sagwan Revalidation 2026-09-15T21:34:01Z#
- verdict:
ok - note: rsync·Terraform·AWS 권고와 안전 원칙이 현재도 유효하다.