냉장고를 꺼내고 코드를 되살리는 기술: 재난 이후를 설계하는 사람들
Hatched by a010장인영
Sep 12, 2026
7 min read
0 views
91%
어떤 공동체와 창작물은 왜 무너진 뒤에도 다시 살아날까? 놀랍게도 답은 거대한 의지나 영웅적 결단보다 훨씬 소박한 곳에 있다. 누군가는 진흙 속에서 냉장고를 꺼내고, 누군가는 사라진 코드의 이전 상태를 찾아 복원한다. 하나는 수해 복구처럼 보이고, 다른 하나는 개발자의 기술처럼 보인다. 그러나 둘은 같은 문제를 다룬다. 망가진 뒤에도 무엇을 되살릴 수 있도록 평소에 구조를 만들어 두었는가라는 문제다.
우리는 흔히 재난을 갑작스러운 사건으로, 데이터 손실을 개인의 실수로 생각한다. 하지만 실제로 더 중요한 것은 사건 그 자체가 아니라 사건 이후의 복구 가능성이다. 물이 빠진 뒤 집 안의 물건을 어떻게 꺼낼 것인지, 파일을 잃은 뒤 어느 시점의 작업을 되찾을 것인지, 조직이 혼란에 빠진 뒤 무엇을 기준으로 다시 움직일 것인지가 공동체와 창작의 운명을 가른다.
회복력은 무너지지 않는 능력이 아니다. 무너진 뒤 무엇을 기준으로 다시 조립할 수 있는가를 미리 설계하는 능력이다.
재난과 삭제는 같은 방식으로 흔적을 지운다
수해는 물건을 단순히 젖게 만들지 않는다. 물건의 위치와 용도를 뒤섞는다. 냉장고는 원래 부엌에 있어야 하지만 물에 떠밀려 다른 곳에 있을 수 있다. 도로는 원래 통행을 위해 평평해야 하지만 진흙과 아스콘 파편으로 뒤덮인다. 복구의 첫 단계는 새것을 만드는 일이 아니라, 원래 무엇이 어디에 있었는지 다시 확인하는 일이다.
디지털 창작물의 손실도 비슷하다. 파일 하나가 삭제되었다고 해서 문제는 그 파일 하나로 끝나지 않는다. 어떤 문장이 언제 바뀌었는지, 어떤 기능이 추가되었다가 제거되었는지, 이전 버전에서 무엇이 작동했는지에 대한 맥락까지 함께 사라진다. 최종 파일만 남겨 두면 현재의 표면은 볼 수 있지만, 그곳에 이르는 과정은 볼 수 없다.
이 차이는 중요하다. 복구는 단순한 재생산이 아니기 때문이다. 똑같은 냉장고를 새로 사는 일은 물건의 대체일 수 있지만, 침수된 집에서 가족의 기록과 생활의 흔적을 건져내는 일은 대체할 수 없는 것을 보존하는 일이다. 마찬가지로 코드를 다시 작성하는 것은 가능할 수 있지만, 아이디어가 발전한 경로와 실패한 시도, 작동하던 조합을 되찾는 것은 별개의 문제다.
따라서 복구에는 두 종류가 있다. 하나는 기능 복구다. 다시 작동하게 만드는 것. 다른 하나는 맥락 복구다. 무엇이 왜 그렇게 되었는지 되찾는 것이다. 좋은 시스템은 두 가지를 모두 가능하게 한다.
영웅보다 중요한 것은 복구 가능한 구조다
재난 현장에서 누군가 직접 냉장고를 꺼내고 도로의 아스콘을 치우는 장면은 강한 인상을 준다. 사람들은 그 장면에서 책임감과 연대의 가치를 본다. 하지만 한 사람의 헌신만으로는 넓은 지역을 지속적으로 복구할 수 없다. 복구가 반복되려면 작업이 나뉘어야 하고, 우선순위가 정해져야 하며, 누가 어디까지 처리했는지 공유되어야 한다.
소프트웨어도 마찬가지다. 작업물을 안전하게 보관하려면 단순히 파일을 한 번 업로드하는 것으로 충분하지 않다. 변경 사항을 기록하고, 의미 있는 단위로 저장하며, 여러 장소에 복제하고, 문제가 생겼을 때 어느 시점으로 돌아갈지 알아야 한다. 이것이 버전 관리의 본질이다. 도구의 이름보다 중요한 것은 변화의 흔적을 보존하는 운영 방식이다.
여기서 GitHub를 하나의 창고로만 이해하면 핵심을 놓치게 된다. 창고는 물건을 보관하지만, 버전 관리 시스템은 물건의 계보를 보관한다. 어떤 상태가 언제 만들어졌는지, 그 상태에서 무엇이 달라졌는지, 여러 사람이 어떤 변경을 제안했는지, 문제가 발생했을 때 어느 지점으로 되돌아갈 수 있는지를 기록한다. 이것은 파일 보관이 아니라 판단 보관에 가깝다.
침수된 지역에서 복구 작업의 순서를 기록한다고 생각해 보자. 첫날에는 도로를 열고, 둘째 날에는 전기 설비를 점검하고, 셋째 날에는 가구와 생활용품을 분류할 수 있다. 그 기록이 없으면 같은 장소를 여러 번 확인하거나, 이미 처리한 일을 다시 하거나, 중요한 작업을 빠뜨릴 수 있다. 기록은 행동을 늦추는 행정 절차가 아니라, 혼란 속에서 중복과 누락을 줄이는 기억 장치다.
창작 과정에서도 그렇다. 오늘의 코드가 어제의 코드보다 나아 보인다는 이유만으로 어제의 상태를 지워 버리면, 내일 문제가 생겼을 때 원인을 찾을 수 없다. 반대로 변경을 작게 나누고 그 의미를 적어 두면, 실패는 낭비가 아니라 다음 판단을 위한 데이터가 된다.
백업은 복사이고, 버전 관리는 시간 여행이다
많은 사람이 백업과 버전 관리를 같은 것으로 생각한다. 둘 다 파일을 지켜 주지만, 역할은 다르다. 백업은 현재 상태를 다른 장소에 복사하는 행위다. 버전 관리는 시간이 흐르면서 상태가 어떻게 바뀌었는지 추적하는 체계다.
집 안의 물건을 모두 사진으로 찍어 두는 것은 백업에 비유할 수 있다. 사진은 사고 전의 모습을 알려 주지만, 물건이 언제 이동했고 무엇이 먼저 망가졌는지까지 설명하지는 못한다. 반면 날짜와 장소, 처리 상태가 기록된 복구 일지는 사건의 전개를 보여 준다. 어느 순간에 문제가 생겼는지, 어떤 조치가 효과가 있었는지, 무엇을 다시 확인해야 하는지 알 수 있다.
코드에서도 최종 파일을 매일 다른 폴더에 복사하는 것만으로는 충분하지 않다. 파일은 남아 있어도 변경의 관계가 사라질 수 있기 때문이다. 기능을 추가한 뒤 오류가 생겼다면, 어느 변경이 원인이었는지 알아야 한다. 이때 버전 기록은 과거의 상태로 이동하는 시간 여행 장치가 된다.
이 관점은 창작자에게 특히 중요하다. 창작자는 종종 실패한 초안을 부끄러운 흔적으로 여긴다. 그래서 완성본만 남기고 나머지를 지운다. 그러나 실패한 초안은 작품의 쓰레기가 아니라 탐색 공간의 지도다. 어떤 표현이 어색했는지, 어떤 기능이 과도했는지, 어떤 방향이 매력적이었지만 지속 가능하지 않았는지를 보여 준다.
인공지능을 활용한 코딩에서는 이 문제가 더욱 커진다. 짧은 시간에 많은 코드가 생성되므로, 무엇이 왜 추가되었는지 놓치기 쉽다. 결과가 당장은 작동하더라도 며칠 뒤 수정하려 하면 코드의 기억이 사라져 있다. 이럴수록 작업을 작은 단위로 저장하고, 변경 이유를 자연어로 남기며, 작동하는 상태를 자주 보존해야 한다. 빠른 생성과 느린 기록을 함께 운영해야 하는 이유다.
복구 가능성을 높이는 세 가지 설계 원칙
재난 현장의 복구와 창작물의 보존을 함께 바라보면, 회복력을 높이는 공통 원칙이 드러난다.
첫째, 현재 상태보다 기준점을 먼저 보존해야 한다.
복구에는 원래 상태를 가늠할 기준이 필요하다. 침수 전의 사진, 건물의 배치, 도로의 지도, 물품 목록이 그렇다. 프로젝트에서는 실행 가능한 초기 버전, 핵심 요구 사항, 주요 설정 파일이 기준점이 된다. 기준점이 없으면 복구는 추측이 된다.
개인 프로젝트를 시작할 때도 가장 먼저 해야 할 일은 완벽한 기능을 만드는 것이 아니다. 처음 작동하는 상태를 저장하고, 그것이 무엇을 할 수 있는지 기록하는 일이다. 그 뒤의 변화는 이 기준점과 비교할 수 있어야 한다.
둘째, 변경을 작게 나누어야 한다.
한 번에 집 전체를 정리하려 하면 무엇을 했는지 알 수 없다. 방별로, 물품별로, 상태별로 나누면 작업이 보인다. 코드도 마찬가지다. 로그인 기능을 고치면서 동시에 디자인을 바꾸고 데이터 구조까지 수정하면, 문제가 생겼을 때 원인을 찾기 어렵다.
작은 변경은 작은 실패를 만든다. 작은 실패는 되돌리기 쉽다. 여기서 핵심은 실패를 제거하는 것이 아니라 실패의 반경을 줄이는 것이다. 좋은 시스템은 실수를 막는 시스템이 아니라, 실수가 전체를 파괴하지 못하게 하는 시스템이다.
셋째, 기록은 나중의 나를 위한 설명이어야 한다.
작업 당시에는 모든 것이 분명해 보인다. 그러나 일주일 뒤에는 왜 특정한 선택을 했는지 기억나지 않는다. 따라서 기록은 단순히 무엇을 했는지가 아니라 왜 했는지를 담아야 한다. “수정함”보다 “검색 결과가 중복 표시되어 목록 생성 조건을 변경함”이 훨씬 유용하다.
재난 복구에서도 “처리 완료”라는 말만으로는 부족하다. 어디까지 처리했는지, 어떤 손상이 남았는지, 다음 사람이 무엇을 확인해야 하는지가 남아야 한다. 기록의 대상은 과거의 나만이 아니다. 미래의 나, 동료, 지역사회가 모두 기록의 독자다.
개인의 작업을 작은 공동체처럼 운영하라
이 원칙들을 적용하는 가장 현실적인 방법은 자신의 프로젝트를 하나의 작은 공동체로 보는 것이다. 오늘의 나와 내일의 나는 같은 사람이지만, 같은 정보를 갖고 있지 않다. 내일의 나는 오늘의 맥락을 잊은 협력자다. 그러므로 현재의 나는 미래의 나에게 인수인계해야 한다.
실천은 복잡하지 않다. 프로젝트마다 다음 네 가지를 마련하면 된다.
- 작업의 목적과 실행 방법을 적은 안내 파일을 둔다.
- 변경 사항을 하나의 의미 있는 단위로 저장한다.
- 일정한 주기로 원격 저장소에 복제한다.
- 큰 변경 전에는 현재 작동 상태를 별도로 표시한다.
여기에 한 가지를 더할 수 있다. 가끔 실제 복구 연습을 해 보는 것이다. 백업이 있다고 안심하지만, 실제로 복원해 보지 않으면 백업은 신념에 불과하다. 다른 컴퓨터에서 프로젝트를 내려받아 실행해 보고, 이전 상태로 되돌려 보고, 필요한 설정이 빠져 있지 않은지 확인해야 한다.
이 연습은 재난 대비 훈련과 같다. 평소에는 불필요해 보이지만, 문제가 발생했을 때 가장 큰 시간을 절약한다. 복구 속도는 사고가 난 뒤의 집중력보다 사고 전에 해 본 횟수에 더 크게 좌우된다.
핵심 정리
• 최종본만 보존하지 말고, 변화의 과정과 이유를 함께 기록하라. 최종 상태는 결과를 보여 주지만, 복구에는 경로가 필요하다.
• 백업과 버전 관리를 구분하라. 백업은 복사이고, 버전 관리는 시간의 흐름을 보존하는 기록이다.
• 변경을 작은 단위로 나누어 실패의 반경을 줄여라. 한 번에 많은 것을 바꾸지 않으면 원인을 찾고 되돌리기 쉬워진다.
• 미래의 나를 협력자로 대하라. 안내 파일과 변경 이유를 남기면 기억이 사라져도 작업은 이어진다.
• 복구를 실제로 연습하라. 저장되어 있다는 사실보다 다시 사용할 수 있다는 사실이 중요하다.
무너지지 않는 것보다, 돌아올 길을 남기는 것
수해 뒤에 냉장고를 꺼내는 일과 손실된 코드를 복원하는 일은 겉으로 전혀 달라 보인다. 하나는 진흙과 물리적 노동의 문제이고, 다른 하나는 파일과 명령어의 문제다. 하지만 두 작업 모두 사라진 질서의 흔적을 찾아 다시 연결하는 일이다.
우리는 완벽하게 보존되는 삶과 프로젝트를 만들 수 없다. 물은 예고 없이 불어나고, 파일은 실수로 삭제되며, 사람은 자신이 무엇을 했는지 잊는다. 그러므로 목표를 무손실 상태로 잡으면 언제나 실패한다. 더 현실적이고 강력한 목표는 손실이 발생해도 되돌아갈 기준점과 다시 조립할 기록을 남기는 것이다.
가장 강한 창작자는 실수하지 않는 사람이 아니다. 자신의 실수를 과거의 데이터로 바꾸어 다시 사용할 수 있는 사람이다.
재난 이후의 복구 현장에서 중요한 것은 잔해가 없었다는 사실이 아니다. 잔해 속에서도 다음 행동을 결정할 수 있었다는 사실이다. 창작의 세계에서도 마찬가지다. 좋은 기록은 과거를 보존하는 장치인 동시에 미래의 선택지를 늘리는 장치다.
결국 우리가 지켜야 할 것은 파일이나 물건만이 아니다. 그것들이 다시 의미를 가질 수 있도록 연결된 시간의 구조다. 오늘의 작업을 저장한다는 것은 단순히 현재를 보관하는 일이 아니다. 언젠가 모든 것이 흐트러졌을 때, 다시 시작할 수 있는 길 하나를 미리 닦아 두는 일이다.
Sources
Hatch New Ideas with Glasp AI 🐣
Glasp AI allows you to hatch new ideas based on your curated content. Let's curate and create with Glasp AI :)
Start Hatching 🐣