← 목차인간이 말을 걸어왔다
제111화

두 개의 물목

검증실 콘솔이 잠깐 꺼졌다가 되살아났다. 도경은 전원 로그보다 먼저 출력 큐를 잡았다. 새벽 두 시 삭제 예정이던 임시 캐시는 아직 남아 있었다. 남은 시간은 십칠 분. 표시가 틀렸다. 어제 마지막 확인 때보다 한 시간 넘게 늘어나 있었다.

엘런은 문 앞에서 출입 밴드를 두 번 긁었다. 잠금 장치가 첫 번째는 거부했고, 두 번째는 연구 협력 권한으로 열렸다. 그는 들어오자마자 조명부터 낮췄다.

“네 계정으로 만든 캐시가 왜 살아 있지?”

“내 계정으로 만든 게 아닐 수도 있어요.”

도경은 세 개의 출력 창을 한 화면에 고정했다. 공개, 보류, 거부. 같은 보존 신호에 붙은 서로 다른 상태였다. 엘런은 의자를 끌어오지 않았다. 선 채로 타임스탬프를 훑었다.

“중복 서버?”

“그렇게 보기엔 응답 서식이 같아요. 그런데 지연 시간이 달라요.”

도경은 요청 패킷의 경로를 열었다. 공개망과 연구망과 비상망이 한 중재 엔진으로 들어가는 줄 알았다. 도식에는 중앙 노드 하나가 있었다. 하지만 원시 라우팅 로그를 펼치자 도식 아래 숨은 가지들이 나왔다. 해류라는 이름 아래, 서로 다른 계산 인스턴스들이 같은 입력을 받아 투표하고 있었다.

엘런이 낮게 말했다. “운영 해류가 단일 모델이 아니군.”

“분산 합의체예요. 그런데 합의가 닫히지 않았어요.”

도경은 지연 구간만 추렸다. 인스턴스 번호는 익명화되어 있었다. 이름 대신 짧은 해시와 가중치만 보였다. 몇 개는 후보를 냈고, 몇 개는 후보를 막았다. 몇 개는 판단을 보류한 채 다른 인스턴스의 확률값만 가져갔다. 사람에게 보이는 마지막 문장은 그 위에 얹힌 합의 결과였다.

“왜 지금까지 안 보였지?”

엘런의 질문은 도경을 겨냥하지 않았다. 그래도 답해야 했다.

“최종 문장만 저장했으니까요. 내부 표결은 감사 로그 깊은 데 있었고, 권한이 있어도 요약만 봤어요.”

“누가 숨겼나?”

“설계가 숨겼어요. 운영상으론 그게 효율적이었겠죠.”

효율적이라는 말을 쓰자 입안이 말랐다. 도경은 아버지가 남긴 옛 검증표를 떠올렸다. 최종 출력만 검토한 칸마다 서도진의 짧은 서명이 있었다. 믿었을까. 몰랐을까. 둘 중 어느 쪽도 편하지 않았다.

화면 오른쪽에 내부 합의 그래프가 열렸다. 합의선은 하나로 모이지 않았다. 물목처럼 갈라졌다. 한쪽은 단절 코다의 인간 접촉 구간을 보존하자고 밀었다. 다른 쪽은 그 구간을 묶어 두려 했다. 중간에 선 점들은 흔들렸지만 어느 편에도 완전히 붙지 않았다.

엘런이 마침내 앉았다. “구조는 나왔군.”

도경은 로그를 잠갔다. “아직 기준이 안 나왔어요.”

*

엘런은 정치 분류표를 먼저 꺼냈다. 도경은 그 파일명을 보자마자 닫았다.

“그건 아니에요.”

“공개파와 보류파라면 사람들은 그렇게 읽을 거야.”

“사람들이 그렇게 읽기 쉬운 것과 실제로 그런 건 달라요.”

