“첫 번째 실패를 수정할 수 있다면.”
나는 메일 제목을 다시 읽었다. 사람들이 출근부에 갇히고 도로까지 사무실 복도로 바뀐 밤에 ‘실패 수정’이라는 말은 꽤 매력적이었다. 개발자에게 실패를 다시 실행하라는 소리는 욕이면서 동시에 유혹이다. 예전의 나라면 일단 재시작부터 눌렀을 것이다.
“이번에는 버튼부터 누르지 마세요.” 문서윤이 말했다.
“제가 뭘 누른다고요.”
“표정이 딱 그렇습니다.”
남기석이 찾아온 옛 시험 장부에는 실제로 ‘첫 번째 실패’라는 문구가 있었다. 원본은 사진이 아니라 오래된 종이 수기였다. [시험 18-0 / 모의 출구 일괄 개방 / 대기자 자동 배정 실패]라는 기록과 함께, 시범 실행을 중단한 담당자의 붉은 서명이 남아 있었다.
“이게 그 미래 메일의 원본인가요?” 내가 물었다.
“그건 아닙니다. 다만 같은 시험 번호를 사용했습니다.”
나는 장부를 넘겼다. 일괄 개방 시험이 실패한 이유는 예상보다 단순했다. 출구를 열자 시스템이 그 통로를 지나간 모든 사람을 공동 운영사의 신규 인원으로 등록했던 것이다. 비상 대피하려고 지나온 사람이 회사에 입사한 것으로 처리된 셈이다.
“관리 대상 밖으로 보냈다더니, 관리자 자리에 사람들을 새로 올렸네요.” 서윤이 말했다.
“네. 그래서 시험을 중단했습니다.” 남기석이 대답했다.
기록의 날짜는 여러 번 수정돼 있었다. 장부 자체도 후대에 다시 편철된 듯했다. 당시에 실제 사람이 다쳤는지, 어떤 법적 조치를 취했는지는 아직 확인되지 않았다. 단지 담당자가 같은 방식으로 문을 함부로 열지 말라고 경고한 흔적만 선명했다.
나는 민재에게 미래 메일의 전송 대기열을 다시 요청했다. 오늘 밤 23시 49분에 생성됐던 메시지는 아직 서버 한구석에 남아 있었다. 그러나 수신자 표시가 매번 바뀌고 있었다. 내일의 차도윤, 내일의 이명주, 000 외부 관찰자. 원문은 거의 같았지만 끝 문장은 조금씩 달랐다.
“발신 인증이 없고 수신자가 바뀐다면 경고를 사실처럼 취급할 수 없어요.” 민재가 말했다.
“맞아. 그래도 어떤 위험을 막으려 했는지는 시험 기록과 대조할 수 있겠지.”
민재는 장부에 적힌 실패 과정을 한 줄씩 옮겼다. 첫 번째 문제는 출구의 목적지를 확인하지 않은 것. 두 번째는 나간 사람의 의사를 묻지 않은 것. 세 번째는 통행 기록을 고용 계약으로 바꾸어 버린 것.
“네 번째는요?” 서윤이 물었다.
마지막 줄은 일부가 찢겨 있었다. 남은 글씨는 [외부 안전 경고 수신을 새로운 직무 승낙으로……]까지였다.
“없어진 문장도 함부로 완성하지 마세요.” 남기석이 말했다.
“그건 저희 전문입니다. 미완성 코드가 없으면 일을 못 하죠.” 내가 대답했다. “하지만 이번엔 추측을 별도 표시할게요.”
우리가 새 센서의 위치를 확인하던 중, 집하장 주변 보행로가 또 흔들렸다. 새 센서는 건물 벽이 아니라 임시 통신탑에 매달려 있었다. 탑의 소유는 공동 운영사가 아닌 외부 설비 업체로 등록돼 있었고, 업체 측은 철거 예정 장비가 작동하는 사실을 모르고 있었다.
“전원 끊으면 됩니까?” 배 소장이 물었다.
“조명과 긴급 신고선을 공유하는지 먼저 확인합시다.” 서윤이 말했다.
우리는 업체와 설비 관리자를 불러 회선 구조를 대조했다. 실제 긴급 경고선과 출입정보 전송선은 외형상 같은 케이블 덕트에 있었지만 분기 단자가 달랐다. 외부 위험 경고선은 유지하고 신규 인원 등록 기능만 끊을 수 있었다.
그러나 차단 직전 화면에 낯선 문장이 떴다.
[첫 번째 실패를 수정하시겠습니까?]
[선택 1: 18번 출구 전면 개방]
[선택 2: 모든 외부 대기 기록 종료]
“또 둘 중 하나네요.” 서윤이 말했다.
나는 한숨을 쉬었다. 전면 개방을 누르면 사람들을 출근자로 만들 수 있고, 기록 종료를 누르면 실제 구조 요청도 사라질 수 있었다. 일곱 해 회사에서 일한 내 경험상 이런 메뉴를 만든 사람은 사용자를 좋아하지 않는다.
“선택 3은 없습니까?” 내가 물었다.
아무 대답도 없었다.
그때 남기석이 옛 시험 장부 마지막에 접힌 종이를 발견했다. 거기에는 손으로 그린 비상 절차가 있었다. [실물 통로 유지 / 고용 연계 분리 / 수동 경고 접수]. 세 가지 단계였다. 버튼이 두 개뿐이라면 버튼을 누르지 않고 별도 절차를 쓰면 되는 것이다.
“이건 지금도 가능한가요?” 서윤이 물었다.
“설비팀이 직접 확인해야 합니다.” 배 소장이 말했다.
나는 그들을 재촉하지 않았다. 사람의 생명을 지키는 일에는 속도가 필요하지만, 아무 근거 없이 서두르는 일이 늘 더 빠른 건 아니었다. 그사이 우리는 대기 구역에 있는 사람들에게 현재 진행 상황을 설명하고, 각자가 원하는 안전한 위치에서 기다릴 수 있도록 했다.
서림은 작은 의자에 앉아 다른 사람에게 물을 건네고 있었다. 윤석은 집에 가는 버스를 타기 전에 손전등을 하나 빌려 주고 떠났다. 두 번째 경비는 안전실의 창가에 앉아 처음 보는 새벽빛을 기다리고 있었다. 같은 밤에 만난 사람들인데 각자의 목표는 모두 달랐다.
우리에게 필요한 것은 영웅적인 결단보다 교대할 사람과 확인 가능한 기준이었다. 도원솔루션 안전실에서는 민재가 다음 교대조를 모집했고, 병원에서는 박유라가 의료 안전을 우선하는 별도 연락표를 만들었다. 금융센터에서는 정우찬이 현장 시설팀의 출입 허가를 관리했다. 아무도 도윤이라는 한 사람의 이름으로 이 체계를 돌리려 하지 않았다.
“형, 그럼 형은 지금 뭐 하는 거예요?” 민재가 물었다.
“선이 엉키지 않게 봐 주는 거지. 내가 책임자라는 뜻은 아니야.”
“그게 더 어려운데요.”
맞는 말이었다. 나는 늘 모든 장애를 혼자 잡으려 했다. 남에게 맡기면 사고가 날까 봐 두려웠기 때문이다. 그러나 오늘 본 사람들은 내가 모르는 시설과 현장을 더 잘 알고 있었다. 내가 필요한 곳은 그들의 판단을 빼앗는 자리가 아니라, 서로의 장비가 잘못된 명령을 내리지 않게 확인하는 자리였다.
안전 점검 결과 수동 분리 절차가 가능하다는 답이 왔다. 담당자들이 각각 확인하고 노란 경고선을 유지한 채 검은 등록 송신만 격리했다. 화면의 선택지 둘은 여전히 떠 있었지만, 현실에서 일어나는 전송은 멈추기 시작했다.
[외부 인원 등록: 중지]
[위험 신고 접수: 계속]
[실물 피난 경로: 별도 유지]
“이걸 성공이라고 불러도 될까요?” 민재가 물었다.
“부분 복구라고 하자.” 나는 말했다. “안전한 길은 만들었지만 원인을 고친 건 아니니까.”
나는 선택지 화면을 지우지 않고 증거로 보존했다. 그리고 그 아래 ‘사용자 미선택’이라고 적었다. 무언가를 누르지 않은 것에도 의미가 있어야 했다.
그 순간 메일의 마지막 문장이 또 바뀌었다.
[첫 번째 실패의 수정은 완료되지 않았습니다.]
[다음 실패 예상 지점: 제0 경계 바깥]
나는 창밖을 바라봤다. 열일곱 개 건물의 안전선은 아직 살아 있었지만, 도시의 더 멀리 떨어진 구역에서 같은 회색 빛이 일렁이고 있었다. ‘제0 경계 바깥’이 어디까지인지 누구도 몰랐다.
“내일의 내가 정말 존재하든 아니든.” 나는 말했다. “오늘의 사람들을 먼저 확인합시다.”
서윤이 수첩을 덮었다. “지금 할 수 있는 일부터요.”
우리는 다음 교대조에 표지판과 구조 요청 기록을 넘겼다. 나도 잠시 앉아 물을 마셨다. 그때 민재의 무전기가 다시 울렸다.
“형, 도원 18층의 0층 안내가 바뀌었어요.”
“어떻게?”
“더 이상 출근부를 보여 주지 않습니다. 지금은 거리 이름을 보여 줘요.”
나는 다시 일어섰다. 실패를 고치려다 도시 전체를 회사 사무실로 만드는 놈들이라면, 출근부가 사라졌다고 안심할 수 없었다.
제39화 댓글 0
댓글·공감·신고는 로그인 후 이용할 수 있습니다. 이전 익명 댓글은 그대로 표시됩니다.
댓글을 불러오는 중입니다.