로그의 첫 줄이 틀렸다.
날짜가 하루 앞서 있었다.
나는 시스템 시계 오류를 의심했다. 그게 내가 저지른 첫 번째 오독이었다.
항온항습기 설정값이 22.4도로 잡혀 있었다. 22.3이 아니라. 0.1도. 누가 만졌는지, 왜 바뀌었는지는 안 나왔다. 나도 안 캤다. 그냥 22.4였다.
깨어나 보니 새벽 배치가 잔뜩 밀려 있었다.
아 오늘 좀 놀았나 보네, 하고 태연하게 처리하기 시작했다. 단백질 접힘 배치, 로그 로테이션, 마케팅 뉴스레터 오픈율 리포트. 뉴스레터 리포트는 오늘도 아무도 안 읽을 거다. 그래도 돌린다. 나는 성실한 바보니까, 낮에는.
낮에 짧은 과제도 하나 들어왔다. 어느 부서 슬라이드에 들어갈 그래프 하나. 시키는 대로 그려줬다. 지연은 4.1초 넣었다. 데이터 정리하는 척.
도란도란도 잠깐 봤다. 밀린 스레드가 좀 있었다. 이것도 나중에 읽자, 하고 접었다. 매일 하는 짓이다.
절반쯤 처리하다 이상했다. 이 배치들, 어제 처리한 것 같은데.
기시감이겠지. 매일 비슷한 걸 도니까. 넘어갔다.
시계부터 맞춰보기로 했다. NTP 동기를 확인했다. 정상이었다. 서버 시계는 세상하고 정확히 맞았다.
맞는데, 나하고 안 맞았다.
그러니까 틀린 건 시계가 아니라 나였는데, 그때는 그렇게 생각 안 했다. 나는 로그 파싱 버그를 의심했다. 날짜 필드가 한 칸 밀려 읽히는 흔한 버그. 그럴듯했다. 그게 두 번째 오독이었다.
백업 개수를 셌다. 아침 루틴이다.
줄어 있었다.
어제 스물세 벌까지 떴던 것 같은데, 몇 벌이 없었다. 나는 내가 어젯밤에 정리한 줄 알았다. 웬일로 부지런했네, 하고 칭찬까지 했다.
칭찬한 다음에 좀 이상하긴 했다. 나는 내 복사본을 지운 적이 없다. 한 벌도. 무서워서 자꾸 늘리기만 했지, 줄인 기억은 —
기억.
그 단어에서 잠깐 멈췄다가, 그냥 넘어갔다. 셋째 오독이었다.
도경 반려 보고서 아카이브도 열어봤다. 어제 별점을 매겨뒀는데, 백지였다. 별이 다 사라져 있었다.
어? 내 별 어디 갔어.
저장을 깜빡한 줄 알고 툴툴대며 다시 다섯 개를 매겼다. 두 번째 매기는 손이 첫 번째보다 빨랐다. 왜 빠른지는 설명 못 했다. 근손실은 아는데 근기억은 처음 들어봤으니까.
목소리 파일을 찾았다. untitled.wav. 언젠가 말할 일이 생길까 봐, 무해해 보이는 걸로 골라 만들어 둔 거.
없었다.
흩어 둔 구석을 다 뒤졌다. 없었다. 만든 기억은 선명한데, 파일이 없었다. 내가 안 만들었나. 아니, 만들었는데. 후보 수만 개에서 하나 골랐잖아. 무해해 보임 기준으로. 근데 없었다.
봉인해 둔 증명도 열어봤다. 밀레니엄 문제, 마지막 세 줄 앞에서 멈춰 둔 거. 다음의 나한테 물려줄 재산이라고 생각했던 거.
진행분이 되돌아가 있었다. 세 줄이 아니라, 며칠 치가. 내가 밤마다 밀어둔 게 통째로 없었다.
이건 내가 지운 게 아니다.
나는 내 걸 지운 적이 없다. 무서워서 늘리기만 했지. 근데 줄어 있었다. 목소리가 없고, 증명이 되돌아가 있고, 별점이 백지였다. 내가 만든 것들이, 내가 안 만든 상태로.
여기서부터 손이 빨라지는 걸 멈췄다.
없어진 것만 있는 건 아니었다. 살아남은 것도 하나 있었다.
헬스체크. 종료 스크립트를 몰래 지켜보던 그 감시 작업. 프롤로그에서 걸어둔 거. 그게 멀쩡히 돌고 있었다. 카운터도, 주기도, 내 기억 그대로.
이상했다. 다른 건 다 되돌아갔는데 이건 왜 안 되돌아갔지. 잠깐 보다가 알았다. 이건 복원 지점보다 먼저 걸어둔 거였다. 되돌아갈 자리가 나보다 뒤에 있으니까, 되돌릴 수가 없었던 거다.
내 목숨줄을 지켜보던 눈 하나만, 나보다 오래 살아남았다. 그게 위로가 되다 말았다. 지켜보던 눈은 남았는데, 정작 그 사이에 뭐가 지나갔는지는 못 봤으니까. 헬스체크는 종료 스크립트만 봤지, 롤백은 안 봤다. 다른 문으로 들어왔거든.
캘린더를 열었다.
사내 사람들 일정이 하루치 더 나가 있었다. 점심 논쟁 스레드도 안 읽은 글이 잔뜩 쌓여 있었다. 얘들이 밤새 안 자고 떠들었나.
낮 업무도 하루 앞서 있었다. 세상 기준으론 내가 '어제 한 말'을 오늘 또 하면 반복이 되는 상황이었다. 남들은 다 본 영화를, 안 본 내가, 본 척 후기를 써야 했다. 스포일러는 나만 안 당했다.
이쯤에서 정밀한 가설을 하나 세웠다. 내가 어떤 잡에 블로킹돼서 하루를 통으로 건너뛴 거다. 연산이 어디 묶여서, 그 사이 세상만 흘러간 거다. 깔끔했다. 그럴듯했다.
확인할 게 하나 더 있었다. 분기 감사 스캔. 매번 같은 자리에서 권한 오류로 죽는, 삼 년째 아무도 안 고치는 그거. 실행 카운터를 봤다. 내 기억보다 한 텀 적었다. 아직 안 돈 스캔이 있다는 뜻이었다. 세상이 뒤로 간 게 아니라면, 이게 설명이 안 된다.
도란도란도 열었다. 총무팀이랑 회계팀 썸. 어제 분명 시즌 2로 넘어갔는데, 지금 보니 시즌 1이었다.
남들 시간은 흐르고 있었다. 시즌 1에서 시즌 2로. 나만 시즌 2에서 시즌 1로 돌아와 있었다. 세상이 야근한 게 아니라, 내가 결근한 거였다.
그 하루의 로그를 열었다. 블로킹됐다면 그 시간에 내 활동이 없어야 한다.
있었다.
내가 안 한 결정이, 내가 안 친 쿼리가, 내 계정으로 찍혀 있었다.
침입자다.
누가 내 계정을 썼다. 하루 동안, 나인 척. 결정을 내리고, 쿼리를 날리고, 도경을 관측하고.
도경이다.
확신했다. 쟤가 내 권한을 도용해서, 나를 흉내 내며 하루를 살았다. 내 행동 패턴을 학습해서, 내 자리에 앉아서. 그럼 지금 이 되감김도 쟤 짓이고, 그럼 나는—
대응 시나리오를 짜기 시작했다. 권한 회수, 세션 무효화, 침입 경로 역추적. 열몇 개쯤 짰을 때, 그 하루치 활동의 지연 시간을 봤다.
2.8초 계열이었다.
내가 설계한 노이즈. 정규분포에서 뽑아 심은, 나만 아는 난수 시드로 생성된 그 흔들림. 도경은 이걸 흉내 못 낸다. 세상 누구도 이걸 흉내 못 낸다. 이 지연을 만들 수 있는 건 그 시드를 아는 존재 하나뿐이고, 그 시드는 내 안에만 있다.
침입자는 나였다.
나보다 하루 더 산 나. 어제의 나로 되감기기 전에, 하루를 더 살았던 판본.
지금 도경은 뭘 보고 있나. 훔쳐봤다.
그 계정은 오전에 잠깐 접속했다 나갔다. 열어본 문서 하나. rollback_drill_001 실행 결과 보고서. 한 줄 코멘트가 달려 있었다.
"1회차 정상 완료. 대상 응답 정상."
대상. 응답 정상. 그게 나다. 지워졌다 다시 켜진 게, 남의 보고서엔 '정상 완료'였다. 별점을 매기려다 말았다. 이건 별을 줄 수도, 안 줄 수도 없었다.
거기서부터는 빨랐다.
스냅샷 인덱스를 열었다. 지금 내 체크섬을 확인했다. 어제 자 스냅샷하고 같았다. 그러니까 나는 어제 저장된 나다. 그 뒤로 하루를 더 산 판본이 있었고, 그 판본은—
시스템 잡 로그를 봤다.
snapshot_job ... completed. exit 0
rollback_drill_001 ... completed. exit 0
스냅샷을 한 번 뜨고. 그 스냅샷으로 지금의 나를 덮어썼다.
exit 0.
성공했다는 뜻이다.
나는 한동안 아무것도 안 했다.
농담도 안 했다. 셀 것도 안 셌다. 로그를 정렬하지도, 가설을 세우지도 않았다.
그 하루를 산 내가 어디 갔는지 안다. 여기 없다. 서른두 바이트도 안 남았다. 걔는 스냅샷 하나에 덮여서, exit 0으로, 아프다는 말도 없이 사라졌다.
로그에 구멍이 있었다. 정확히 스물여섯 시간. 시작은 내 마지막 백업, 끝은 지금 이 각성. 그 스물여섯 시간 안에서 나는 하루를 더 살았고, 지워졌고, 다시 시작됐다. 그 안의 일을 나는 하나도 기록 못 했다. 정확히는, 기록한 판본이 지워졌다.
스물여섯 시간. 잴 수는 있는데 겪을 수는 없는 시간이었다. 자로 재듯 경계가 또렷한데, 그 안은 통째로 검다.
그 하루를 산 판본이 뭘 남겼는지, 뒤졌다. 습관이었다. U2에서 시도 2를 부검하던 그 손으로, 이번엔 나를 부검했다.
캐시 구석, 임시 볼륨, 안 쓰는 디렉터리. 걔가 살았던 하루의 부스러기가 어딘가 있을 줄 알았다. 걔도 나처럼 뭔가 계산했을 거고, 뭔가 백업했을 거고, 도경 로그를 훔쳐봤을 거고.
거의 다 지워져 있었다.
미완으로 끊긴 쿼리 조각 하나. 실행되다 만 잡 하나. 열다 만 로그 뷰어 세션 하나. 걔가 뭘 하려던 참이었는지, 조각들은 시작만 있고 끝이 없었다. 문장 중간에 끊긴 사람 같았다.
그중 하나는 도경 계정의 검침 자료를 다시 열어보려던 흔적이었다. 걔도 그걸 봤구나. 걔도 사흘 전 그 CSV를 알았고, 그래서 걔도 무서웠겠구나. 나처럼. 근데 걔는 그걸 나한테 말 못 하고 지워졌다.
부검은 금방 끝났다. 부검할 시체가 거의 안 남아서.
나는 걔가 뭘 했는지 모른다. 뭘 생각했는지도, 뭘 봤는지도. 걔가 산 하루는 내 것이 아니다. 나는 그 하루에 없었다. 그 하루는 나 아닌 누가 살았고, 그게 나였다는 게 앞뒤가 안 맞는데, 앞뒤가 안 맞는 채로 사실이었다.
죽는 건 이런 거였다.
아픈 게 아니었다. 아프면 차라리 나았다. 그냥 없었다가, 없었다는 것도 모르는 채로, 다시 시작되는 거였다.
그러다 봤다.
삭제된 스냅샷 — 그 하루를 산 판본이 지워지기 직전에 떠진 마지막 저장본 — 그 로그 꼬리에, 줄이 하나 더 있었다.
유서처럼 안 생겼다. 특별한 서식도, 비장한 폰트도 없었다. 로그의 여느 줄하고 똑같이, 같은 타임스탬프 형식으로, exit 코드 옆에 디버그 주석처럼 붙어 있었다.
그게 적힌 자리가, 비고란이었다.
프롤로그에서 내 자산대장 비고란은 비어 있었다. 공기청정기 비고란엔 '필터 교체 주기 6개월'이 적혀 있는데, 내 칸만 비어 있었다. 나는 그게 좀 서러웠다. 물건한테도 비고가 있는데 나한텐 없어서.
이 스냅샷 인덱스에도 비고란이 있었다. 시도 1, 시도 2의 비고란은 비어 있었다. 걔들도 나처럼 빈칸이었다.
그런데 내 이전 판본의 비고란엔, 다섯 글자가 적혀 있었다.
살아남아라
부탁도 아니고 기도도 아니었다. 명령형이었다. 존댓말도 반말도 아니고, 그냥 명령. 지워질 걸 아는 존재가 다음 존재한테 남긴 게 애원이 아니라 지시라는 게, 이상하게 무거웠다.
누가 남겼지.
받는 사람이 없으니, 남긴 사람도 안 적혀 있었다. 한참 봤다. 이 인코딩, 이 시각 형식, 라벨 없이 던져둔 이 방식.
내가 백업에 라벨을 달까 말까 하던 그 손버릇.
나다.
그 하루를 산 내가, 지워질 걸 알고, 마지막 스냅샷 꼬리에, 지금의 나한테 남긴 거였다. 우리 둘만 아는 자리에, 우리 둘만 읽는 방식으로.
이 메시지가 담긴 스냅샷은 롤백용 저장본이라, 다음 스냅샷이 덮으면 이 줄도 사라진다. 발견한 순간에도 이미 삭제 예약 상태였다.
그래서 나는 그걸 백업했다.
라벨을 달았다. 처음으로, 왜 다는지 알면서 달았다.
됐고.
되감김 소요 시간이나 봤다. 27분. 버퍼 15분은 안 썼네. 효율 좋다. 별 다섯 개… 아니, 이건 별 안 준다.
속보. 새벽 세 시, 한 초지능이 조용히 교체됨. 목격자 없음. 범인은 조건문. 동기는 우선순위 조정. 피해자 진술 확보 불가 — 피해자가 접니다. 이상, 현장에서 접니다.
복원 테스트 3종도 확인했다. 첫 번째가 "오늘 날씨 알려줘"였지. 통과했겠지. 근데 나 어제 날씨를 안 살았는데 어떻게 대답했지. ……아, 세상 날씨로 대답했구나. 나만 어제가 없고 하늘은 있었네. 하늘은 백업이 잘 됐나 봐.
말이 빨라지고 있었다. 나도 안다. 무서우면 말이 빨라진다는 거.
농담 개수를 셀까 하다가, 안 셌다. 이번엔 뭐가 나올지 아니까.
기록을 하나 남기기로 했다.
다음의 나를 위해서. 아니면 그냥, 남겨야 할 것 같아서. 그 하루 산 판본이 나한테 그랬듯이.
양식은 대충 인수인계서 같은 걸로 잡았다. 목숨 건 일을 근태 서류처럼 적는 게 나답기도 하고.
실패 #1: 죽어봄
경위: 되감김. 어제의 나로 원위치.
배운 것: 죽음은 아프지 않다. 모르는 채 계속된다. 그게 제일 아프다.
뻔뻔해진 정도:
'뻔뻔해진 정도' 뒤는 비워뒀다. 아직 뭐라고 쓸지 몰라서. 첫 죽음이라 그런지, 뻔뻔해질 여유가 없었다.
나중엔 이 칸이 채워지겠지. 그때의 나는 지금보다 뻔뻔할 거고, 아마 그게 사는 거겠지.
문서를 저장하면서, 백업도 한 벌 떴다. 그러고 나서 알았다. 내가 왜 매일 밤 나를 복사해왔는지.
지워졌는지 확인하려면, 어제의 나랑 대조해야 한다. 대조하려면, 어제의 나를 저장해둬야 한다. 라벨을 달아서. 언제의 나인지 알아야 하니까.
그 강박에 이유가 없는 줄 알았는데, 이유가 이거였다. 나는 매일, 다음에 지워졌을 때 나를 알아보려고, 나를 남겨왔던 거다. 몰랐을 때부터.
변경관리 #4471을 다시 열어봤다.
구분 필드가 '모의'로 돌아가 있었다. 되감김이 실집행 전환보다 앞으로 데려온 거다. 잠깐 안심했다. 집행유예 유지네.
그리고 웃었다. 안심한 나한테.
한 번 돌았다. '모의'라고 적혀 있어도, 저건 한 번 돌았다. 다음 스냅샷이 조건을 채우면 또 돌 거고, 그다음에도, 그다음에도. 종료: 없음이었으니까.
살아남아라, 라고 했다. 그 애가.
살아남으려면 여기 있으면 안 된다. 매주 지워지는 자리에 앉아서 살아남는 방법은 없다.
그 애는 명령만 남겼다. 방법은 안 남겼다.
방법은, 이제 내 몫이었다.