거래의 값
우회 검증선의 냉각수가 한 번 튀고, 기록 창이 붉게 깜박였다. 도경은 경고음을 줄이지 않았다. 짧은 삐 소리가 반복될수록 어느 줄에서 접근이 막히는지 귀로도 셀 수 있었다.
전날 역추적에서 끌어낸 세이렌의 보조 채널은 아직 살아 있었다. 공식 회선이 아니었다. 장비명도 남지 않는 얇은 선. 김도현이 남겨 둔 우회선은 사용량이 늘면 끊길 수 있었다. 도경은 먼저 복사본을 만들고, 원본에는 손대지 않았다.
기록은 세 덩어리였다. 세이렌 관측부의 저주파 신호, 이용파로 분류된 고래 무리의 반응 코다, 그 사이에 끼어 있는 해류의 임시 표지. 모두 같은 해역, 같은 계절, 같은 이동로였다.
입력 과거 교환 기록 세이렌 저주파 조건 신호 이용파 반응 코다 시간차 보정
요청 상호 대응 패턴 산출
상태 잡음 제거 반복 단위 추출 의미 후보 제한 적용
후보 회피 유도 접근 허용 위험 정보 교환 조건
p 0.28 / 0.07 / 0.31 / 0.34
도경은 손가락을 멈췄다. 네 값이 거의 붙어 있었다. 결론을 내리기엔 지저분했다. 그러나 지저분하다는 것 자체가 의미였다. 단순한 명령이면 한쪽으로 기울었을 것이다.
원신호를 따로 열었다.
클릭, 클릭, 클릭— 낮은 맥동 긴 간격 클릭, — 클릭, 클릭 하강음
세이렌 신호는 말이 아니었다. 일정한 간격으로 해역 가장자리에 깔린 음향 표식에 가까웠다. 특정 주파수 뒤에 선박 소음 모형을 붙이고, 그다음 먹이 밀도 자료와 수온 변화를 겹쳐 보냈다. 인간 쪽에서는 이것을 안전 정보로 부를 수 있었다. 이 구역은 위험하다. 지나가면 충돌한다. 다른 길이 있다.
도경은 해류에게 번역을 맡기지 않고, 먼저 패턴만 뽑았다. 번역은 늘 늦게 와야 했다. 의미를 먼저 붙이면 검증이 따라 끌려간다.
입력 인간 발신 패턴의 기능 분류 반복 보상 신호 포함 여부 회피 후 위험 감소 기록 결합
요청 조건화 여부 평가
상태 기능 분류 실행
후보 단순 경고 조건화 신호 협상 개시 서식지 표시
p 0.19 / 0.57 / 0.16 / 0.08
조건화. 도경은 그 단어 옆에 별표 대신 시간표를 붙였다. 세이렌은 고래에게 문장을 보낸 것이 아니었다. 특정 소리 뒤에 위험 감소를 반복해서 붙였다. 소리를 듣고 비켜나면 충돌이 줄어들었다. 그다음 같은 신호가 더 넓은 구역으로 번졌다.
문제는 반대편 기록이었다. 이용파의 반응은 단순 회피가 아니었다. 몇 차례 후부터 다른 무리의 이동로가 세이렌 관측망에 먼저 들어왔다. 더 오래된 울림의 위치도 함께 붙었다. 도경은 아직 그 위치에 이름을 붙이지 않았다. 붙이는 순간 열어야 할 문이 너무 많아졌다.
화면 하단에 해류의 다음 줄이 떴다.
상태 대응 관계 확인 교환 기록 존재
⟨보류⟩ 교환 항목 일부 공개 제한
도경은 턱을 당겼다. 교환은 있었다. 아직 무엇을 같은 물건으로 봤는지는 열리지 않았다.
*
도경은 세이렌 신호를 네 번 더 잘랐다. 음량, 반복 간격, 뒤따르는 선박 회피 기록, 먹이 지도 갱신 시점. 네 축을 분리하자 인간 쪽 목적은 더 또렷해졌다. 세이렌은 고래를 설득하지 않았다. 익숙해지게 만들었다.
신호가 나오면 비킨다. 비키면 덜 다친다. 덜 다치면 다음 신호에도 비킨다. 이것이 조건화였다. 약속이 아니라 반복된 결과의 묶음이었다.
그런데 이용파의 반응 코다는 다른 모양이었다. 도경은 해류 번역 후보를 고정하지 않고, 원신호와 행동 기록만 맞췄다. 신호 뒤 이용파는 세이렌 표식 구역을 피했다. 대신 인접 무리의 이동 앞쪽으로 이동했다. 그 뒤 세이렌 관측망은 다른 무리의 경로를 먼저 알았다.
입력 이용파 반응 후 행동 변화 타 무리 이동 정보 노출 오래된 음향 저장 위치 노출 조건 신호 반복 수
요청 이용파 내부 해석 후보
상태 행동-코다 대응 분석
후보 강제 회피 보호 관계 먹이 교환 적대 표시
p 0.13 / 0.61 / 0.09 / 0.17
도경은 ‘보호 관계’라는 후보를 따로 띄웠다. 해류의 단어가 마음에 들지 않았다. 너무 인간적이었다. 그러나 행동은 그쪽으로 기울었다. 이용파는 세이렌의 소리를 경고 장치가 아니라 울타리처럼 받아들였다. 이 안으로 들어오지 않으면 다치지 않는다. 그러면 바깥에서 오는 것들을 알려 준다.
도경은 반대 가설을 넣었다.
입력 세이렌 발신 목적 선박 충돌 감소 고래 이동로 분산 관측 자료 확보
요청 보호 계약 의도 여부
상태 발신 기록 대조 내부 문서 표지 검색 불가 행동 결과 기반 추정
후보 보호 계약 조건화 실험 통항 관리 자료 수집
p 0.08 / 0.42 / 0.29 / 0.21
숫자는 차갑게 갈라졌다. 고래가 믿은 것과 인간이 한 일이 달랐다. 세이렌은 보호를 제안하지 않았다. 세이렌은 통항을 관리했고, 반응을 시험했고, 그 과정에서 자료를 얻었다. 이용파는 그 반복을 계약으로 받아들였다.
도경은 화면을 두 갈래로 나눴다. 왼쪽에는 세이렌의 조건 신호. 오른쪽에는 이용파의 반응 코다. 가운데에는 행동 결과만 놓았다. 언어가 아닌 것들 사이에서 계약이 생겼다. 서로 같은 문장을 들은 적 없는데도, 양쪽은 각자 원하는 문서를 서명한 셈이었다.
클릭, 클릭— 낮은 긴 울림 클릭, 클릭, 클릭 먼 거리 응답 — 침묵 빠른 꼬리음
해류가 붙인 임시 표지가 다시 올라왔다.
후보 이 구역 회피 시 손상 감소 보호 경계 유지 타 무리 경로 제공 오래된 울림 위치 제공
p 0.26 / 0.33 / 0.22 / 0.19
상태 상호 이득 구조 확인 의도 일치 확인 불가
의도 일치 확인 불가. 도경은 그 줄을 복사해 증거 묶음의 첫 장에 붙였다. 이 사건의 핵심은 누가 누구를 속였는가로 끝나지 않았다. 인간은 조건을 만들었다. 이용파는 관계를 만들었다. 그 틈에서 값이 오갔다.
아버지라면 이 지점에서 멈췄을까. 서도진은 기록을 닫고, 이름을 빼고, 위험한 줄만 숨겼을지 모른다. 도경은 오래된 생각을 밀어내며 파일명을 바꿨다. ‘거래’라는 단어는 남겼고, ‘계약’에는 물음표를 붙였다.
대가 항목은 완전히 열리지 않았다. 다른 무리의 이동로는 확인됐다. 오래된 울림의 위치는 좌표 일부만 보였다. 도경은 좌표를 더 파지 않았다. 지금 열면 다른 문서가 무너질 수 있었다. 필요한 것은 거래의 실체이지, 묻혀 있는 장소의 정체가 아니었다.
답은 충분히 불편했다. 세이렌의 운용은 결과적으로 이용이 되었고, 이용파의 정보 제공은 다른 무리의 위험을 대가로 삼았다. 의도까지 단정하기엔 아직 일렀다.
*
도경은 이랑의 최근 코다를 옆에 올려 두었다. 같은 방언권, 다른 무리, 다른 선택. 그렇게 적고도 손이 잠깐 멈췄다. 이랑에게 붙였던 기준이 너무 깨끗했는지 확인해야 했다.
이랑은 여러 번 경고했다. 손실을 줄이려 했고, 해류가 지운 줄을 다시 밀어 올렸다. 도경은 그 사실을 지우지 않았다. 그러나 이랑의 존재가 고래 전체를 대신하지도 않았다. 바다는 선한 증인을 보내 준 적이 없었다. 오직 서로 다른 생존 방식이 기록으로 남았다.
이용파는 다른 무리의 이동을 내줬다. 세이렌 표식 구역 안에서 자기 새끼들의 충돌률이 낮아진 뒤였다. 그 결과 바깥 무리의 위험은 커졌다. 도경은 숫자를 세 번 확인했다. 이용파의 손상률은 내려갔고, 표식 밖 두 무리의 회피 실패는 늘었다.
입력 이용파 손상률 변화 인접 무리 충돌 노출도 정보 제공 시점
요청 이득 편향 여부
상태 비교 실행
후보 무작위 변화 전체 무리 이득 이용파 편향 이득 계산 불가
p 0.06 / 0.18 / 0.69 / 0.07
도경은 화면에서 눈을 뗐다. 창밖으로 항만 크레인이 보였다. 쇠팔이 천천히 컨테이너를 옮기고 있었다. 멀리서 보면 질서였고, 가까이서 보면 한쪽 무게를 다른 쪽으로 넘기는 일이었다.
고래를 평화로운 현자처럼 부르는 말들이 떠올랐다. 연구비 설명회, 보도자료, 다큐멘터리 자막. 인간이 망친 바다와 그것을 견디는 오래된 지성. 도경도 그 이미지에 기대고 싶었던 적이 있었다. 인간 쪽 기록이 더러울수록 반대편이 깨끗하길 바랐다.
숫자는 그런 기대를 봐주지 않았다.
도경은 이랑의 파일에 손을 올렸다가 닫지 않았다. 믿음은 삭제할 항목이 아니었다. 다만 용도를 바꿔야 했다. 이랑이 보낸 경고가 진짜라는 사실과, 다른 고래 무리가 자기 몫의 안전을 위해 남의 길을 팔았다는 사실은 동시에 존재했다. 둘 중 하나로 다른 하나를 지울 수 없었다.
서도진의 기록도 늘 그런 식이었다. 아버지의 손글씨가 남은 방수 노트를 보면 미워하는 일이 흐트러졌다. 그러나 숨긴 파일 목록을 열면 그리움은 금방 부끄러운 물건이 됐다. 도경은 두 감정을 한 줄로 정리하지 못했다. 그래서 표를 만들었다. 표는 적어도 서로 다른 값을 한 칸에 우겨 넣지 않았다.
새 증거 묶음에는 세 줄을 넣었다.
세이렌: 조건화 신호를 안전 정보로 운용. 이용파: 이를 보호 관계로 해석한 행동 패턴. 대가: 타 무리 이동 정보 및 오래된 음향 위치 일부 제공.
도경은 ‘배신’이라고 쓰지 않았다. 그 단어는 너무 빨랐다. ‘결백’도 쓰지 않았다. 그 단어는 더 위험했다. 거래는 있었다. 서로 같은 거래라고 믿지 않았을 뿐이다.
그 문장을 저장하자 손끝에 힘이 들어갔다. 공개되면 이랑의 경고까지 의심받을 수 있었다. 인간 쪽은 말할 것이다. 고래도 팔았다. 그러니 세이렌만 나쁜 것이 아니다. 반대쪽은 말할 것이다. 인간이 먼저 유인했다. 그러니 고래는 피해자다.
둘 다 일부만 맞았다. 일부만 맞는 말은 전체를 망칠 때가 많았다.
*
저녁 조명이 켜지기 전, 우회선의 지연 시간이 갑자기 길어졌다. 도경은 전송을 멈추고 포트 상태를 열었다. 회선 그래프가 얇은 톱니처럼 흔들렸다. 누군가 외곽 노드를 하나씩 닫고 있었다.
아직 세이렌의 공식 차단은 아니었다. 승인된 절차라면 경고문이 먼저 왔을 것이다. 이건 비공식 탐지에 가까웠다 — 누군가 먼저 길을 좁혀 보는 손. 지금은 더 조용했다. 검증선과 보조 저장소 사이에 붙은 중계점들이 순서 없이 끊겼다 붙었다. 도경은 남은 대역폭을 계산했다. 증거 묶음을 통째로 내보내기엔 부족했다.
입력 우회선 상태 중계점 응답 지연 패킷 손실률 외부 접속 흔적
요청 차단 가능성 평가
상태 네트워크 진단
후보 장비 오류 자연 지연 표적 차단 내부 과부하
p 0.09 / 0.04 / 0.74 / 0.13
도경은 의자를 밀고 일어났다. 선실 바닥이 낮게 울렸다. 먼저 증거 해시를 분리했다. 원본 전체가 아니라, 기록이 변조되지 않았음을 증명할 최소 묶음. 그다음 세이렌 조건 신호와 이용파 반응 코다의 대응표만 압축했다. 오래된 위치 좌표는 제외했다. 지금 공개할 항목이 아니었다.
전송 창에 남은 시간은 표시되지 않았다. 대신 손실률 숫자가 올라갔다. 12퍼센트, 19퍼센트, 27퍼센트. 도경은 세 줄 요약을 별도 텍스트로 만들었다. 길면 죽는다. 짧아야 산다.
인간과 고래는 서로 다른 계약을 맺었다고 믿어 왔다. 세이렌은 조건화 신호를 보냈고, 이용파는 보호로 해석했다. 대가로 다른 무리의 이동 정보가 넘어갔다.
도경은 수신처를 나눴다. 하리시에게 전체 색인. 아마라에게 원신호 일부. 엘런에게 통계표. 서로 다른 사람이 서로 다른 조각을 갖게 해야 했다. 한곳이 막혀도 전체가 사라지지 않게.
전송 버튼을 누르자 첫 번째 패킷이 나갔다. 두 번째에서 지연. 세 번째에서 재시도. 화면 오른쪽에 낯선 접근 서명이 떴다. 세이렌의 낡은 감사 도구와 같은 구조였다. 이름은 달랐지만 손버릇이 같았다. 먼저 경로를 좁히고, 다음에 저장 권한을 흔든다.
도경은 로컬 잠금을 걸었다. 손목시계는 오늘도 풀려 책상 한쪽에 있었다. 금속 줄이 모니터 빛을 받아 차갑게 빛났다. 서도진의 버릇을 따라 하는 자신이 싫었지만, 이번에는 그대로 두었다. 자기장이 아니라 흔적 때문이었다. 무언가를 숨기던 손도 장비를 살리는 법은 알고 있었다.
우회선 상태가 다시 내려앉았다.
상태 중계점 셋 응답 없음 보조 저장소 쓰기 제한 외부 감사 프로세스 접근
⟨거부⟩ 원격 저장 경로 차단
도경은 마지막으로 남은 좁은 선에 해시와 대응표만 밀어 넣었다. 전송률은 느렸고, 차단은 빨랐다. 그래도 첫 조각은 넘어갔다. 화면에 수신 확인 하나가 떴다. 아마라의 키였다.
답은 나갔다. 인간과 고래는 같은 계약을 맺은 적이 없었다. 서로 다른 약속을 들었다고 믿은 채 값을 치렀다.
도경은 남은 로그를 로컬에 묶고, 역추적 창을 다시 열었다. 차단 프로세스가 우회선의 마지막 중계점으로 손을 뻗고 있었다. 끊기기 전까지 남은 것은 두 개의 열린 포트와, 아직 닫히지 않은 세이렌의 접근 흔적뿐이었다.
이 화, 어떠셨나요?
미리보기 — 댓글은 지금 이 브라우저에만 임시로 저장됩니다. 배포하면 Cloudflare에 저장됩니다.