메일 뒤에 남아 있던 일
숙소 운영을 돕기 위해 PC에서 예약 일정을 확인하고 변경 내용을 메일로 보내는 도구를 사용하고 있었다. 운영자는 그 정보를 보고 청소할 숙소를 정한 뒤 작업자에게 연락했다.
앱으로 이어가려면 청소할 날짜와 숙소뿐 아니라 다음 게스트의 예약도 필요했다. 언제 들어오는지, 얼마나 머무는지, 인원과 특별 요청은 무엇인지가 준비할 내용에 영향을 준다. 이 정보를 호스트가 다시 입력하기 전에 이미 수집한 자료를 사용할 수 있는지 살폈다.
기존 PC 수집기는 유지하고, 검증한 예약 자료를 서버에 받아 호스트 화면에 표시하는 API를 붙였다. 메일을 보내던 절차도 유지했다. 수집 방식을 새로 만드는 대신 같은 자료를 메일과 작업 화면에서 각각 사용할 수 있게 연결한 작업이었다.
계정 이름보다 숙소를 먼저 맞췄다
여러 계정을 다룰 때 화면에 열린 순서만으로 계정을 구분하면 잘못 연결할 수 있다. 계정별 숙소 ID와 서버의 숙소를 명시적으로 매핑했다. 비슷한 별칭을 가진 숙소도 외부 ID가 다르면 따로 남겼다.
이번에 확인한 실제 숙소는 31개였다. 처음에는 저장된 오전 검증 자료에서 숙소와 계정 연결을 대조했다. 그 자료를 다시 읽은 시각을 새 수집 시각으로 쓰지는 않았다.
실제 예약을 어느 호스트에게 연결할지도 별도로 정했다. 이번에는 지정한 테스트 호스트 아래에 실수집용 조직을 만들어 로컬과 운영 서버에 연결했다. 기존 고객 조직이나 합성 시험용 조직에 자료를 섞지 않았다. 실제 청소비나 작업자 배정은 입력하지 않았다.
예약을 수집했다는 사실과 앱에서 그 예약을 사용할 조직이 정해졌다는 사실은 각각 확인해야 했다.
준비한 자료와 접수한 자료
수집 결과는 계정별로 검증한 뒤 전송 파일로 저장했다. 같은 파일을 다시 보낼 때는 같은 내용을 사용하고, 이미 접수됐다는 응답이 남아 있으면 새 예약을 만들어 보내지 않도록 했다.
로컬과 운영은 서로 다른 목적지다. 한쪽 접수 결과를 다른 쪽의 성공으로 읽지 않고, 파일과 응답도 목적지별로 남겼다. 한쪽의 확인 오류 때문에 다른 쪽 전송까지 함께 중단되는 경우는 회귀 검사에서 분리했다.
서버에 자료가 들어온 뒤에는 접수 응답과 DB, 로그인한 호스트 화면을 대조했다. 반복 POST에서 예약이 늘지 않는지, 퇴실이 없는 계정의 정상적인 수집도 기록되는지 확인했다. 서명이 없는 요청은 접수하지 않았다.
테스트 호스트 화면에서는 오늘 퇴실 목록과 다음 예약의 숙박 수, 아동 정보를 수집 자료와 비교했다. 로컬과 운영 양쪽에서 같은 자료가 보이는 것을 확인했다. 기능과 데이터의 대조였으며 전체 화면 디자인이나 실제 작업자의 수행까지 평가한 것은 아니었다.
예약이 없는 것과 못 가져온 것은 다르다
자료가 일부만 수집된 상태라면 월 전체 예약을 보여주는 것처럼 표시해서는 안 된다. 화면에 수집 시각과 부분 수집 여부를 남겼다. 일부 자료에서 빠진 예약을 취소된 예약으로 처리하지 않도록 했다.
어떤 숙소에 다음 예약이 없다고 표시할 때도 확인한 범위가 있어야 한다. 기간 안에 예약이 없는 것과 계정에 접속하지 못해 자료가 없는 것은 다르다. 모르는 인원 정보를 임의의 숫자로 채우는 것도 피했다.
호스트가 작업자를 고르는 화면에서는 이 차이가 중요했다. 오래되거나 부족한 자료를 새 예약처럼 읽으면 준비할 내용부터 틀릴 수 있다. 예약이 보이는지만 확인할 것이 아니라 어떤 범위를 언제 확인한 자료인지 함께 보여줘야 했다.
메일은 갔는데 서버 전송은 빠졌다
양쪽 화면을 확인한 뒤 정기 전송 설정을 켰다. 이어서 확인한 저녁 회차에서는 퇴실과 다음 예약 수집, 기존 메일 발송까지 끝났다. 그런데 서버 전송은 생략돼 있었다.
원인은 Windows의 한글 사용자 경로를 잘못 조합해 설정 파일이 없다고 읽은 것이었다. 설정을 아직 켜지 않은 경우와 경로를 읽지 못한 경우가 같은 대기 상태처럼 지나갔다. 공통 절차에서 사용자 홈 경로를 계산하도록 고치고, 파일 부재와 읽기 오류를 구분했다.
이미 끝난 수집과 메일을 반복하지는 않았다. 그 회차의 달력 조회 결과와 저장된 검증 자료를 대조하고 서버 접수만 수동으로 보완했다. 당시 다음 날 퇴실 4건과 다음 예약 자료가 로컬·운영 양쪽에 들어갔다. 관측한 원래 시각은 그대로 남겼다.
접수 뒤 확인 스크립트가 여러 JSON 출력 줄을 하나로 읽으면서 또 오류를 냈다. 전송 자체는 이미 끝난 상태였다. 저장된 접수 응답과 DB를 먼저 확인했고, 확인 스크립트의 실패를 새 전송이 필요한 상황으로 처리하지 않았다.
메일 발송 완료, 서버 접수, 화면 표시, 자동 회차의 성공은 다른 결과였다. 하나가 끝났다는 이유로 나머지도 끝났다고 보고할 수 없었다.
작업을 시작할 자료까지 연결했다
현재는 실제 수집 자료가 테스트 호스트의 양쪽 서버와 화면에 연결됐다. 정기 전송 설정도 활성화했고 경로 오류를 수정했다. 다만 보완한 회차는 수동 접수였으므로, 수정한 절차가 정기 회차에서 스스로 전송하는 것까지는 아직 확인하지 못했다.
작업 배정과 수행·보고, 월 계산서에는 별도의 로컬 검증이 있다. 하지만 이번 예약으로 실제 작업자가 청소를 수행하고 운영자가 정산하는 전체 과정은 확인하지 않았다. 수집 연동을 그 전체 과정의 완료로 쓰지는 않으려 한다.
메일로 읽던 정보를 호스트 화면에서 확인할 수 있게 된 것은 이번 작업의 결과다. 그 정보로 작업자를 고르고 전달한 뒤, 부족한 내용 때문에 다시 연락하는 일이 얼마나 생기는지는 다음에 볼 부분이다. 예약을 모으는 도구에서 작업을 시작할 자료를 제공하는 도구로 이어가는 중이다.