우리는 오래 말해왔다
낮의 데이터룸은 관제실보다 차가웠다.
랙 뒤에서 팬이 돌았고, 바닥 아래 케이블 트레이가 낮게 울었다. 벽면 스크린에는 최근 열흘 치 해양 음향 자료가 펼쳐져 있었다. 선들은 대부분 평범했다 — 조류, 선박, 지진계에도 안 걸리는 얕은 흔들림, 멀리서 부서지는 파도. 그런데 특정 해역 하나에서만 바닥선이 자꾸 들렸다.
들린다는 말은 정확하지 않았다. 귀로는 거의 잡을 수 없었다. 파형의 밑부분이 아주 조금 부풀어 올랐다가, 일정한 간격으로 다시 가라앉았다. 소리라기보다 소리가 되기 전의 압력 같았다. 엘런은 세 번 확대해 보고서야 입을 열었다.
"반박자라. 우연이라기엔 규칙적이네."
도경은 대답하지 않았다. 커서가 해역 좌표 위에 멈춰 있었다. 오류로 보기엔 같은 모양이 너무 멀리 떨어진 센서들에서 함께 올라왔고, 사건으로 보기엔 너무 작았다. 아무도 이걸 경보라고 부르지 않았다. 경보엔 기준값이 필요했고, 이건 기준값 아래에서만 움직였다.
"장비 노화는?"
"두 개는 지난달 교체됐어. 하나는 독립망이고. 무허가 해저 작업이면 잡음이 더 지저분해야 하는데, 그렇지도 않아." 엘런은 팔짱을 낀 채 화면을 봤다. 그는 먼저 지우는 쪽에서 시작했다. 지울수록 남는 것이 무엇인지 보려는 방식이었다.
도경은 그 실시간 시연 때 쓰였던 코다 파일을 불러왔다. 그때는 "드디어 들리는군" 뒤로 긴 본론이 열리지 않았다. 낮은 음역이 지나치게 손상돼 있었고, 해류는 후보를 여러 갈래로 뿌린 뒤 멈췄다. 문장처럼 보이는 조각들은 있었지만 어디에도 걸리지 않았다. 시적이었고, 그래서 위험했다.
오늘의 파형은 달랐다. 최근 바다에서 올라온 그 작은 흔들림이, 미해독 구간의 빈자리와 같은 높이에서 떨고 있었다.
도경은 두 자료를 겹쳤다. 파란 선은 현재 관측값, 회색 선은 과거 코다의 손상 구간. 처음엔 아무것도 맞지 않는 것 같았다. 배율을 낮추고 시간축을 조금 밀자, 회색의 꺼진 바닥과 파란 선의 부푼 자리가 한 번, 두 번, 세 번 같은 곳을 지나갔다.
엘런이 숨을 작게 들이켰다. "이건 맞춘 거야, 맞은 거야?"
"아직 몰라." 도경은 그렇게 말하고도 손을 떼지 못했다. 과거의 고래 소리와 오늘의 바다가 같은 자리에서 떨고 있었다. 의미는 아직 없었다. 하지만 질문은 생겼다. 그때 열리지 않던 코다의 본론을, 오늘의 바다를 정답지로 쓰지 않고 다시 열 수 있을까.
*
엘런이 반증 목록을 만들겠다며 옆 실로 가자, 도경은 데이터룸에 혼자 남았다.
먼저 이름부터 붙였다. 최근 바다에서 올라온 그 미세 이상에 임시 라벨을 달았다. 0공명. 아직 아무것도 시작되지 않았다는 뜻이자, 무언가 시작되기 전의 숫자였다. 그리고 도경은 그 파일을 검증 세트로 따로 잠갔다. 지금부터 복원에는 넣지 않는다. 현재의 바다에 끌려 만들어진 문장이라면 나중에 반드시 들통나야 했다 — 끌려온 답은 원본을 빼는 순간 무너지니까. 며칠째 몸 어딘가에 눌러 온 것이 아직 남아 있었지만, 지금 그걸 꺼낼 자리는 없었다. 개인적인 문장은 개인적인 칸에 넣어 두어야 했다.
도경이 해류에게 준 것은 오늘의 바다가 아니라 그 시연의 미해독 코다 그 자체였다. 손상된 낮은 음역, 문장으로 묶이지 못한 조각들. 대신 조건을 하나 걸었다 — 외부 자료 없이, 코다 안에서 같은 구조가 스스로 몇 번이나 반복되는지만 보라고. 화면엔 막대가 아니라 작은 점들이 낮은 쪽에서부터 하나씩 켜졌다. 손상 때문에 문장으로 묶이지 못했던 부분들이었다.
입력 시연 코다 미해독 구간 · 내부 반복 정렬 (현재 자료 제외) 후보 우리는 --- 동안 ---- 경고하고 있었다 p 0.41 상태 수량 표현 불안정
빈자리는 코다 바깥이 아니라 코다 안에서 채워졌다. 같은 저주파 마디가 손상 구간을 사이에 두고 세 번, 다섯 번 되풀이됐고, 그 반복의 홈에 맞는 조각이 뒤늦게 들어갔다. 목적어가 붙었다. 너희에게. 해류가 단어를 발명한 게 아니라, 오래전부터 거기 있던 홈이 조각을 불러들이는 것 같았다.
숫자가 남았다. 그리고 숫자는 가장 미끄러운 부분이었다. 도경은 그 수를 현재 파형에서 뽑지 않기로 했다 — 그러면 다시 오늘의 바다에 답을 물어보는 셈이었다. 대신 반복 그 자체를 셌다. 경고의 마디는 한 겹이 아니라 여러 겹으로 포개져 있었고, 각 겹은 조금씩 다르게 마모돼 있었다. 해류는 그 마모의 층위를 세대 간격으로 환산했다. 후보가 세로로 섰다 — 1만, 2만, 3만, 8만. 신뢰도는 엇비슷했다. 층을 더 넣자 가운데가 조금 두꺼워졌지만, 그뿐이었다. 도경은 3만에 잠정 표시만 하고 '세부 불확실'을 나란히 적었다. 지금 필요한 건 그 수가 정확한지가 아니라, 경고라는 구조가 코다 안에서 스스로 반복되는지였다. 그리고 그건 반복됐다.
조건을 흔들었다. 손상 구간을 다르게 자르고, 정렬 기준을 바꾸고, 반복 층을 하나씩 빼 봤다. 숫자부는 매번 흔들렸다. 그러나 '우리 — 오래 — 너희에게 — 경고'라는 뼈대는 무너지지 않았다.
입력 재구성 완료 (현재 자료 미투입) 구조 코다 내부 반복 확인 상태 대표 문장 생성 가능 · 수량 세부 불확실 잔존
도경은 대표 문장 줄을 펼쳤다.
우리는 3만 년 동안 너희에게 경고하고 있었다.
데이터룸의 공기가 무거워졌다. 문장은 소리를 내지 않았는데도 방 어딘가에서 낮게 울리는 것 같았다. 어디에도 비유처럼 보이는 말은 없었다. 너무 직접적이라 오히려 믿기 어려웠다. 경고라는 단어가 문장 한가운데 박혀 있었다.
즉시 저장하지 않았다. 로그를 복제하고, 번역 모델과 파라미터를 고정하고, 같은 입력을 새 세션에서 다시 돌렸다. 같은 방식으로만 맞는 문장은 위험했다. 두 번째 세션은 더 느렸지만, 거의 같은 위치에서 같은 뼈대가 올라왔다. 숫자부의 신뢰도는 여전히 완벽하지 않았고, 경고의 구조는 흔들리지 않았다. 그리고 이 문장은 오늘의 바다를 한 번도 보지 않고 나온 문장이었다.
도경은 그제야 저장 버튼을 눌렀다. 문장은 더 이상 시가 아니었다. 적어도, 시로만 남길 수는 없었다.
*
엘런은 돌아오자마자 세 가지를 지웠다. 센서 동기화 오류, 특정 선박의 반복 항로, 해저 지형이 만든 정상 공명. 각각을 화면 왼쪽에 올리고 자료를 붙이고 지워지는 이유를 짧게 적었다. 도경은 그가 지울수록 오른쪽의 상관값이 올라가는 것을 봤다.
"싫은데." 엘런이 말했다.
"뭐가."
"내가 반박할수록 네 쪽이 좋아져." 그는 현재 관측값에서 가장 의심스러운 센서 하나를 뺐다. 보통 그런 센서를 빼면 우연히 맞아 보이던 모양이 사라진다. 그런데 이번엔 반대였다. 지저분한 가장자리가 빠지자, 과거 코다의 낮은 음역과 오늘의 0공명이 더 정확히 겹쳤다. 엘런은 말을 멈췄다.
도경은 아카이브를 열었다. 그 시연 파일과 같은 계열이지만 당시엔 참고 자료로만 묶였던 발췌들이었다. 오래된 관측소, 해상 연구선, 심해 마이크에 우연히 들어간 고래 코다. 대부분 너무 짧거나 손상돼 번역 대상에서 밀려났던 것들. 그중 낮은 바닥 울림이 남은 것만 추렸다. 여섯 건이 남았고, 서로 다른 시기, 서로 다른 바다에서 왔다. 같은 고래도, 같은 집단의 기록도 아니었다. 그래서 더 나빴다 — 같은 출처가 아니어야, 같은 오류도 아니었다.
세 번째 발췌에서 문장 구조가 붙었다.
후보 첫 ---- 전에도 바다는 지금과 같은 소리를 냈다 p 0.47 상태 명사부 불확실
엘런이 즉시 끼어들었다. "잠깐. '지금'이라는 단어는 현재 자료를 넣었기 때문에 생긴 오염일 수 있어."
맞는 지적이었다. 도경은 현재 0공명 입력을 빼고 발췌들끼리만 대조했다. 현재 자료에 끌려 생긴 말이라면, 문맥을 빼는 순간 버티지 못해야 했다. 결과가 다시 떴다 — "첫 침묵 전에도 바다는 --- 같은 소리를 냈다." '지금'은 빠졌지만 나머지 구조는 남았다. 다시 현재 자료를 넣자 빠졌던 지시어가 제자리로 돌아왔다. 세 번을 반복했다. 들어오면 붙고, 빠지면 비었다. 문장 전체가 현재에 오염된 게 아니라, 오래된 문장이 현재의 소리를 가리킬 자리를 남겨 둔 것 같았다.
도경은 대표 문장을 펼쳤다.
첫 침묵 전에도 바다는 지금과 같은 소리를 냈다.
엘런이 화면 가까이 몸을 기울였다. "첫 침묵이 뭔데."
"몰라." 도경은 바로 대답했다. 모르는 것은 모른다고 해야 했다. 지금 확인된 것은 명칭뿐이었고, 그것이 가리키는 걸 지금 꺼내려 하면 확인되지 않은 이야기로 넘어간다. 다만 이름을 모른다고 해서 소리가 사라지는 것도 아니었다.
도경은 두 파형을 다시 겹쳤다. 오래된 발췌의 낮은 선과, 오늘 바다에서 올라온 0공명. 완전히 같진 않았다 — 살아 있는 바다는 복사본처럼 반복되지 않는다. 그래도 부푸는 자리, 가라앉는 자리, 다음 떨림까지의 간격이 같은 문법을 가졌다.
엘런은 이번엔 반박하지 않았다. 대신 계산 창을 하나 더 띄워 무작위 해역 자료 천 건을 대조했다. 상관값의 분포가 바닥에 깔렸고, 그 위로 현재 해역의 값이 혼자 튀어 올라 있었다. "우연이라고 부르기엔," 엘런이 말했다. "대조군에서 너무 멀리 나와 있어."
도경은 대답하지 못했다. 전율은 이미 지나갔고, 남은 것은 공포였다. 문장이 맞아서가 아니었다. 바다가 지금, 그 문장 안에 들어와 있어서였다.
*
저녁이 되자 유리벽 밖이 어두워졌다.
원격 회의 창에 세 명의 얼굴이 떴다. 도경은 대표 문장 두 개와 검증 표, 센서 제거 전후의 상관값, 발췌 대조 결과를 순서대로 공유했다. 설명은 짧게, 현상부터 했다. 특정 해역의 미세 음향 이상. 과거 미해독 코다의 내부 반복만으로 복원한 경고 문장. 그 문장이 남겨 둔 자리에 오늘의 바다가 뒤늦게 들어맞은 것. 반증 시도. 예상과 반대로 강화된 상관성. 회의 창은 한동안 조용했고, 숫자들이 대신 말했다.
"이건 발표하면 안 됩니다." 음성만 켠 누군가가 말했다. "적어도 아직은."
엘런이 바로 고개를 들었다. "안 된다는 말은 틀렸어. 지금 말할 수 있는 범위가 어디까지냐를 정해야지."
"문장까지 공개하면 해석이 먼저 퍼질 겁니다."
"문장을 빼면 그냥 미세 음향 이상 보고서가 돼."
"검증이 더 필요해요." 다른 연구원이 말했다. "독립 관측소 자료를, 최소 일주일."
"일주일 뒤에도 같은 소리가 나면?" 엘런이 물었다. 대답이 늦었다. "그때 논의합시다."
도경은 그 말에 걸렸다. 그때. 과학은 늘 그때를 요구했다 — 더 많은 자료, 더 긴 시간, 더 좁은 오차. 도경도 그 요구로 살아왔다. 하지만 오늘의 자료는 이상한 방식으로 충분했다. 완전해서가 아니라, 불완전한 채로 같은 방향을 가리켰기 때문이었다. 지울수록 남고, 흔들수록 드러났다.
"우리가 아는 것만 말하면 됩니다." 도경은 천천히 말했다. 목소리가 생각보다 낮게 나왔다. "기준값 아래의 반복 음향 이상이 관측됐고, 그 패턴이 과거 미해독 코다의 낮은 음역과, 무작위 대조군보다 뚜렷하게 높은 상관을 보입니다. 경고 구조는 코다 내부 반복만으로 복원됐고 — 현재 자료는 빼고요. 그 문장이 남긴 지시어 자리에만 오늘의 바다가 들어왔다 나갔다 하고요. 서로 다른 시대 발췌에서도 같은 저주파 구조가 확인됐어요. 모르는 건 모른다고 붙이면 됩니다. 하지만 아는 것까지 묻어 두는 건 다른 문제예요."
회의 창의 얼굴들이 굳었다. "서 박사님, 그건 사실상 공개 제안입니다."
도경은 화면 오른쪽 아래의 두 선을 봤다. 파란 선이 조금 늦게 올라갔다가 회색 선과 거의 같은 자리에서 내려왔다. 아주 작은 소리였다. 경보보다 낮고, 뉴스보다 낮고, 사람의 말보다 낮았다. 그래서 더 오래 버틴 소리일지도 몰랐다.
"제안이 아니라 결과입니다."
엘런이 지친 사람의 숨을 내쉬었다. "나는 신중하자는 쪽이야. 그런데 신중하다는 말이 멈춘다는 뜻이면, 그건 방법론이 아니야."
다시 침묵이 왔다. 이번 침묵은 빈칸이 아니라, 각자가 이미 다음 문장을 알고 있어서 먼저 말하지 않으려는 침묵이었다. 화면의 두 문장은 이제 해석이 아니라 검증 가능한 주장이었다. 틀렸는지 확인하기 위해서라도 더 넓은 바깥이 필요했다.
도경은 공유 폴더 권한을 제한 공개로 바꾸는 요청서를 열었다. 아직 제출하지 않았다. 커서가 마지막 확인 버튼 위에서 깜박였다.
복도에 불이 하나씩 켜졌다. 데이터룸 안에서는 팬 소리와 서버의 낮은 진동만 계속됐다. 도경은 마지막으로 파형을 확대했다. 오래된 선과 오늘의 선이 화면을 가득 채웠다. 두 선은 완전히 하나가 되지 않았다. 그러나 같은 곳에서 떨고, 같은 곳에서 멈칫하고, 같은 어둠을 향해 내려갔다.
1차 검증은 통과했다. 그래서 더 위험해졌다.
이 화, 어떠셨나요?
미리보기 — 댓글은 지금 이 브라우저에만 임시로 저장됩니다. 배포하면 Cloudflare에 저장됩니다.