가장 무서운 버튼은 빨간색이 아니다.
빨간색에는 보통 경고가 쓰여 있다. 삭제, 종료, 되돌릴 수 없음. 반면 회색 버튼에는 친절한 말이 붙는다. 확인, 계속, 간편하게.
누군가 회색 버튼을 눌렀다는 이유로 자기 기억과 근무 시간을 넘겼다고 주장한다면, 버튼이 잘못된 것인지 사람이 잘못된 것인지부터 따져야 한다.
대전과 부산을 잇는 선이 생긴 다음 날, 우리는 두 센터의 단말기 기록을 대조했다. 부산에서는 민현주의 근무 시간이 비어 있었고, 대전에서는 박도윤의 이름이 명찰에서 흐려졌다. 기록의 모양은 달랐지만 시작점에는 같은 값이 있었다.
[간편 퇴근 동의: true]
내가 말했다.
“둘 다 버튼을 누르지 않았다고 했습니다.”
강문석이 회의실 화면을 가리켰다.
“이 항목은 사람이 누른 사실을 직접 증명하지 않습니다. 장치가 어떤 조건을 만족했다고 판단했다는 뜻일 수도 있어요.”
“그럼 무엇을 만족했는데요?”
“그걸 찾아야 합니다.”
우리는 현장 담당자의 협조 아래 실제 사람의 개인정보가 들어 있지 않은 시험용 단말기 구성을 받았다. 단말기와 외부 서버가 어떤 메시지를 주고받는지, 정식 로그와 별도의 대조 기록을 비교했다. 프로그램 코드를 임의로 바꾸거나 운영 서버에 무단 접속하지 않았다. 할 수 없는 일을 강제로 시도하는 대신, 화면에 이미 나타난 문제를 재현하는 쪽을 택했다.
첫 화면에는 큰 버튼 두 개가 있었다.
[퇴근 완료]
[나중에 확인]
나는 두 번째 버튼을 눌렀다. 화면에는 ‘근태 정산이 보류됩니다. 관리자 확인 필요’라고 떴다. 다음 화면에서 버튼은 하나만 남았다.
[계속]
“와, 선택지가 있네요.” 내가 말했다. “선택하면 선택지를 없애 줍니다.”
서아가 대조 자료를 넘겼다. 사용자들이 ‘나중에 확인’을 누른 뒤에도 서버 기록에는 참여 동의가 참으로 저장됐다. 근태 마감과 동의 여부를 같은 값으로 처리한 탓이었다. 더구나 별도의 기억 보관 약관은 처음 화면에서 표시되지 않았다.
“이 설계가 우연한 오류라고 보이니?” 서아가 물었다.
“개발자가 실수했을 수도 있죠. 그런데 수정 요청이 있었다면 언제 누가 거부했는지 봐야 합니다.”
강문석이 변경 이력을 찾아냈다. 운영 테스트가 시작되기 사흘 전, 한 내부 담당자가 분리돼 있던 두 값을 하나로 묶었다. 변경 요청서에는 ‘이탈률 개선’이라고 쓰여 있었다. 사용자가 기억 보관에 동의하지 않으면 퇴근 처리가 끝나지 않는다는 불만이 접수되자, 그 불만을 해결한 방식이 거부 버튼을 없애는 것이었다.
“정말 이상하네요.” 한시우가 말했다. “그런 변경을 승인한 적이 없습니다.”
“승인 안 했다는 기록도 필요합니다.” 남 형사가 답했다. “내부 검토자 이름과 결재 경로를 정리해 주세요.”
한시우는 고개를 끄덕였다. 누군가 시우데이터의 이름을 썼다는 이유만으로 그를 범인으로 몰 수는 없었다. 반대로 그가 선의로 협조한다고 해서 회사가 책임에서 자동으로 벗어나는 것도 아니었다.
나는 회색 버튼이 처음 설계된 시기의 내부 테스트 결과도 살펴봤다. 초기 화면에서는 기억 보관 동의가 별도 질문으로 나타났다. 반대 버튼도 눈에 잘 보였다. 응답하지 않은 직원은 일반적인 퇴근 처리만 하고 기억 보관 서비스를 사용하지 않았다.
그런데 서비스 기획 문서의 다음 버전에는 이상한 문장이 붙었다.
‘동의하지 않음 선택률이 높아 업무 흐름을 방해하므로 노출 단계를 축소한다.’
“동의하지 않는 사람이 많다는 건 서비스가 마음에 안 든다는 뜻 아닌가요?” 내가 물었다.
“그걸 실패 지표로 본 것 같습니다.” 강문석이 답했다.
문서에는 사용자가 동의서를 읽는 데 걸린 시간이 평균 사 초 미만이라고 적혀 있었다. 설문에는 ‘너무 어려워서 모르겠다’는 응답도 적지 않았다. 그러나 개선안은 어려운 내용을 쉽게 설명하는 방향이 아니었다. 설명 창을 닫고 동의 처리 결과만 남기는 쪽이었다.
한시우가 고개를 숙였다.
“서비스 이름과 계약 구조를 제공한 회사가 제 회사였다는 점은 부정할 수 없습니다. 누가 어떤 버전을 승인했는지 반드시 확인하겠습니다.”
“회사 내부에 반대한 사람도 있습니까?” 남 형사가 물었다.
“변경 기록에 의견을 낸 사람이 있습니다. 기능을 분리해야 한다고 적었는데, 검토 완료 표시만 있고 조치 내용이 없어요.”
나는 종이에 두 문장을 적었다. ‘사용이 편하다.’ ‘거절하기 어렵다.’ 둘은 같은 말이 아니다. 사용자를 오래 붙잡는 프로그램이 반드시 좋은 프로그램은 아니고, 사용자가 나갈 수 없게 만드는 프로그램은 더더욱 아니다.
이상하게도 내 마음에는 처음 보았던 0번 보관실의 나무문이 떠올랐다. 문을 열 수 있다는 사실보다 더 중요한 것은 아이가 원하면 닫을 수 있다는 사실이었다. 그 단순한 규칙을 전국망 개발자들은 놓치고 있었다.
오후 세 시, 부산에서 현주의 연락이 왔다. 그녀는 병원 진료를 받고 집에 돌아왔다고 했다. 사라진 아들과의 대화를 아직 기억하지 못했고, 급여 담당자는 이번 달 근무 기록이 복구되지 않으면 임금을 계산하기 어렵다고 말했다고 했다.
“그럼 전 어떻게 하죠?”
나는 대답을 서두르지 않았다. 현주가 실제 근무했다는 종이표와 동료들의 진술, 현장 출입 자료를 확보했다는 사실부터 확인했다. 남 형사는 근로기록 정정과 피해 신고를 진행할 수 있는 경로를 안내했다.
“기억은 제가 약속드릴 수 없습니다.” 내가 말했다. “하지만 일하신 시간이 없던 일이 되지 않도록 증거를 모아 둘 수 있어요.”
현주가 잠시 조용했다.
“그럼 우리 아들한테는요? 제가 어제 무슨 말 했는지 모른다고 하면 아이가 속상해할 것 같아요.”
“모르는 건 모른다고 말씀하셔도 될 것 같아요. 아이가 다시 이야기해 주고 싶을지도 모르니까요.”
나는 스스로 그 말을 듣고 놀랐다. 예전에는 기억을 잃는 일이 곧 사람을 잃는 일이라고만 생각했다. 지금은 기억이 돌아오지 않더라도 새로운 대화를 시작할 수 있다는 걸 조금 알았다. 물론 사라진 시간이 중요하지 않다는 뜻은 아니었다.
그날 저녁 서아와 나는 회색 버튼의 화면을 다시 보았다. 같은 앱을 사용하는 다른 센터에서는 버튼 배열이 조금씩 달랐다. 어떤 곳에서는 ‘동의하지 않음’이 화면 바깥으로 밀려나 있었고, 어떤 곳에서는 작은 글씨로만 있었다. 한 곳에서는 ‘모든 항목에 동의’만 표시됐다.
“이게 전국 동시 퇴근망의 핵심인가 봐.” 서아가 말했다.
“시간을 통일하는 게 아니라 거절할 기회를 없애는 것.”
우리는 각 단말기 운영자가 어떤 화면을 제공했는지 분리해 기록했다. 한 가지 스크린샷으로 전체를 대표시키지 않았다. 실제로 어느 곳에서는 거부 버튼이 정상적으로 작동했다. 어떤 직원들은 그 버튼을 눌렀고 별다른 피해도 없었다. 그런 사실을 숨기면 구태형이 우리가 과장했다는 공격을 하기가 더 쉬워질 것이다.
문제는 기능이 있었느냐가 아니라, 이용자가 그것을 알고 안전하게 쓸 수 있었느냐였다.
서아는 현장별 화면을 서로 나란히 놓고 설명했다. 동의하지 않은 사람이 ‘나중에 확인’을 누르면, 어느 화면에서는 퇴근 처리가 끝났다. 다른 화면에서는 관리자에게 문의하라는 경고가 떴다. 어떤 화면에서는 뒤로 가기 버튼을 눌러도 같은 문장이 계속 나타났다.
“전부 같은 기능이라고 주장하지만 실제 사용자 경험은 다르네요.” 내가 말했다.
“그래서 화면만 보여 주고 끝내면 안 돼. 어떤 사람이 어떤 조건에서 눌렀는지 함께 봐야 해.”
나는 테스트 표에 ‘버전’과 ‘보인 선택지’라는 칸을 추가했다. 지금 우리가 본 것과 나중에 실제 피해자가 본 화면이 다를 수 있기 때문이다. 근태 앱이 업데이트되면 사람들은 자신이 동의했던 화면을 다시 찾을 방법이 없을지도 몰랐다.
유나는 오래된 종이 달력을 꺼냈다. 그녀가 동생 재민의 치료를 위해 기록해 둔 날짜가 적혀 있었다.
“이것도 비슷해. 재민이가 그날 무엇을 원했는지 기록하지 않았으면 누구든 자기 말대로 설명했을 거야.”
“재민 씨는 지금 어떠세요?”
“오늘은 오래 산책하고 싶다고 했어. 아직 밖에서 아주 오래 버티기는 어렵지만, 자기가 쉬고 싶은 시간을 자기가 정하고 있어.”
나는 그 말을 수첩에 적었다. 회복은 모든 기록이 원상 복구되는 순간에만 일어나는 것이 아니다. 누군가 다시 자기 하루를 정하는 순간부터 시작되기도 했다.
저녁 다섯 시 사십분. 강문석이 말했다.
“새로운 접속 요청이 들어왔습니다. 어제 두 도시 사이에 생긴 연결 선을 타고 내려오는 데이터예요.”
화면에는 부산에서 사라진 근무 시간 열두 시간과 대전의 잘못된 대리 승인 여섯 건이 함께 표시됐다. 다른 사업장의 자료와도 섞이고 있었다. 값은 금액처럼 합산됐다.
[공동 담보 가치: 18시간 + 기억 2건.]
나는 화면을 보며 물었다.
“사람이 일한 시간과 기억을 한 단위로 합산할 수 있습니까?”
“할 수 없죠.” 강문석이 답했다. “적어도 인간에게 의미 있는 방식으로는요. 그런데 그 시스템은 그런 차이를 무시합니다.”
강문석은 화면에 나타난 합산 수치에 즉시 경고 표시를 붙였다. 기록에는 열두 시간과 기억 두 건이 있었다. 그러나 그 두 단위를 같은 값으로 계산한 근거는 어디에도 나타나지 않았다.
“이걸 토대로 사람의 가치를 정하는 것처럼 보이면 안 됩니다.” 그가 말했다.
“동의합니다. 보고서에는 실제 확인한 기록값과 장부가 임의로 계산한 값을 나누죠.”
서아는 문서 제목도 바꾸자고 했다. 처음에는 ‘기억 피해 합계’였지만, 그 표현은 누군가의 고통을 숫자로 비교하는 것처럼 보였다. 우리는 ‘시스템이 주장하는 담보량’이라고 적었다. 사람의 기억은 포인트도 원화도 아니었다.
장부 맨 아래 숫자가 깜빡였다.
[목표 담보량: 1,000시간.]
[확보 후 전국 동기화 시험 실시.]
지금까지는 몇 사람의 문제가 된 시범 운행이었다. 그러나 천 시간이라는 목표는 분명히 다른 규모의 실험을 향하고 있었다.
서아가 조용히 말했다.
“사람들의 하루를 모아서 대체 무엇을 켜려고 하는 거지?”
그 질문에 답이 오기까지 오래 걸리지 않았다.
검은 장부에 새로운 항목이 나타났다.
[중앙 관리자 부재 시 자동 가동.]
[설치 대상: 가정용 근태 앱 연동.]
나는 등골이 서늘해졌다. 처음에는 회사 건물 안의 직원만 위험했다.
다음에는 그 직원의 집에도 같은 버튼이 생길 예정이었다.
제55화 댓글 0
댓글·공감·신고는 로그인 후 이용할 수 있습니다. 이전 익명 댓글은 그대로 표시됩니다.
댓글을 불러오는 중입니다.