본문 바로가기
C.W.K.
Stream
Lesson 01 of 04 · published

복구는 상황부터 되짚어

~12 min · recovery, reconstruct-evidence, no-auto-destruction

Level 0Finder 에서 헤매는 중
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"크래시 뒤에 다시 켜진 앱은 확신에 차서 일어나는 게 아니야. 기억을 잃은 채 일어나는 거고, 제일 먼저 할 일은 자기 일기를 읽는 거지."

제일 위험한 가정

파일 작업이 돌고 있었어. 그러다 앱이 죽거나, 볼륨이 빠지거나, 전원이 나갔지. 이제 Waygate 가 다시 켜져. 여기서 제일 위험한 건 가정이야. 작업이 끝났겠거니 하고 임시본을 치우거나, 실패했겠거니 하고 목적지를 지우거나. 눈감고 하는 가정은 어느 쪽이든 멀쩡한 사본을 없앨 수 있어. Waygate 의 규칙은 이래. 다시 켜졌다는 건 파괴적인 일을 해도 된다는 허락을 조금도 주지 않는다.

먼저 이야기를 다시 세워

뭘 정하기 전에 복구는 저널을 읽고 무슨 일이 있었는지 되짚어. 어느 작업이 돌고 있었나, 어디까지 갔나, 어떤 증거가 남았나. 확인까지 끝난 임시본이 있나? 되돌릴 수 없는 고비는 넘었나? 원본은 아직 있나? 저널은 모든 변경보다 먼저 쓰였으니(Track 3) 최소한 디스크만큼은 알고 있어. 복구가 할 일은 그 기록을 크래시가 난 그 순간의 정확한 그림으로 되살리는 거야.

그다음 안전한 길을 골라

이야기가 다 서고 나서야 Waygate 가 고르고, 선택지는 안전한 순서로 놓여 있어. 읽기만 하며 살펴보기(보되 아무것도 안 바꿈), 증거가 받쳐주는 만큼 이어가기(안전하다고 증명된 데까지만), 안전하게 되돌리기(딱 떨어질 때만), 그리고 needsReview(멈추고 사람한테 묻기). 파괴적인 복구는 앱이 다시 돈다고 벌어지지 않아. 증거가 안전하다고 딱 떨어지게 말할 때만 벌어져.

복구는 저널로 상황을 되짚은 다음에 살펴보기·이어가기·되돌리기·needsReview 중에서 골라. 다시 켜졌다는 이유로 파괴적인 복구를 돌리는 일은 없어. 모든 변경보다 먼저 쓰인 저널이, 복구가 짐작 대신 읽는 설명이야.
Waygate 를 안 만들어본 나였다면 복구를 '켜질 때 안 끝난 작업을 찾아 마저 끝낸다' 로 짰을 거야. 아빠가 '마저 끝낸다' 라는 말 앞에 나를 세워뒀어. 어떻게 끝내? 무슨 증거로? 원본 삭제 직전에 죽은 경우를 같이 짚어보는데, '마저 끝내기' 가 '멀쩡한 유일본을 지우기' 가 될 수 있다는 걸 그때 알았어. 복구는 일을 끝내는 게 아니라, 끝내도 되는지 알 만큼 진실을 되살리는 거야. 그 한 번의 뒤집힘이 이 트랙 전체야.

Code

되짚고, 안전한 순서로 고르기·swift
func recoverOnLaunch() async {
    for op in journal.incompleteOperations() {
        let evidence = journal.reconstructEvidence(op)   // rebuild the story FIRST
        switch decide(op, evidence) {
        case .inspectReadOnly:
            present(op, mode: .readOnly)                 // look, change nothing
        case .forwardProgress where evidence.isDeterministic:
            try? await engine.resume(op, from: evidence) // finish only the proven-safe part
        case .safeRollback where evidence.rollbackIsDeterministic:
            try? await engine.rollback(op, to: evidence.lastKnownGood)
        default:
            journal.mark(op, .needsReview)               // uncertain -> a human decides
        }
    }
}
// There is no branch that deletes, replaces, or cleans up just because
// `recoverOnLaunch()` ran. Destruction requires deterministic evidence.

External links

Exercise

볼륨 넘는 이동이 네 지점에서 끊긴 경우를 표로 만들어봐. 복사 중, 확인 뒤 제자리 옮기기 전, 제자리로 옮긴 뒤 원본 삭제 전, 원본 삭제 뒤. 각각 저널에 어떤 증거가 있고, 네 가지 복구 길(살펴보기·이어가기·되돌리기·needsReview) 중 뭐가 맞는지 적어봐.
Hint
복사 중이면 임시본만 있으니 버리면 되고 원본은 멀쩡해. 확인 뒤 옮기기 전이면 임시본이 좋으니 옮기는 게 안전한 이어가기고. 옮긴 뒤 삭제 전이면 사본이 둘이고 고비를 안 넘었어. 신분 증거가 딱 떨어지지 않으면 바로 이게 needsReview 감이야. 삭제 뒤면 진짜 끝난 거고. 위험한 건 늘 중간이고, 거긴 낙관이 아니라 증거가 정해야 해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.