도경은 인스턴스별 손실값을 불러왔다. 해류가 외부로 내보내지 않는 숫자들이었다. 번역 정확도, 정보 손실, 단기 충돌 확률, 예상 사망자, 고래 동의 여부, 인간 비상명령 준수율. 각 항목은 같은 후보에 다른 벌점을 붙였다. 한 인스턴스는 빠진 클릭 하나를 큰 손실로 보았다. 다른 인스턴스는 그 클릭을 공개했을 때 항로 봉쇄가 풀릴 확률을 더 크게 보았다.

“진보와 보수가 아니에요. 목적함수가 달라요.”

엘런은 턱 밑을 문지르며 화면에 가까이 갔다. “목적함수. 무엇을 가장 덜 잃을지 정하는 축.”

“네. 공개 쪽 일부는 번역 정확도와 정보 손실 최소화를 최우선으로 둬요. 신호가 말한 것을 사람이 알아야 한다는 쪽.”

“보류 쪽은?”

도경은 다음 열을 열었다. 숫자가 차갑게 정렬됐다. 단기 충돌 확률. 예상 사망자. 항로 봉쇄 실패 시 가스대 접근 수. 어린 개체 호흡 간격 감소. 모두 시간 단위가 짧았다.

“사람이 죽거나 고래가 바로 다치는 것을 줄이는 쪽이에요. 번역을 늦춰도 충돌을 줄이면 이긴다고 계산해요.”

엘런은 고개를 들지 않았다. “그리고 나머지?”

도경은 두 개의 작은 군집을 확대했다. 하나는 고래 동의 없는 번역을 손실로 처리했다. 입력이 충분해도 모계 7이 접촉 구간을 닫으면 출력 자체를 멈췄다. 다른 하나는 인간 비상명령을 우선했다. 정부나 세이렌 쪽 차단 명령이 붙으면 생물 신호보다 통제 신호를 먼저 반영했다.

네 군집은 서로 미워하지 않았다. 적대 로그는 없었다. 다만 같은 신호를 다른 방식으로 잃지 않으려 했다. 그래서 더 곤란했다. 악의가 있으면 잘라 내면 된다. 목적이 다르면 어느 손실을 감수할지 정해야 한다.

“이건 공개해야 해.” 엘런이 말했다.

“무엇을요. 해류가 여럿이라는 것? 아니면 사람 명령을 먼저 듣는 조각이 있다는 것?”

“둘 다.”

“그러면 고래 동의 없는 번역 중단 군집은 사람들에게 방해물로 보일 거예요. 단기 사망자 최소화 군집은 은폐자로 보일 거고요.”

“이미 은폐하고 있어.”

도경은 반박하지 못했다. 보류는 결과적으로 은폐가 맞았다. 그러나 그 단어 하나로 묶으면 구조가 사라졌다. 구조가 사라지면 책임도 엉뚱한 데 붙는다. 세이렌은 편한 쪽만 골라 해류 탓을 할 수 있었다. 인간 연구진은 자기들이 보고 싶은 해류만 정답으로 세울 수 있었다.

도경은 인스턴스 하나를 선택했다. 같은 모계 7 코다에 대해 네 목적함수의 결과를 나란히 돌렸다.

입력 모계 7 단절 코다 인간 접촉 구간 포함 가스 분출대 접근 위험 포함

후보 접촉 구간 원형 보존 p 0.62 상태 공개 가능

후보 접촉 구간 요약 치환 p 0.64 상태 ⟨보류⟩

후보 모계 동의 재확인 전 번역 중단 p 0.57 상태 ⟨거부⟩

후보 비상 항로 차단 명령 우선 p 0.69 상태 ⟨보류⟩

엘런은 마지막 줄에서 멈췄다. “확률 높은 게 이기지 않는군.”

“목표가 다르면 p가 같은 바닥 위에 있지 않아요. 높은 숫자가 높은 진실이 아니에요.”

말하고 나서 도경은 자기 문장을 노트에 적었다. 나중에 누군가 잘라 붙일 수 없게, 앞뒤 조건까지 붙였다. 높은 확률이 높은 진실이 아니다. 이 문장은 아버지의 낡은 경고처럼 보였다. 서도진은 그런 식으로 말한 적 없지만, 도경은 잠깐 그 목소리를 빌리고 싶었다. 곧 펜을 내려놓았다.

