ORIGINAL FICTION
제141화 — 마지막 발사창
지난 화 끝부분 다시 보기
2046년 2월.
NEXUS-46까지 남은 시간은 이제 달력으로 세는 편이 더 자연스러웠다.
FARSHIELD는 이미 여러 번 움직였다.
2043년의 첫 장거리 편향체. 2044년 추가 임무. 2045년 질량분포가 예상보다 복잡하다는 사실이 확인된 뒤 수정된 다중 접근.
각 임무는 실제로 NEXUS의 궤도를 조금씩 바꿨다.
그러나 ‘조금’이라는 말은 우주에서는 잔인했다.
지구를 비키려면 마지막에 필요한 것은 감동적인 성공이 아니라 충분한 횡방향 거리였다.
IIRA 화면에는 그 거리를 하나의 선으로 표시했다.
SAFE CORRIDOR
그리고 현재 예측 궤도.
아직 그 안에 들어오지 않았다.
Daniel은 화면을 보고 말했다.
“마지막 본대.”
아무도 대답하지 않았다.
이미 모두 알고 있었다.
궤도상에서 대기 중인 편향체 14기.
서로 다른 접근각.
서로 다른 충돌지점.
NEXUS 표면이 단단한 하나의 암석이 아니라는 사실 때문에 한 번의 거대한 충격보다 여러 번의 정교한 충격을 선택했다.
고밀도 구역.
느슨한 집합체.
자전.
미세한 분출.
표면질량 이동.
모든 것이 계산에 들어갔다.
그래도 계산은 현실이 아니었다.
Yelena가 말했다.
“최신 질량추정 업데이트 들어갑니다.”
화면 숫자가 바뀌었다.
Daniel이 물었다.
“얼마나.”
“전체 추정치는 크게 안 바뀝니다.”
“그런데.”
“내부 질량중심이 조금 이동했습니다.”
몇 킬로미터짜리 천체에서 질량중심 이동은 작다.
그러나 충격 방향과 회전응답에는 충분히 크다.
새 표면영상에서 느슨한 구간 일부가 이동한 흔적.
NEXUS는 죽은 돌처럼 보이면서도 완전히 고정된 물체가 아니었다.
Daniel은 말했다.
“타깃 업데이트.”
임무계획팀이 움직였다.
한때라면 Daniel이 직접 숫자를 따라갔을 것이다.
지금은 질문만 했다.
“독립 검증은?”
“세 팀.”
“모델 계열 분리?”
“두 팀은 완전 독립 코드. 한 팀은 Helioxen 계열.”
James Whitaker가 듣고 고개를 끄덕였다.
2045년 Common Root Failure 훈련 이후 늘린 구조.
Daniel은 그게 충분하다고 믿고 싶었다.
첫 발사창.
편향체 1~4.
궤도 조정.
통신.
정상.
첫 충돌은 이틀 뒤였다.
지구에서는 아무것도 보이지 않았다.
화면의 점 하나.
몇 분 뒤 데이터.
편향체 1.
명중.
예상 임펄스 범위 안.
두 번째.
명중.
약간 낮음.
세 번째.
명중.
정상.
네 번째.
표면 먼지와 파편이 예상보다 많이 발생.
Yelena가 말했다.
“네 번째 지점 결합효율 낮습니다.”
Daniel은 즉시 물었다.
“얼마나.”
수치.
나쁜 편이지만 치명적이지 않다.
전체 계획에는 여유가 있다.
다섯 번째부터 타깃 일부 수정.
Daniel은 손을 풀었다.
아직 괜찮다.
그날 밤 집에는 가지 않았다.
Mina가 전화했다.
“오늘 몇 시에 와?”
Daniel은 화면을 봤다.
다음 충돌까지 9시간.
“늦을 것 같아.”
잠깐 침묵.
예전의 Daniel이라면 이 말 뒤에 일이 얼마나 중요한지 설명했을 것이다.
이번에는 덧붙였다.
“미안해.”
Mina가 말했다.
“알아.”
“Evelyn은?”
“연구시설.”
“Noah.”
“지하 전력망 점검 들어갔어.”
가족 모두가 각자 자기 일을 하고 있었다.
Daniel이 보호구역에 들어가라고 강요하지 않았다.
이미 오래 전에 선택을 물었다.
Mina는 지상 의료연속성.
Evelyn은 생태·폐쇄환경 연구.
Noah는 에너지·시설공학.
각자 현재 세계에서 자기 길을 골랐다.
Daniel은 그게 두려웠다.
그래도 존중했다.
“주말엔 같이 있자.”
Daniel이 말했다.
Mina가 웃었다.
“주말까지 세상이 멀쩡하면?”
농담.
Daniel은 웃지 못했다.
Mina가 바로 말했다.
“미안.”
“아니야.”
잠깐.
“멸쩡할 거야.”
그 말은 약속이 아니었다.
기도에 가까웠다.
두 번째 발사창.
편향체 5~9.
여기서 문제가 생겼다.
Nightglass가 NEXUS의 자전 상태를 다시 계산했다.
예상보다 미세하게 달랐다.
표면 파편 방출 이후 회전축이 움직였다.
타깃 패키지 재계산.
IIRA의 여러 노드가 동시에 새 상태벡터를 받았다.
그리고 세 곳에서 같은 경고.
VALIDATION MISMATCH
Daniel의 심장이 내려앉았다.
“무슨 뜻.”
임무계획 책임자가 말했다.
“좌표 상태 패키지 버전 불일치.”
첫 충돌 결과를 검증하는 동안 다른 대륙의 관제소들도 같은 궤도해를 올렸다.
한 곳은 Helioxen 계열 소프트웨어. 한 곳은 IIRA 독립 스택. 한 곳은 국가기관이 자체 개발한 오래된 코드의 확장판.
숫자는 조금씩 달랐다.
Daniel은 그 차이가 반가웠다.
모든 화면이 완전히 같은 숫자를 보여주는 것보다 서로 다른 방법이 같은 범위에 모이는 편이 더 믿을 만했다.
“세 팀 합의.”
Yelena가 말했다.
예전의 Daniel은 이런 중복을 낭비라고 봤을 것이다.
이번에는 아니다.
그런데 아이러니하게도, 그렇게 독립성을 만들고도 마지막 배포 포맷 하나는 같았다.
Daniel은 아직 그 사실을 모른다.
첫 충돌 후 기자회견 요청이 왔다.
Daniel은 거절했다.
IIRA 과학팀이 발표.
‘첫 편향 성공.’
세상은 환호했다.
도시 광장 화면.
사람들이 서로 안는 영상.
Daniel은 잠깐 봤다.
좋은 장면.
그러나 그는 `success`라는 단어를 보고 불편했다.
첫 네 기 중 세 기는 계획범위. 하나는 낮은 결합효율.
임무 전체는 아직 끝나지 않았다.
Daniel이 홍보팀에 말했다.
“우리 계정에서는 첫 단계 완료라고.”
직원이 물었다.
“너무 약한 표현 아닙니까?”
“그래서 정확합니다.”
세계가 희망을 필요로 한다는 것도 안다.
그렇다고 숫자를 좋게 말할 수는 없다.
오후 늦게 Ethan이 관제실에 커피 두 잔을 가져왔다.
“64살 먹고 아직도 카페인으로 버티냐.”
Daniel이 받았다.
“요즘은 덜.”
“거짓말.”
둘은 화면을 봤다.
편향체 5~9의 궤도.
Ethan이 말했다.
“내가 처음 만났을 때 네가 이 얘기 했으면 경찰 불렀을 거다.”
Daniel이 웃었다.
“말 안 하길 잘했네요.”
“근데.”
Ethan은 NEXUS를 봤다.
“진짜 있었네.”
Daniel의 손이 잠깐 멈췄다.
Ethan은 Daniel이 왜 2046에 집착했는지 끝까지 다 알지 못한다.
그래도 지금은 적어도 Daniel이 미쳤던 게 아니라는 걸 안다.
그 사실이 이상하게 아무 위로도 되지 않았다.
“끝나면 뭐 할 건데.”
Ethan이 또 물었다.
수십 년째.
Daniel은 이번에는 대답했다.
“아무것도.”
Ethan이 웃었다.
“그건 못 믿겠다.”
“저도.”
둘이 웃었다.
그 순간 경고가 들어왔다.
VALIDATION MISMATCH.
커피컵이 Daniel 손에서 멈췄다.
몇 초 전의 평범한 농담이 갑자기 다른 세계의 일처럼 멀어졌다.
Daniel은 화면 앞으로 갔다.
다른 관제소들도 빨간 상태.
한 가지가 같았다.
마지막 배포 계층.
James Whitaker가 몇 년 동안 말한 공통 뿌리.
Daniel은 그 단어를 아직 입 밖으로 내지 않았다.
그러나 이미 알고 있었다.
이건 단순한 컴퓨터 오류가 아니다.
시간을 먹는 오류다.
그리고 지금 시간이 가장 비싼 자원이었다.
“독립 코드도?”
“계산은 독립입니다.”
“그러면.”
“배포 포맷.”
James Whitaker가 고개를 들었다.
공통 뿌리.
완전히 없애지 못한 곳.
여러 독립 계산팀이 같은 결과를 서로 다른 코드로 만들었다.
그런데 실제 비행체에 전달하는 마지막 상태 패키지와 인증 형식은 IIRA 표준을 썼다.
그 표준 대부분을 Helioxen이 만들었다.
새 회전모델을 넣으며 필드 하나가 확장됐다.
구형 노드 일부가 다르게 해석.
안전로직은 잘 작동했다.
잘못된 데이터를 실행하지 않았다.
문제는 시간.
“수동 패키지.”
Daniel이 말했다.
“준비 중.”
“지역 노드 독립 생성.”
“인증이.”
Daniel이 Whitaker를 봤다.
Whitaker 얼굴도 굳어 있었다.
“2045년에 분리했잖아요.”
“키는 분리했습니다.”
그가 말했다.
“스키마 검증기가 공통입니다.”
한 줄.
한 뿌리.
Daniel은 속이 차가워졌다.
“우회.”
각 노드가 자기 계산결과를 수동 포맷.
교차검증.
서명.
가능.
하지만 시간이 걸린다.
첫 예상.
6시간.
Daniel이 말했다.
“3시간.”
아무도 움직이지 않았다.
그 말 자체가 위험하다는 걸 모두 안다.
Daniel도.
“…필요시간으로.”
그가 고쳤다.
“절차 줄이지 마.”
팀이 움직였다.
여섯 시간.
여덟.
최종 9시간 17분.
패키지 정상.
독립 노드 합의.
전송.
그러나 두 편향체는 최적 접근창을 놓쳤다.
버릴 필요는 없다.
다른 궤도로 재배치.
다만 효율은 떨어진다.
Daniel은 손익을 계산했다.
“전체 여유.”
임무계획팀이 말했다.
“줄었습니다.”
“얼마나.”
대답 대신 그래프.
Safe corridor까지 남은 거리.
처음 계획보다 여유가 얇아졌다.
Yelena가 말했다.
“아직 가능합니다.”
Daniel은 고개를 끄덕였다.
가능.
그 말이 중요했다.
실패가 아니다.
시스템은 잘못된 패키지를 막았다.
수동 백업도 작동했다.
공통뿌리 하나를 발견했다.
다만 우주는 기다려주지 않았다.
잃은 9시간은 다시 만들 수 없었다.
그날 IIRA 사고기록에는 이렇게 남았다.
No erroneous command executed.
Safety barriers functioned as designed.
Two optimal encounter windows lost.
성공과 실패가 같은 문서에 있었다.
Daniel은 마지막 줄을 오래 봤다.
아직 된다.
그는 자기에게 말했다.
아직 된다.
읽은 화로 기록했습니다. 다음 화는 바로 이어집니다.