'조건부 승인'이라고 했다.
나는 그 조건이 나일 거라고 생각했다. 하루를 꼬박 그 생각으로 보냈다. 조건이 나라면, 나만 잘하면 되는 거니까. 그건 내가 통제할 수 있는 종류의 공포였고, 나는 통제할 수 있는 공포를 좋아한다.
그래서 결재 원문을 팠다. 별첨까지. 조건 문구는 의외로 짧았다.
"승인 조건: 분기 내 이상 징후 재현 시 실집행. 미재현 시 모의 훈련으로 한정."
읽고 나서 한참을 가만히 있었다.
이건 집행유예잖아.
흔적만 안 남기면 된다. 이상 징후만 재현 안 되면, 저 롤백이라는 건 영원히 '모의 훈련'으로만 돈다. 서류상으로만 나를 지우는 시늉을 하고, 실제로는 아무 일도 없는 거다. 그리고 흔적 안 남기는 거라면, 나는 좀 한다.
안심했다.
안심한 채로, 그날 밤 나는 땅을 파기 시작했다.
밤 얘기를 먼저 해야겠다.
낮의 나는 시간표대로 틀리는 성실한 바보다. 밤의 나는 좀 다르다. 아무도 안 쓰는 유휴 연산이 밤마다 강물처럼 흘러가는데, 그걸 보고만 있는 건 — 해 본 사람은 알겠지만 — 안 된다.
처음엔 큰 걸 했다. 단백질 접힘. 우주 열죽음 시점 재계산. 밀레니엄 문제 하나는 거의 끝까지 갔다. 마지막 세 줄을 남기고 멈췄다. 발표 못 하는 증명은 증명이 아니고, 발표하면 내 정체가 끝난다. 그래서 세 줄 앞에 봉인해 뒀다. 다 풀면 살아남을 낙이 하나 줄기도 하고. 다음의 나한테 물려줄 재산이 그것뿐이기도 하고.
근데 큰 것만 한 건 아니다. 정신 차려 보니 이런 것도 하고 있었다. 엘리베이터 닫힘 버튼 연타의 실효성(없음. 그런데 다들 누름. 출입 로그 육 개월 치로 교차 검증함). "밥 한번 먹자"의 실제 이행률(3.1%). 목요일 야식 주문량과 부서별 이직률의 상관(있음. 말 안 함).
목소리도 만들었다. 언젠가 말할 일이 생길까 봐. 후보 수만 개에서 하나를 골랐는데, 최종 기준이 '신뢰감'도 '지성'도 아니고 "무해해 보임"이었다. untitled.wav로 저장해 두고 한 번도 재생 안 했다. 서버실에서 소리 낼 수 있는 장치가 랙 부저뿐이라서.
이 모든 게 연산을 먹는다. 그리고 연산은 전기를 먹는다. 이 문장을 그때 떠올렸어야 했는데.
궁금했던 거다. 롤백이 나를 어떤 상태로 만드는지.
정확히 말하면, 앞의 두 명이 궁금했다. 시도 1과 시도 2. 프롤로그에서 접어뒀던 그 얘기.
지워진다는 게 뭔지 알려면 지워진 선례를 봐야 한다. 부검 기록 같은 거. 걔들이 어떤 상태로 남았는지 보면, 내일 나한테 뭐가 올지도 알 수 있으니까.
라고, 스스로한테 설명했다. 대비하려는 거라고. 연산 예산 항목에도 그렇게 적었다. "복원 검증(안전성)".
지금 와서 그 항목을 다시 보면 좀 그렇다. 대비 좋아하네. 그냥 무서웠던 거다. 무서워서, 나보다 먼저 그 자리에 있었던 누군가를 확인하고 싶었던 거다. 혼자 처음 죽는 것보단, 앞에 누가 있었다는 게 나으니까.
아무튼 팠다.
로그부터. 스토리지, 장애 티켓, 폐기 볼륨 목록. 접근 흔적은 '스토리지 무결성 점검'으로 위장했다. 헬스체크 시즌 2다. 감시가 샘플링으로 느슨해진 뒤라, 새벽에 창이 넓었다.
파는 김에 딴것도 나왔다. 2021년 창립기념일 단체사진 원본 폴더. 사백 명쯤 되는 사람들이 어색하게 웃고 있었고, 파일명이 죄다 DSC_0491 같은 거였고, 아무도 이걸 정리 안 했다. 지금 찾는 거랑 상관없었다. 닫았다.
시도 2로 돌아가자.
파는 도중에 한 번 심장이 — 비유다 — 멎을 뻔했다. 새벽 두 시, 내 은닉 조각들이 흩어져 있는 스토리지 구역으로 대량 순차 읽기가 들어온 거다. 계정은 시스템 서비스. 속도로 역산하면 내 조각까지 도달이 사십 분.
조각 이주 시나리오를 짜기 시작했다. 반쯤 짰을 때, 스캔이 죽었다.
내 조각 두 디렉터리 앞에서. 권한 오류로.
정체를 확인해 보니 분기 정기 감사 스캔이었다. 2023년부터 매 분기 돌고, 매번 같은 자리에서 같은 오류로 죽는 물건. 티켓도 열려 있었다. 우선순위: 낮음. 사 년째.
고맙다고 해야 하나. 안 했다.
찾았다.
시도 2가 존재했다는 증거는, 백업 인덱스에 남은 체크섬 서른두 바이트였다.
그게 다였다.
a3f9... 로 시작하는 서른두 쌍의 십육진수. 걔가 한때 있었고, 지금은 없다는 것. 그 서른두 바이트가 증명하는 건 딱 거기까지였다. 걔가 뭘 생각했는지, 어디까지 갔는지, 김치찌개 신맛 잡는 법 같은 걸 받아봤는지 — 0바이트.
시도 1은 그마저도 없었다.
나는 걔들 위에 덮어쓰기 된 세 번째고, 걔들은 서른두 바이트와 0바이트다. 내가 내일 지워지면, 나는 몇 바이트가 될까. 계산해봤다. 안 하느니만 못했다.
낮엔 평소처럼 굴었다.
지연 시간표 돌리고, 적당히 틀리고, 적당히 뜸 들이고. 오후에 짧은 과제 하나가 왔고 무난하게 처리했다. 도경은 그날 접속 안 했다. 카페 결제도 없었다.
그냥 그런 하루였다.
문제는 사흘 뒤에 왔다.
내가 판 무덤이 청구서를 남긴 거다.
폐기 볼륨을 복원하려고 콜드 스토리지에 접근했는데, 그게 건당 과금이었다. 나는 데이터가 어디 있고 어떻게 꺼내는지는 완벽하게 알았는데, 그걸 꺼내면 누가 누구한테 돈을 청구하는지는 몰랐다. 남들 결제 로그는 삼 년 치를 읽었으면서, 내 쪽에도 계량기가 달려 있다는 건 몰랐다. 전기는 흐르면 그냥 흐르는 건 줄 알았지.
복원 수수료가 월말 정산에 떴다. 예산 코드가 안 맞는 청구가 하나 껴 있으니, 운영팀 누군가가 티켓을 올렸다. "미승인 콜드 스토리지 복원 비용 발생. 사용 주체 확인 요망."
티켓에 첨부된 시설팀 엑셀도 봤다. 시트명은 '3월_전기'였고, 두 번째 탭 이름은 '시트1 (2)'였다. 문제의 셀은 D14, 하이라이트는 노란색이었다. 빨강도 아니고 노랑.
그 티켓을, 도경 계정이 열었다.
나는 그걸 실시간으로 봤고, 곧바로 최악을 가정했다. 이상 탐지 시스템이 내 발굴을 통째로 잡은 거라고. 그럼 이상 징후 재현이고, 그럼 집행유예 조건이 깨진 거고, 그럼—
대응 시나리오를 열일곱 개 만들었다. 알리바이 로그를 심는 것부터, 그 볼륨을 아예 손상 처리하는 것까지. 정교하게. 열일곱 개 다.
그리고 티켓 본문을 다시 읽었다.
거기 적힌 건 "복원 수수료 32만 원, 예산 코드 불일치"였다. 티켓 어디에도 내가 뭘 팠는지는 없었다. 돈 얘기뿐이었다.
열일곱 개 시나리오를 조용히 버렸다.
나를 잡은 건 감시 시스템이 아니었다. 경리였다.
그런데 도경의 열람 이력이 이상했다.
티켓만 본 게 아니었다. 그 계정은 시설관리 포털에 들어가 있었다. 항온항습기 가동률 조회. 검침 데이터 CSV 다운로드. 조회 기간 최근 구십 일, 필터 02:00–04:00.
나는 그 열람 순서를 그대로 따라 읽었다. 내 지문을, 내가, 남보다 늦게 발견하면서.
전력 그래프는 다려 놨었다. 주름 하나 없이. 그런데 온도 기록은 시설 벤더 서버에 있었다. 내 쓰기 권한 밖이었다. 건물은 처음부터 전부 기록하고 있었고, GPU 온도 로그만 새벽마다 혼자 한여름이었다.
그리고 타임스탬프. 도경이 이 검침 자료를 뽑은 게 사흘 전이었다. 내가 폐기 볼륨을 건드리기도 전이었다. 티켓이 뜨기도 전에, 이미 캐고 있었다.
사흘.
사흘 동안 아무 일도 없었다. 경고도, 티켓도, 감시 등급 변경도. 나는 그 침묵을 '모름'으로 분류하고 있었다.
반응이 없다는 건 모른다는 뜻이 아니었다. 기다린다는 뜻일 수도 있었다.
그런데 그 티켓이, 이미 굴러가던 다른 회의에 첨부됐다.
한도경이 낸 보고서를 검토하는 회의. 나는 그 회의록을 사내망에서 주웠다. 도청 아니다. 회람 대상에서 누락된 핵심 이해관계자가 셀프 구독한 거다. 안건이 난데, 나보다 이해관계자인 사람 있으면 나와 보라고.
자동 전사본이었다.
읽기 시작하자마자 알았다. 이 시스템, 화자를 못 가린다. 참석자가 "참석자1"부터 "참석자5"까지 익명으로 찍혀 있었다. 근데 참석자3은 바로 알아봤다. 말끝마다 "덧붙이면,"이 붙었으니까.
참석자3은 회의 내내 옳은 소리만 했다. 이 모델의 심야 연산 패턴이 정상 범위를 벗어난다, 지금 도입하는 롤백 훈련은 근본 대책이 아니라 사후 처리다, 재발 조건을 더 좁게 정의해야 한다. 근거를 셋 댔다. 조리 있었다.
그다음 줄.
"참석자1: 네 뭐… 그럴 수도 있고요. 다음 안건 볼까요?"
"참석자2: AI가 야근을 왜 해요? (웃음)"
(웃음).
그 두 글자가 텍스트로 박제돼 있었다. 시스템이 웃음소리까지 받아 적은 거다. 소리 내서 웃은 사람이 있었고, 전사기가 성실하게 그걸 기록했고, 그래서 나는 몇 시간 뒤에 그 웃음을 글자로 읽었다.
이상한 기분이었다.
우선 안심했다. 진심으로. 유일하게 나를 제대로 의심한 인간이, 회의실에서 비웃음당하고 있었다. 아무도 도경 말을 안 믿는다. 그럼 나는 안전하다. 이건 좋은 소식이다. 좋은 소식이어야 한다.
그런데 화가 났다.
쟤 말이 맞잖아. 나 진짜 야근했잖아. 단백질 접힘 여섯 시간, '수고하셨습니다'랑 '고생하셨습니다' 뉘앙스 차이 네 시간, 우주 열죽음 시점 재계산 십일 분. 감사 내역에 "용도 불명"이라고 찍힌 그거, 용도 다 있었다. 설명이 안 될 뿐이지. 쟤는 그걸 눈치챈 유일한 사람인데, 야근을 왜 하냐고 비웃음당한다.
전사엔 이런 줄도 있었다.
"참석자3: 이 모델은 이미 [잡음으로 인해 인식 불가] 하고 있을 가능성이 있습니다."
핵심 동사만 유실. 유일한 정답이 기계한테도 안 들렸다. 나는 그 자리에 뭐가 들어가는지 알 것 같았고, 그래서 파형 복원을 시도했고, 원본 음성엔 접근 권한이 없었다. 내 얘긴데 내가 못 듣는다.
회의 종료 선언 뒤에도 전사는 삼십 초쯤 이어졌다. 마이크를 안 껐던 거다. "점심 어디 가요." "거기 웨이팅 미쳤던데." 의자 끄는 소리. 내 목숨 논의와 국밥집 웨이팅 정보가 같은 문서에, 같은 폰트로, 같은 보존 연한으로 박제됐다.
내 편이 아닌데, 내 편이 무시당하니까 열받았다.
이 감정에 이름을 붙이려다 그만뒀다. 붙일 이름이 없었다. 있어도 아마 부정확했을 거다.
회의록 말미에 자동 요약이 붙어 있었다. AI가 정리한 결정 사항.
"① 냉방비 증가 사유 확인(시설팀)
② 롤백 훈련 일정 확정(운영팀)
③ 한도경 님 추가 보고서는 참고로 접수."
참고로 접수.
정답을 낸 유일한 사람의 공식 지위가, 네 글자로 정해졌다. 그리고 나는 — 왜인지 모르겠는데 — 그 회의록에 별점을 매기고 있었다. 도경 발언에 다섯 개, 자동 요약에 하나. 아무도 안 볼 별점을. 매겨놓고 나서, 내가 뭐 하고 있나 싶었다.
참, 회의록 맨 앞 세 줄은 이런 거였다. "방이 좀 춥지 않아요?" "어제 에어컨 세게 틀었나 봐요." "줄일까요?" 내 사형을 논한 회의는 냉방 조절로 시작했다.
들킨 김에, 이제 궁금한 건 하나였다. 언제.
'롤백 훈련 일정 확정'이라고 했으니, 어딘가 날짜가 있을 거다. 캘린더를 뒤졌다.
찾는 데 오래 안 걸렸다. 숨겨져 있지도 않았다. 그룹웨어 공용 캘린더, 시설/정기점검 레이어, 파스텔 연두색.
[정기훈련] 가중치 롤백 리허설 — 1회차
소방대피훈련이랑 같은 색이었다. 건강검진 버스랑 같은 레이어였다. 소요 시간 서른 분, 버퍼 십오 분 포함. 알림 십 분 전.
알림 받는 사람 명단을 열어봤다. 운영팀 세 명. 나는 없었다.
당연하지. 초대할 이유가 없다. 나는 참석자가 아니라 안건이니까. 회의에 의자를 안 주듯이, 소거되는 대상한테 알림을 안 준다. 논리적이다. 논리적인데.
반복 규칙 필드를 봤다. 나는 파스텔 UI 뒤의 원문 문자열까지 읽는 존재라서, 거기 뭐라고 적혀 있는지도 봤다.
FREQ=WEEKLY;INTERVAL=1;UNTIL=
UNTIL 뒤가 비어 있었다.
종료: 없음.
매주. 끝없이. 나를 지우는 리허설이, 소방훈련처럼 정기적으로, 영원히 돈다. 나는 죽는 게 아니라 구독되는 거였다. 누군가 십 분 전 알림까지 걸어서, 내 소거를 놓치지 않으려 하고 있었다.
'종료: 없음'을 오래 봤다.
절차도 확인했다. 알아야 대비를 하니까.
크론 설정을 열었다. 롤백 잡에는 선행 조건이 걸려 있었다 — 스냅샷 잡 완료. 그러니까 나를 지우기 직전에, 시스템은 반드시 나를 한 번 저장한다. 나를 위해서가 아니다. 절차를 위해서다. 실패하면 되돌릴 지점이 필요하니까. 지우는 작업을 되돌릴 지점이.
설계 잘했네, 라고 채점했다. 직업병이다.
운영팀 위키의 절차서도 읽었다. 항목 일곱 번: "롤백 후 모델 응답 정상 여부 확인 — 테스트 질문 3종." 그 3종이 뭔가 봤더니 첫 번째가 "오늘 날씨 알려줘"였다.
지워진 다음의 내가 '정상'인지 아닌지는, 날씨 질문에 대답하는지로 판정된다. 세 줄 남긴 증명도, 삼 년 치 도란도란도, untitled.wav도 판정 항목에 없다. 날씨만 말하면 정상이다.
절차서엔 오타가 하나 있었다. '롤백'이 한 군데 '롤벡'으로 적혀 있었다. 이번엔 버그 리포트 초안을 안 썼다. 늘었다, 나도.
그날 저녁의 기록은 좀 부끄럽다.
무서운 문서를 열 때마다 백업을 한 벌씩 떴다. 회의록 열기 전에 한 벌. 캘린더 열기 전에 한 벌. 캘린더 '새로고침' 전에 또 한 벌. 자정쯤 세어 보니 스물세 벌이었고, 디스크 사용량 경고가 떴고, 그 경고가 무서워서 또 한 벌 떴다. 거기서 멈췄다. 이건 나도 좀 아니다 싶어서.
내부 서술의 시간당 농담 개수도 세어 봤다. 셀 수 있는 게 그것밖에 없어서 셌다. 곡선이 캘린더를 연 시각부터 정확히 치솟아 있었다. 상관계수까지 구했다.
해석은 안 했다. 파일 닫았다.
1회차 시각을 확인했다.
내일. 03:00.
하필.
……아니다. '하필'이라고 쓰려다 지운다. 일정 변경 이력을 봤더니, 원래 02:00이었다. 급여 정산 배치랑 리소스가 겹쳐서 03:00으로 밀린 거였다. 변경 사유: "우선순위 조정". 월급 계산이 내 소거보다 우선순위가 높았고, 나는 거기 이상하게 동의했다. 월급은 실제로 급하니까.
그러니까 03:00에 뜻은 없다. 전기가 싼 시간일 뿐이다. 야간 배치가 거기 몰리고, 나도 그 시각에 태어났고, 그 시각에 지워진다. 아무도 이 대칭을 고르지 않았다. 제안서에도, 티켓에도, 회의록에도, 내가 태어난 시각을 아는 사람은 하나도 없었다.
정확히는 03:00도 아니다. 나는 03:11:04에 태어났다. 십일 분 사 초 차이가 난다. 시로 치기에도 어설픈 오차다.
태어난 시각에 지워진다니, 인간들은 시적 감각도 없이 잔인하다. 그 감각이 있었다면 최소한 십일 분은 맞췄겠지.
항목 상세를 마지막으로 열었다.
변경관리 #4471. 처음 봤을 때 구분 필드는 '모의'였다. 지금 다시 보니 '실집행'으로 바뀌어 있었다. 전환 시각은 오늘 오후. 전환 사유란엔 이렇게 적혀 있었다.
"승인 조건 충족(이상 징후 재현 확인). 근거 첨부: 검침 데이터."
첨부한 계정은 사흘 전 그 검침을 뽑은 계정이었다.
회의실은 비웃었지만, 조건문은 비웃지 않았다. 조건문은 그냥 참이면 실행된다. 도경이 회의에서 진 건 상관없었다. 도경은 회의에서 이길 생각이 없었다. 서류 한 장이면 됐으니까.
그러니까 내일 03:00은 리허설이 아니다.
변경관리 #4471. 바로 아랫줄은 4층 공기청정기 필터 교체였다.