사내 연애는 등대 아래서

1화: 파도보다 먼저 끊긴 알림
임다정은 화면 오른쪽 위에 뜬 빨간 경고를 세 번 확인했다. 구조 요청 서버가 끊겼다. 지도 위에서 동해안의 작은 점 하나가 회색으로 바뀌고, 그 아래 저장된 위치는 십이 분 전의 값이었다.
“준호 팀장님, 동해 3구역 통신이 끊겼어요.”
서준호는 회의실 스크린을 끄고 노트북을 열었다. 해양 구조 앱 ‘파도선’은 해안 레저객의 위치를 주변 구조대에 전달하는 서비스였다. 스타트업의 남은 투자금은 넉 달치 운영비뿐이었다. 이번 주말 해양 안전 박람회에서 시연에 실패하면, 투자사는 다음 계약을 미룰 가능성이 컸다.
“현장 기지국은 살아 있어요?”
“확인 중입니다. 서버 로그엔 신호가 들어온 흔적이 있는데 앱에 반영되지 않았어요.”
“그럼 서버 쪽 문제일 수 있겠네요.”
“아직 단정하면 안 돼요. 현장 통신이 끊겼다면 지도 위치가 낡은 값으로 보일 수 있어요.”
다정은 사용자 화면을 내려다봤다. 바다 위에 파란 점이 고정돼 있었고, 구조 요청 버튼은 응답하지 않았다. 그는 테스트 계정을 통해 알림을 보내 보았다. 앱은 ‘전송 완료’라고 표시했지만, 수신 기기에는 아무것도 도착하지 않았다.
“완료라고 표시되는데, 수신은 안 됩니다.”
“사용자에게 완료라고 안내하는 건 위험해요.”
준호는 고개를 끄덕였다. “오늘 안에 문구를 바꾸죠. 전송 대기와 전달 완료를 구분합시다.”
다정은 경고 문구를 수정하기 시작했다. 앱이 구조 요청을 보내면 서버에 접수됐는지, 구조대 기기로 전달됐는지 각각 표시해야 했다. 네트워크 연결이 불안정할 때는 요청이 전송 중이라고 알려 주고, 마지막 위치 갱신 시간을 함께 보여 주기로 했다. 사용자가 무시할 수 없는 안전 정보였다.
“이 문구는 너무 길어요.” 준호가 화면을 가리켰다.
“길어도 정확해야 해요. ‘도움 요청이 접수되지 않았습니다. 전화로 해안 구조대를 연결하세요.’ 정도면 읽을 수 있어요.”
“전화 연결 번호를 함께 넣을 수 있나요?”
“지역마다 다르니까 위치가 확인된 경우에만 노출할게요. 위치 권한을 꺼 둔 이용자에게는 일반 긴급 번호를 보여 주고요.”
준호는 실제 테스트 단말로 화면을 확인했다. 그는 다정이 쓴 문장을 읽고 버튼을 눌렀다. 안내가 바로 나타났고, 전화 연결 버튼도 작동했다.
“좋아요. 사용자 테스트를 더 하죠.”
“시연 일정은요?”
“시연은 미루겠습니다.”
다정은 손을 멈췄다. 박람회는 투자사와 지자체 관계자가 지켜보는 자리였다. 시연을 취소하면 회사의 신뢰가 떨어질 수 있었다.
“원인도 모른 채 시연하면 안 됩니다. 지금은 알림이 전달되지 않는 구간이 있어요.”
“그럼 주말 전까지 해결하고요.”
“해결된다고 약속할 수 없어요.”
준호의 얼굴이 굳었다. “다른 팀은 이미 시연 자료를 만들고 있어요. 우리가 빠지면 투자자는 서비스가 준비되지 않았다고 보겠죠.”
“준비되지 않은 건 사실이에요.”
다정은 모니터에서 시선을 떼지 않았다. ‘완료’라는 표시는 사람을 잘못된 판단으로 이끌 수 있다. 그녀는 이전 직장에서 안전 안내 문구를 줄이라는 요구를 받아들였다가, 사용자가 위험 안내를 놓친 사고를 겪었다. 누구도 그 사고가 그녀 탓이라고 말하지 않았지만, 그녀는 그 문장을 바꾼 사람이 자신이라는 사실을 기억했다.
“신호가 끊긴 이유를 찾을 때까지, 저는 안전 기능이 정상이라고 보여 줄 수 없습니다.”
준호는 자리에서 일어나 창가로 갔다. 그는 해안 구조대와 협업을 시작한 첫날을 떠올렸는지, 손가락으로 창틀을 두드렸다.
“그럼 박람회에는 고장 분석 과정을 시연합시다. 기능을 자랑하는 대신, 실패를 어떻게 감지하고 대응하는지 보여 주는 거예요.”
“투자사에서 받아들일까요?”
“내가 설명하겠습니다. 다정 씨는 테스트 흐름과 사용자 안내를 준비해 주세요.”
그의 제안은 무리한 시연보다 낫지만 위험은 남아 있었다. 앱이 왜 끊겼는지 아직 몰랐고, 박람회에서 실패하는 모습을 공개하면 투자자는 계약을 보류할 수 있었다. 다정은 테스트 로그를 백업하고 현장팀에 연락을 넣었다.
그날 저녁, 개발자 한 명이 서버 기록을 보내왔다. 요청은 서버에 도착했지만, 특정 통신사 기지국을 거칠 때 구조대 단말로 전달되지 않았다. 서버 오류가 아니라 중계 장비 문제였다. 이 사실을 확인하려면 현장에 가서 통신 구간을 재현해야 했다.
“내일 새벽 등대 쪽에 가겠습니다.” 준호가 말했다.
“제가 같이 가야 해요. 사용자 화면 오류는 현장에서 확인해야 합니다.”
“바람이 세면 위험합니다.”
“그러니까 구조대가 있는 곳에서 테스트하고, 개인 단말은 물가로 가져가지 않겠습니다.”
준호는 잠시 고민하다 동의했다. 둘은 현장 안전 담당자에게 방문 목적과 테스트 범위를 보냈다. 다음 날 오전 일곱 시, 동해안의 오래된 등대에서 만나기로 했다.
다정은 퇴근 전에 회사 게시판에 테스트 중인 앱은 실제 구조 요청에 쓰면 안 된다고 공지했다. 직원들이 시연용으로 쓰는 단말마다 같은 안내를 붙였다. 퇴근 버스를 기다리는 동안 준호가 메시지를 보냈다.
내일 현장에서는 제가 먼저 위치를 확인하겠습니다. 안전 구역 밖으로 혼자 나가지 말아 주세요.
그는 지시처럼 썼다가 곧바로 다시 메시지를 보냈다.
부탁입니다. 제가 과거에 한 번 놓친 신호가 있어서요.
다정은 답장을 쓰다 멈췄다. ‘무슨 신호였나요?’라고 물을 수 있었다. 하지만 준호가 그 일을 말할 준비가 되어 있는지는 몰랐다.
현장 안전 수칙에 따르겠습니다. 그 이야기는 준비되면 들을게요.
다음 날 등대 아래에서 준호는 앱을 켜지 않은 채 바다를 바라보고 있었다. 파도 위에는 구조선 한 척이 천천히 이동했다. 다정은 테스트 장비와 출력한 점검표를 들고 다가갔다.
“무슨 일이 있었는지 지금 말하지 않아도 돼요.”
“알아요.”
“다만 그 일 때문에 테스트 범위를 바꾸고 싶다면, 기준은 같이 정해야 해요.”
“그럼 먼저 장비 상태를 확인하죠.”
그가 점검표를 받아 들었다. 둘은 안전 장비와 통신 범위를 확인하고 등대 관리인에게 실험 구역을 표시해 달라고 요청했다. 테스트는 시작하기 전부터 길어질 것 같았다.
회의가 끝난 뒤 개발자들은 각자 오류 원인을 찾기 시작했다. 서버 담당자는 중계 장비의 응답 시간을 뽑았고, 현장 담당자는 해안 구조대가 쓰는 단말 버전을 확인했다. 다정은 사용자 화면에서 어떤 정보가 먼저 보여야 하는지 정리했다. 팀원은 대부분 오류를 고친 뒤 공지하자고 했지만, 다정은 그 전까지 테스트 계정을 실제 사용자가 열 수 없게 막아야 한다고 말했다.
“앱을 닫아 버리면 테스트 결과가 의미 없어지지 않을까요?” 개발자가 물었다.
“시험 기능은 내부 단말에서만 켜 둘 수 있어요. 일반 사용자가 위험한 화면을 보는 것보다 결과가 늦게 나오는 게 낫습니다.”
준호는 운영팀에 테스트 중단 안내를 보내고, 박람회 시연에서 사용할 기기를 따로 준비하도록 했다. 지자체 담당자에게도 오류를 먼저 설명하겠다고 했다. 이 결정은 홍보팀의 일정을 다시 짜게 만들었다. 홍보팀장은 투자자를 만나기 전까지 문제를 외부에 알리지 말자고 주장했다.
“지금 공지하면 서비스가 불안해 보입니다.”
다정은 고개를 들었다. “사용자가 앱을 실제 구조 요청에 쓰면 더 불안해집니다. 테스트 상태와 실제 상태를 구분할 공지가 필요해요.”
준호가 홍보팀장에게 말했다. “공지 범위는 법무와 현장 협력자에게 확인하겠습니다. 다만 테스트 중단은 지금 시행합니다.”
그는 결정을 내린 뒤 다정에게 왜 그 판단을 했는지 묻지 않았다. 오히려 사용자가 볼 수 있는 화면과 내부 기록을 분리해 보여 달라고 했다. 다정은 오류 발생 시각, 영향을 받은 구역, 정상 확인이 끝나지 않은 기능을 표로 정리했다. 원인에 대한 추측은 별도 칸에 두었다.
점심시간이 지나도 아무도 식사를 하러 나가지 않았다. 다정은 회의실에 샌드위치를 주문하고, 직원들에게 테스트 단말을 개인 휴대전화와 연결하지 말라고 재차 알렸다. 한 개발자가 실수로 개인 기기에 연습용 앱을 설치한 사실이 확인됐다. 다정은 그에게 삭제를 요청하고 삭제 여부를 확인했다. 그는 민망해했지만, 누구도 그를 공개적으로 탓하지 않았다. 대신 테스트 기기 배포 절차를 바꾸기로 했다.
“이런 일까지 계속 생기면 서비스가 시작도 못 할 것 같아요.” 개발자가 말했다.
“시작 전에 발견해서 다행인 문제도 있어요.” 다정이 답했다.
그녀는 그 말을 자신에게도 반복했다. 자신이 문구를 줄였던 과거 실수는 사라지지 않았지만, 그 경험을 현재의 확인 절차로 바꿀 수 있었다. 준호가 회의실 문을 열고 들어왔다.
“현장 테스트를 요청했습니다. 내일 오전에 등대 관리인과 구조대 담당자가 나올 수 있다고 합니다.”
“안전 구역과 실제 구조망 분리 여부를 문서로 확인해 주세요.”
“이미 요청했습니다.”
그는 출발 일정을 제안했다. 다정은 테스트 장비 목록을 만들고, 실험을 중단해야 할 조건을 함께 적었다. 기상 악화, 통신 담당자 부재, 테스트 계정의 실제 망 접속, 위치 갱신 실패. 네 가지 중 하나라도 발생하면 현장 작업을 중지한다. 그 기준은 다정 혼자 정하지 않고 참석자에게 미리 공유했다.
퇴근 무렵 준호가 다정의 책상에 물병을 놓았다. 그녀는 물병을 받고 고맙다고 했지만, 준호는 바로 옆자리를 차지하지 않았다. 둘은 서로의 업무 경계를 지키면서도 내일 필요한 일을 나눴다. 다정은 차 안에서 보낸 메시지에 답하기 전에, 그가 과거의 신호를 놓쳤다는 말이 무슨 뜻인지 떠올렸다. 궁금했지만 답을 요구하지 않았다.