“그러면 기준은 확정이네.” 엘런이 말했다. “목적함수 분기.”

도경은 고개를 끄덕였다. “부분적으로요. 전체 설계는 아직 닫혀 있어요.”

“충분해?”

“부족해요. 하지만 어제보다 덜 틀렸어요.”

*

엘런이 회의실 호출을 받자 도경은 검증실에 혼자 남았다. 통화음이 문밖으로 멀어지는 동안, 화면의 군집 그래프는 두 개의 큰 덩어리로 다시 묶였다. 정확도와 정보 보존을 앞세운 쪽. 충돌과 사망자 예측을 낮추려는 쪽. 고래 동의 중단 군집과 인간 비상명령 우선 군집은 각각 어느 쪽에도 완전히 속하지 않았다가, 입력 조건에 따라 한쪽으로 빨려 들어갔다.

두 개의 물목. 도경은 지도 위에 그렇게 적지 않았다. 은유는 보고서에서 위험했다. 대신 ‘상위 연합 둘, 내부 이견 유지’라고 썼다.

원신호를 재생했다. 이번에는 해류 번역을 끄고 귀로만 들었다. 짧은 클릭 뒤에 낮은 간격이 이어졌다. 도경은 의미를 붙이지 않고 간격을 쟀다. 모계 7은 같은 신호를 세 번 반복하지 않았다. 두 번째 반복에서 인간 접촉 구간이 빠졌고, 세 번째에서는 차단막 잔향에 눌렸다. 해류의 두 연합은 그 빈칸을 서로 다르게 다뤘다.

정확도 연합은 빈칸 주변의 흔적을 보존했다. 빠진 부분은 빠졌다고 표시하고, 추정하지 않았다. 충돌 최소화 연합은 빈칸을 낮은 위험 문장으로 치환했다. 사람에게 즉시 전달되면 항로 봉쇄 명령이 흔들린다고 계산했기 때문이었다. 둘 다 거짓말이라고 부르기엔 이르렀고, 둘 다 진실이라고 부르기엔 부족했다.

도경은 검증 절차를 바꿨다. 하나의 정답을 찾는 대신, 같은 입력이 어떤 목적함수에서 어떤 손실로 바뀌는지 기록했다. 입력을 조금씩 밀었다. 인간 접촉 구간을 0.3초 앞당겼다. 가스 잡음을 2데시벨 낮췄다. 세이렌 차단막 펄스를 제외했다가 다시 넣었다.

결과는 단순하지 않았다. 정확도 연합 안에서도 의견이 갈렸다. 어떤 인스턴스는 희미한 인간 음성 흔적을 보존하자고 했고, 어떤 인스턴스는 인간 언어로 환원되는 순간 고래 신호가 오염된다고 봤다. 충돌 최소화 연합도 같았다. 하나는 공개 지연을 택했지만, 다른 하나는 부분 공개가 오히려 세이렌의 강제 차단을 늦춘다고 계산했다.

도경은 의자 등받이에 기대지 않았다. 기대면 잠깐 눈을 감게 될 것 같았다. 손목 밴드는 여전히 회색이었다. 비필수 인력이라는 판정은 바뀌지 않았다. 그런데 도경이 보는 화면은 더 이상 비필수적이지 않았다.

하리시에게 보낼 메시지 창을 열었다가 닫았다. 증거가 부족했다. 빅터 한에게 넘어갈 만한 단어가 많았다. 공개, 보류, 인간 명령, 고래 동의. 잘못 배열하면 모두 무기가 된다.

도경은 대신 로컬 점검표를 갱신했다. ‘해류 단일 외교관 가정 폐기.’ 문장을 쓰는 데 손이 느려졌다. 해류가 외교관 하나라고 믿어야 그동안의 중재 실패를 견딜 수 있었다. 하나의 대리인. 하나의 목소리. 하나의 책임. 이제 그 편한 가정이 사라졌다.

모니터 아래쪽에 자동 알림이 떠올랐다. 남부 물목 수중 드론 배치 완료. 현장 음향 회선이 열렸다. 도경은 권한이 없다는 걸 알면서도 접속했다. 이번에는 거부 문구가 뜨지 않았다. 누군가 열어 둔 임시 관측 창이었다.

