사내 연애는 등대 아래서

2화: 등대가 비추는 범위
등대 관리인 고은별은 테스트 구역을 등대에서 해안 산책로까지로 제한했다. 휴대전화를 물가로 가져가지 말 것, 구조대가 없는 상태에서 구조 신호를 시험하지 말 것, 실험 계정임을 화면에 표시할 것. 다정은 그 조건을 문서로 적었다. 준호는 구역 경계에 주황색 깃발을 세웠다.
“여기서 신호를 보내면 실제 구조대에 접수되나요?” 은별이 물었다.
“아니요. 테스트 서버와 분리된 계정입니다. 그래도 기기 화면에 시험 중이라고 표시하고, 실제 구조 요청 버튼은 비활성화할게요.”
“그럼 그 화면을 보여 주세요.”
다정은 테스트 단말을 켜고, 상단에 ‘연습용 기기’라는 표시가 뜨는 것을 확인시켰다. 은별은 단말 번호와 테스트 시각을 적었다. 그녀는 과거 등대 봉사자와 구조대가 앱 테스트에 참여할 때, 시험 신호가 실제 구조 요청으로 오인된 적이 있다고 했다.
“그때 사람들 모두 뛰어나갔어요. 바다는 멀쩡했는데요.”
“그런 일이 다시 생기지 않도록 테스트 서버를 나눴습니다.”
“화면에 분명하게 나오면 괜찮아요. 작게 숨기면 안 돼요.”
다정은 테스트 화면의 안내 문구를 조금 더 크게 바꿨다. 그리고 테스트를 진행할 때마다 구두로도 알리기로 했다. 현장에서는 앱 화면 하나만으로 안전을 확인할 수 없었다.
준호는 통신 장비를 켜고 신호 경로를 추적했다. 해안 기지국과 앱 서버 사이에는 중계 업체의 장비가 있었다. 장비의 소프트웨어가 최근 업데이트된 뒤 특정 위치 정보 패킷을 늦게 처리했다. 로그에는 요청이 접수된 것으로 남지만, 구조대 단말에는 다음 갱신 때까지 표시되지 않았다.
“사용자는 요청이 전송됐다고 볼 수 있겠네요.” 다정이 말했다.
“서버는 접수했으니까요. 하지만 구조대 기기에서 못 받으면 실제로는 전달이 안 된 겁니다.”
“그럼 상태를 세 단계로 나눠야 해요. 전송 중, 서버 접수, 구조대 전달.”
“전달 확인은 기지국이 반환하는 응답값이 필요합니다.”
“그게 오지 않으면 접수된 시간만 보여 주고, 전달 여부를 확인 중이라고 써야죠.”
다정은 화면 설계도를 수정했다. 위치 정보는 마지막 갱신 시각을 표시하고, 통신이 끊긴 경우 지도 점의 색을 바꾸기로 했다. 구조 요청이 서버에 도착했더라도 구조대 단말의 확인 응답이 오지 않으면 ‘전달 완료’라는 단어를 쓰지 않는다. 사용자가 앱을 닫아도 요청 상태를 다시 확인할 방법도 필요했다.
“사용자에게 너무 많은 정보가 보이면 혼란스러울 수 있어요.” 준호가 말했다.
“그렇다고 하나의 완료 상태로 뭉치면 안 됩니다. 중요한 차이니까요.”
“그럼 화면을 두 단계로 보이게 합시다. 기본 화면에는 지금 필요한 행동만, 상세 상태는 펼쳐서 볼 수 있게요.”
다정은 고개를 끄덕였다. 그가 안전 정보의 필요성을 이해하고 설계까지 함께 고민하는 모습은 믿음직했다. 그렇지만 등대에 온 뒤 준호는 한 번도 바다 쪽으로 등을 돌리지 않았다. 무전기에서 잡음이 날 때마다 몸이 굳었다.
“이전에 놓친 신호라는 건 어떤 거예요?” 다정이 물었다.
준호는 바로 대답하지 않았다. 은별이 멀리서 테스트 단말의 상태를 확인하고 있었다. 다정은 질문을 거두려 했다.
“내가 말하고 싶지 않은 건 아니에요.” 그가 말했다. “지금 말해도 괜찮은지 모르겠어요.”
“그럼 업무에 필요한 만큼만 얘기해 주세요.”
준호는 해양 안전 스타트업에 합류하기 전, 지역 구조대와 함께 시험용 경보 시스템을 만들었다. 당시 알림은 시험 계정과 실제 계정을 구분하지 못했다. 경보가 울렸지만 구조대는 이미 현장에 나간 다른 신고가 있을 거라고 판단해 출동을 늦췄다. 실제로 사람 한 명이 바다에서 구조됐지만, 저체온증으로 오래 입원했다. 그는 당시 시스템을 설계했고, 경보가 시험이라는 표식을 충분히 달지 않았다.
“그 사람이 퇴원했는지 알아요?” 다정이 물었다.
“모릅니다. 가족이 연락을 거부했어요.”
“그럼 지금도 그날의 책임을 혼자 지고 있네요.”
“내 책임이 없는 건 아니니까요.”
“혼자 책임지는 게 그 사람을 돕지는 않을 수도 있어요.”
준호는 장비를 내려다봤다. “그건 알아요. 다만 내가 잘못한 부분을 쉽게 넘기고 싶지 않습니다.”
다정은 그가 과거를 잊으라고 말하지 않았다. 대신 그 사건을 지금의 규칙에 반영하자고 했다. 실험용 계정과 실사용 계정을 색상뿐 아니라 문구와 작동 방식으로도 분리하고, 현장 담당자가 직접 테스트 시작과 종료를 확인하는 절차를 만들었다. 테스트 종료 뒤에는 모든 단말에서 연습용 표시가 사라졌는지 확인한다.
“우리가 그때의 사람에게 사과할 수 있을까요?” 준호가 물었다.
“그분이 원할 때만요. 먼저 연락하는 게 도움이 되는지부터 확인해야 해요.”
“가족이 거부했어도요?”
“그때 거부한 사람이 누구인지, 지금 연락을 원하지 않는지 모릅니다. 우리가 편해지려고 사과를 강요하면 안 돼요.”
준호는 고개를 숙였다. 그 대화 뒤에 그가 한결 편해진 것은 아니었다. 하지만 그는 테스트 단말을 은별에게 넘기고 현장 로그를 확인하도록 부탁했다. 다정이 혼자 모든 상태를 확인하지 않도록 역할을 나눈 것이다.
오후가 되자 통신 장비 업체에서 원격 패치를 보내왔다. 테스트 기기는 다시 연결됐지만, 패치가 실제 환경에서 동일하게 작동하는지 확신할 수 없었다. 다정과 준호는 두 개의 다른 기지국을 통해 반복 시험하기로 했다. 첫 번째 구간에서는 알림이 즉시 도착했고, 두 번째 구간에서는 18초 지연됐다. ‘전달 완료’ 상태는 응답이 올 때까지 표시되지 않았다.
“이게 맞아요.” 다정이 말했다. “기다리는 18초가 불편해도, 거짓 완료보다 나아요.”
준호는 테스트 기록을 저장했다. “박람회 시연은 이 흐름으로 하겠습니다. 완전히 고쳤다고 하지 않고, 지연 구간과 안전 조치를 함께 공개하죠.”
“투자사가 싫어할 수도 있어요.”
“그건 우리가 통제할 수 없습니다.”
그날 해안에 안개가 짙어져 실험은 중단됐다. 은별은 장비를 회수하며 테스트 종료를 확인했다. 그녀는 다정에게 말없이 작은 등대 열쇠고리를 건넸다. 테스트를 무사히 마친 기념이 아니라, 다음 번에도 안전 확인을 잊지 말라는 뜻이라고 했다.
돌아가는 차 안에서 준호는 운전대를 두 손으로 잡았다. 회사까지 한 시간. 다정은 창밖을 보며 어깨를 풀었다.
“오늘은 고마웠어요.” 준호가 말했다.
“무엇이요?”
“내 얘기를 듣고, 바로 괜찮다고 하지 않은 것.”
“괜찮다고 말할 수 있는 사람은 당신뿐이에요.”
“다정 씨는 늘 그렇게 말해요?”
“업무에선요.”
“그럼 업무가 아닐 때는요?”
다정은 그를 바라봤다. “그건 아직 모르겠어요.”
준호는 더 묻지 않았다. 그러나 차가 신호에 멈췄을 때, 그의 손이 다정의 손 가까이에 놓였다. 둘의 손은 닿지 않았다. 그 사이에 남겨진 거리가 오히려 분명하게 느껴졌다.
테스트 첫 구간은 등대 옆 관리실에서 시작했다. 은별은 실험 계정의 단말 번호를 큰 글씨로 적어 출입문에 붙였다. 구조대 담당자는 실제 호출망이 꺼져 있는지 직접 확인했다. 다정은 테스트 안내를 읽고, 은별이 이해한 내용을 다시 말해 보도록 부탁했다. 은별은 요청이 서버에 들어와도 구조대에 도착하지 않을 수 있다는 점, 그래서 실제 위험에는 별도 공식 연락을 해야 한다는 점을 정확히 설명했다.
“이 정도면 시작해도 되겠네요. 하지만 테스트 화면이 밖에서도 한눈에 보여야 합니다.”
다정은 화면 상단의 표시를 손가락 두 마디만큼 키웠다. 화면이 조금 답답해졌지만, ‘연습용’이라는 단어가 상태 아이콘보다 먼저 읽혔다. 그녀는 디자인 변경 이유를 기록하고, 테스트가 끝난 뒤 원래 화면으로 되돌리지 않도록 체크 항목을 추가했다.
해안 산책로 구간에서 첫 테스트는 성공했다. 두 번째 구간에서는 응답이 늦었다. 준호는 무전으로 은별에게 테스트 번호와 시간을 확인했고, 은별은 실제 구조대 단말의 알림이 없음을 보고했다. 앱은 서버 접수를 표시했지만, 구조대 전달은 대기 상태였다. 다정은 화면이 실제로 어떻게 보이는지 사진으로 남겼다.
“사람이 이 화면을 보면 기다릴 수도 있겠어요.” 은별이 말했다.
“그래서 대체 행동이 바로 보여야 합니다.” 다정은 전화 연결 버튼을 누르도록 요청했다. “실제 위험이면 버튼을 눌러 담당 기관에 연결하고, 위치가 달라졌다면 음성으로 현재 위치를 설명하세요.”
은별은 단말을 들고 안내를 따라갔다. 통화 연결 화면으로 넘어가도 앱의 테스트 상태가 유지됐다. 실제 전화는 연결되지 않도록 차단되어 있었다. 그 상태를 확인한 뒤에야 테스트를 끝냈다.
중계 장비 업체는 원격 패치가 필요하다고 답했지만, 현장에서 즉시 적용할 수는 없었다. 다정은 박람회 전에 해결될 것이라고 말하지 않았다. 대신 지연 구간을 시범 운영에서 제외하는 안을 냈다. 준호는 사업팀이 받아들일 수 있는지 검토하겠다고 했다.
“그 지역을 빼면 서비스의 핵심 구간이 좁아집니다.” 사업 담당자가 영상 통화로 말했다.
“그 지역에서 정상 동작하는지 확인되지 않았습니다.” 다정이 답했다.
“투자자에게는 제한 서비스로 보일 텐데요.”
준호가 말을 받았다. “그렇더라도 기능이 전달되지 않는 구간을 서비스 범위에 넣을 수는 없습니다.”
사업 담당자는 일정과 투자 계획을 다시 보겠다고 했다. 통화가 끝난 뒤 준호는 책상 모서리를 짚었다. 다정은 그에게 괜찮냐고 묻지 않고, 시범 운영을 위해 남은 확인 목록을 함께 펼쳤다. 담당자 승인, 기지국별 응답 시간, 안내 문구 시험, 데이터 삭제 기준. 총 일곱 항목이었다.
“이걸 다 하면 박람회 날짜를 놓칠 수 있어요.” 준호가 말했다.
“박람회에 맞추려고 항목을 줄일 수는 없어요.”
“동의합니다.”
그는 더 말하지 않았지만, 과거 사건의 기억이 그의 판단에 어떤 무게를 주는지 다정은 조금씩 알게 됐다. 그는 실수를 반복하지 않으려다 모든 책임을 혼자 떠안는 경향이 있었다. 다정은 그가 현장 담당자의 의견을 직접 듣도록 회의를 진행했다. 은별은 앱 화면을 직접 보고 테스트 중단 기준을 제안했다. 준호는 그 기준을 채택해 현장 기록에 넣었다.
등대의 바람이 거세지자 은별은 테스트 중단을 선언했다. 준호는 더 확인하고 싶어 했지만, 장비를 회수했다. 다정은 테스트 종료 시각과 미완료 구간을 기록했다. 멈추는 것도 시험 결과의 일부였다. 그들은 결과를 성공이나 실패 하나로 묶지 않았다.