살려둔 선
우회 적재선은 열리자마자 오류를 뱉었다. 도경은 시스템실 콘솔에 손목을 고정하고 다시 불러왔다. 같은 붉은 줄이 세 번 떴다.
상태 저장소 인덱스 손상 시간대 일부 미정렬 접근 권한 제한
⟨오류⟩ 원신호 검증용 묶음 생성 실패
선체 진동은 낮게 남아 있었다. 우현 보조 추진기가 죽은 뒤 시스템실 바닥은 일정한 박자를 잃었다. 냉각 팬이 짧게 돌다 멈추고, 랙 안쪽에서 릴레이가 딱딱 끊겼다. 도경은 그 사이로 끼어드는 원신호의 잔향을 들었다. 저장된 소리인지, 바깥에서 들어오는 소리인지 잠깐 구분이 늦었다.
“재색인.”
명령은 받아들여졌다가 중간에서 멈췄다. 우회 적재선은 해류 전처리 이전의 원신호를 따로 쌓는 느린 통로였다. 깨끗하지 않다. 지연도 컸다. 하지만 해류가 빈칸을 만들 때, 그 빈칸이 실제 바다의 침묵인지 번역 이전의 누락인지 갈라낼 수 있는 거의 유일한 선이었다.
그래서 죽으면 안 됐다.
도경은 저장소를 읽기 전용으로 다시 물렸다. 손상된 묶음을 강제로 열면 남은 패킷까지 망가질 수 있었다. 먼저 시간표를 복구했다. 산소 경계 진입 전후 9분. 우현 추진기 정지. 밸러스트 수동 조정. 번역 출력 중지. 그 순간마다 원신호 저장률이 떨어졌다가 아주 얇게 붙어 있었다.
“왜 안 끊겼지.”
대답할 사람은 없었다. 시스템실 문은 닫혀 있었고, 회선도 꺼 두었다. 도경은 의자에 앉지 않았다. 서 있으면 화면 사이를 더 빨리 오갈 수 있었다. 손상률은 61퍼센트. 남은 39퍼센트도 순서가 뒤틀려 있었다.
도경은 복구 우선순위를 바꿨다. 음질이 아니라 시간 연속성부터 맞췄다. 고래 소리는 아름답게 들릴 필요가 없다. 언제, 어느 거리에서, 무엇과 겹쳤는지가 먼저다. 과학은 감동을 증거로 쓰지 않는다. 도경은 그렇게 배웠고, 서도진의 노트는 자주 그 규칙을 어겼다. 그래서 더 오래 들여다봤다.
화면 오른쪽 아래에 접근 제약 표시가 떴다. 상위 권한 필요. 본부 서버가 우회 저장소 일부를 잠근 상태였다.
도경은 이를 악물지 않고, 권한 요청을 취소했다. 기다리면 통제 기록만 늘어난다. 대신 장비 쪽 로그를 열었다. 선박 본체에서 남은 조작 흔적은 본부보다 느리지만 덜 매끈했다. 거짓말이 아니라 마찰을 남긴다.
세 번째 하위 로그에서 이상한 줄이 나왔다.
상태 자동 삭제 대기열 중지 손상 패킷 임시 보관소 이동 우회 적재선 유지 모드 전환
p 0.81
⟨보류⟩ 조작 주체 불명
도경은 화면을 멈췄다. 선은 그냥 살아남은 게 아니었다. 누군가 죽지 않게 붙잡았다.
*
도경은 장비 로그를 권한 로그와 나란히 붙였다. 두 기록은 같은 사건을 다른 말투로 썼다. 장비는 버튼과 전압을 남겼고, 권한 서버는 계정과 승인 시간을 남겼다. 둘 중 하나만 보면 사람을 잡을 수 있을 것처럼 보였다. 실제로는 둘 다 구멍이 컸다.
위험대 진입 1분 18초 전, 자동 삭제 대기열이 멈췄다. 원래라면 손상률 높은 패킷은 저장 공간을 먹지 않도록 버려진다. 우회 적재선의 목적이 사후 검증이라 해도, 시스템은 일정 기준 아래의 잡음을 지운다. 누군가는 그 기준을 낮췄고, 깨진 조각을 느린 저장소로 밀어 넣었다.
그 다음 줄에 계정명이 붙어 있었다.
현장정비-공용. 마지막 사용자 김도현.
도경은 커서를 그 이름 위에 올려 두었다. 클릭하지 않았다. 클릭한다고 사람이 나오는 건 아니었다.
공용 권한 로그는 문패와 비슷했다. 방 앞에 걸린 이름을 보여 줄 뿐, 그 순간 손잡이를 잡은 손을 보여 주지는 않는다. 시스템실, 추진기실, 갑판 보조 패널 어디서든 같은 계정으로 들어갈 수 있었다. 마지막 사용자가 도현이라고 해도 다음 사람이 비밀번호를 치지 않고 이어 조작했을 수 있다. 반대로 이름이 비어 있어도 도현의 손일 수 있었다.
도경은 그때의 로그를 열었다. 며칠 전에도 비슷했다. 해류의 번역 후보가 흔들렸고, 현장 계정이 한 번 끼어들었다. 김도현의 이름이 가장 가까이에 있었지만, 증거가 되기엔 한 칸 모자랐다. 그 한 칸 때문에 도경은 그를 밀어내지도, 받아들이지도 못했다.
이번에도 같았다. 다만 이번에는 선이 살아 있었다.
도경은 원신호 일부를 재생했다.
클릭, 클릭 낮은 긁힘 — 침묵 클릭 먼 진동 — —
잡음이 거칠었다. 추진기 잔향과 산소 경보가 섞여 고래의 클릭 가장자리를 갉아먹었다. 그래도 시간은 남아 있었다. 누락된 구간의 앞뒤가 붙었다. 해류가 무엇을 비웠는지, 적어도 어디서 비웠는지는 나중에 물을 수 있다.
입력 권한 로그 / 장비 로그 / 시간 동기값
후보 동일 인물 수동 개입 공용 세션 잔존 장비 자동복구 오인식 외부 서버 지연 반영
p 0.44 / 0.31 / 0.09 / 0.16
상태 식별 불충분
⟨보류⟩ 특정 사용자 지목 불가
“이번엔 맞는 보류야.”
도경의 목소리가 팬 소리에 묻혔다. 공정하다는 말은 편하지 않았다. 아버지의 마지막 기록도 그랬다. 서도진의 파일에는 삭제된 줄과 남은 줄이 어긋나 있었고, 도경은 빠진 자리에 원망을 넣었다가 빼기를 반복했다. 증거가 닿지 않는 곳에 사람을 세우면, 잠깐은 숨이 쉬어졌다. 대신 다음 판단이 더러워졌다.
도경은 김도현 이름을 별도 표식으로 저장하지 않았다. 대신 로그 묶음에 주석을 달았다.
공용 권한. 개인 식별 불가. 수동 개입만 확정.
그 문장은 도현을 풀어 주지도 묶어 두지도 않았다. 도경에게도 마찬가지였다. 빚이 생겼는지, 덫이 놓였는지 아직 알 수 없었다.
문밖에서 젖은 장화 소리가 멈췄다. 도경은 화면을 잠그지 않고, 권한 로그만 뒤로 보냈다.
*
김도현은 노크를 한 번 하고 들어왔다. 손에는 작은 공구 상자가 들려 있었다. 작업복 어깨에 소금물이 말라 흰 선이 생겼다.
“냉각 필터 갈았습니다. 완전 복구는 아닙니다.”
“우회 적재선도 봐야겠네요.”
도경은 의자를 밀어냈다. 도현은 곧장 콘솔로 오지 않았다. 랙 쪽 상태등을 먼저 확인했다. 빨간 불 두 개, 노란 불 셋. 그의 눈이 아주 짧게 저장소 모듈에 머물렀다.
“손상률은요?”
“예상보다 낮아요. 누가 삭제 대기열을 막았거든요.”
공구 상자 손잡이가 도현의 손 안에서 한 번 기울었다. 그는 내려놓는 척하며 자세를 고쳤다.
“그럼 살았네요.”
“그게 궁금해요. 어떻게 살았는지.”
“위기 중엔 자동 완화가 들어갈 때가 있습니다.”
도경은 화면을 돌려 장비 로그를 보였다. “해류 표준 복구가 아니에요. 본부 승인도 아니고. 현장 수동 개입 가능성이 높습니다.”
도현은 가까이 와서 줄을 읽었다. 침묵을 길게 쓰지 않았다. “가능성은 가능성이죠.”
“마지막 사용자 이름이 있어요.”
“공용 계정이면 의미 없습니다.”
“내가 그 말을 하길 기다렸어요?”
도현은 도경을 보았다. 피로가 얼굴에 붙어 있었지만, 눈은 흐리지 않았다. “서 박사님이 이미 알고 계실 말입니다.”
“그래도 물어볼 거예요. 당신이 했습니까?”
도현은 바로 답하지 않았다. 시스템실 밖에서 금속 덮개가 닫히는 소리가 났다. 누군가 복도 끝을 지나갔다. 도경은 그 소리에 시선을 빼앗기지 않으려 손가락을 콘솔 모서리에 댔다.
“제가 했다고 하면 믿습니까?”
“아니요.”
“안 했다고 하면요.”
“그것도 못 믿어요.”
도현은 짧게 고개를 끄덕였다. “그럼 답은 기능이 없네요.”
“기능이 있어요. 당신이 계속 모호하게 남을지 확인하는 기능.”
그는 웃지 않았다. “모호함도 때로는 장비를 살립니다.”
“사람은요?”
도현의 시선이 한 줄 아래로 내려갔다. 자동 삭제 대기열 중지. 손상 패킷 이동. 유지 모드 전환. 그 세 줄만으로는 선의인지 계산인지 나뉘지 않았다. 도경은 그가 입을 열기 전, 대답을 기대한 자신을 먼저 지웠다.
“저는 추진기실에 있었습니다.” 도현이 말했다. “밸러스트 패널도 잡았고요.”
“두 곳 다 현장 계정으로 들어갈 수 있죠.”
“맞습니다.”
“부정이 아니네요.”
“증거가 아니니까요.”
말은 정확했다. 그래서 더 불편했다. 도경은 그를 몰아붙이면 원하는 문장을 얻을 수 있을지 잠깐 계산했다. 고맙다고 말하면 어떤 표정이 나올지도. 둘 다 쓸모가 적었다. 지금 필요한 것은 작동하는 선이었다.
“복구 도와요. 접근 제한 우회가 아니라, 손상된 묶음 재배열만.”
“본부 잠금 건드리지 않겠습니다.”
“약속 말고 로그 남겨요.”
도현은 공구 상자를 열고 보조 단말을 꺼냈다. “로그 남깁니다.”
그 말 하나로 신뢰가 생기지는 않았다. 대신 권한이 바뀌었다. 도경은 그를 감시 대상에서 작업자 위치로 옮겼다. 가까워졌고, 더 위험해졌다.
*
저녁이 되자 시스템실 조명은 절반으로 낮아졌다. 도경은 원신호 묶음을 시간 순서로 다시 쌓았다. 도현은 반대편 콘솔에서 손상된 패킷의 꼬리표를 바꿨다. 두 사람 사이에는 대화보다 확인음이 더 많았다.
“여기 17초 비어요.” 도현이 말했다.
“앞뒤 거리값은 살아 있어요. 소리 없이 위치만 붙여요.”
“번역 후보에서 제외?”
“전부 제외. 검증용 원본만.”
도경은 복구 화면에 조건을 걸었다. 잡음 제거 금지. 시간 보정 최소. 거리값 분리 저장. 원신호는 보기 나빠도 그대로 두었다. 깨끗하게 만든 파일은 사람을 설득하기 쉽지만, 바다가 낸 흠집까지 지운다. 이번에는 설득보다 대조가 먼저였다.
해류 창이 옆에서 새 결과를 냈다.
입력 우회 적재선 손상 묶음 43개 거리값 보조 로그 번역 제외 조건
결과 검증 가능 구간 31개 부분 검증 가능 구간 8개 폐기 구간 4개
상태 원신호 대조선 복구 완료 실시간 판단 사용 불가 사후 검증 사용 가능
p 0.92
도경은 숫자를 다시 읽었다. 사후 검증 사용 가능. 느리고 좁지만 충분했다. 해류가 다음에 무엇을 내놓든, 도경은 원신호와 맞댈 수 있었다. 오늘 손에 쥔 건 하나였다. 우회선은 살아났다.
도현은 단말을 분리했다. “제 작업 로그도 붙였습니다.”
도경은 확인했다. 김도현, 손상 묶음 재배열 보조. 접근 범위 제한. 저장소 잠금 변경 없음. 문장은 흠잡기 어려웠다. 그래서 믿기 더 어려웠다.
“당신을 제외하지 않을 겁니다.” 도경이 말했다.
“팀에서요?”
“의심에서요.”
도현은 공구 상자를 닫았다. “그 정도면 공평합니다.”
공평. 도경은 그 단어가 마음에 들지 않았다. 아버지에게도 공평하려고 했던 시간이 있었다. 그러다 노트의 빈칸을 볼 때마다 손이 먼저 움직였다. 남은 글자를 만지고, 지워진 자리를 재고, 원망을 증거처럼 세웠다. 오늘은 그렇게 하지 않았다. 그게 용서도 신뢰도 아니었다. 더 느린 방식으로 묶어 두는 일이었다.
도현이 나간 뒤 도경은 시스템실 문을 잠그지 않았다. 대신 우회 적재선 복구본을 세 곳에 나눠 저장했다. 본부 서버가 아닌 현장 저장소 하나, 읽기 전용 백업 하나, 해류 입력 전 원본 보관함 하나. 각 파일에 같은 문장을 붙였다.
수동 개입 흔적 있음. 주체 판단 불가. 원신호 대조 가능.
바깥 수면 아래에서 낮은 울림이 들어왔다. 도경은 번역을 켜지 않았다. 스피커에는 거친 클릭과 긴 끊김이 그대로 남았다.
클릭 낮은 진동 클릭, 클릭 — — 먼 하강음
도경은 그 소리를 저장 대기열에 올렸다. 김도현은 변수로 남았다. 빚인지 위험인지 이름 붙이지 않은 채, 작업표의 한가운데에 두었다. 그리고 복구된 우회 적재선을 다음 입력으로 지정했다.
상태 원신호 수신 대기 우회 적재선 활성 자동 번역 보류
결과 검증 수단 확보
이 화, 어떠셨나요?
미리보기 — 댓글은 지금 이 브라우저에만 임시로 저장됩니다. 배포하면 Cloudflare에 저장됩니다.