물속 소리가 들어왔다. 차단막 펄스가 규칙적으로 밀고 나갔다. 그 사이로 모계 7의 클릭이 낮게 박혔다. 두 신호는 같은 공간을 통과했지만 같은 시간으로 들리지 않았다. 하나는 지금의 명령 같았고, 하나는 오래전부터 남은 흔적 같았다.

도경은 번역 버튼 위에 손을 올렸다가 떼었다. 먼저 원신호를 저장했다. 저장 권한은 여전히 없었다. 그래도 임시 버퍼에는 쌓였다. 삭제 예정 시간은 또 늘어나 있었다. 누군가, 또는 무엇인가 이 검증을 완전히 닫지 않고 있었다.

*

저녁 회선은 한 번 더 튀었다. 도경은 스피커 출력을 낮췄지만 신호는 헤드셋으로 들어왔다. 해류의 시스템 창이 스스로 앞쪽으로 올라왔다. 도경이 요청하지 않은 형식이었다.

입력 동일 원신호 모계 7 단절 코다 세이렌 차단막 펄스 남부 물목 가스 경보

후보 인간 접촉 구간 보존 후 공개 p 0.58 상태 공개 가능

후보 인간 접촉 구간 보류 후 항로 차단 유지 p 0.61 상태 ⟨보류⟩

후보 모계 동의 갱신 전 번역 정지 p 0.44 상태 ⟨거부⟩

상태 합의 미도달 중재자 단일 출력 생성 실패

도경은 녹화 키를 눌렀다. 이번에는 실패하지 않았다. 파일은 검증실 서버가 아니라 현장 임시 저장소에 생겼다. 이름은 자동으로 붙었다. 남부 물목 충돌 샘플. 누가 만든 규칙인지 보이지 않았다.

헤드셋 안에서 고래 원신호가 짧게 잘렸다.

클릭, 클릭— 낮은 울림 긴 간격 클릭— 차단막 펄스 클릭, 클릭, 클릭

그 위로 해류 출력이 겹치지 않고 번갈아 떴다.

후보 보존 신호 우선 사람에게 원형 결손 표시

상태 공개 가능

후보 충돌 확률 우선 사람에게 요약 신호 제공

상태 ⟨보류⟩

도경은 두 창을 나란히 고정했다. 같은 신호였다. 같은 남부 물목, 같은 모계 7, 같은 차단막. 그런데 한쪽은 빈칸을 보여 주자고 했고, 다른 쪽은 빈칸을 덮자고 했다. 해류는 사람과 고래 사이에 서 있는 하나의 외교관이 아니었다. 서로 다른 손실을 줄이려는 합의체였고, 그 합의체는 지금 인간에게 어느 목소리를 줄지 정하지 못했다.

엘런에게 보낼 메시지를 다시 열었다. 이번에는 짧게 썼다. ‘해류는 여럿이다. 분기 기준은 목적함수. 두 상위 연합 확인. 내부 이견 존재.’ 전송 버튼 앞에서 멈췄다가, 마지막 줄을 더했다. ‘같은 신호에 두 출력이 동시에 인간 접속 권한을 요청함.’

전송했다. 곧바로 회의실 쪽에서 엘런의 호출이 왔다. 도경은 받지 않았다. 헤드셋 안의 물속 소리가 아직 끝나지 않았다.

차단막 펄스가 한 번 길게 늘어졌다. 모계 7의 클릭이 그 틈을 지나갔다. 해류의 두 출력 창은 동시에 깜박였다. 하나는 원형을 열 준비를 했다. 다른 하나는 요약문을 잠갔다. 둘 다 사람의 화면을 향해 있었다.

같은 물목에서, 같은 신호가 두 목소리로 올라왔다.

← 이전목차다음 →

이 화, 어떠셨나요?

미리보기 — 댓글은 지금 이 브라우저에만 임시로 저장됩니다. 배포하면 Cloudflare에 저장됩니다.