편집 화면에서 값을 바로 바꿀 수 있게 되면 오락실 정보를 반영하는 일은 편해진다. 그러나 잘못된 값으로 저장했을 때 이전 내용을 찾을 수 없다면, 관리자는 수정을 받을 때마다 계속 지켜봐야 한다. 이용자에게 편집을 열기 위해서는 입력 도구뿐 아니라 변경을 확인하고 되돌릴 방법도 필요하다.
Gamma에서는 OAuth 로그인과 역할별 권한을 도입하고 요청 내용을 userTicket에 보관하도록 했다. 계정과 제출 내용을 함께 찾을 수 있게 해 편집을 개방할 준비를 하는 변화다.
PocketBase SDK로 값을 갱신하면서 수작업은 줄었지만 잘못된 변경을 복원하는 기능은 없었다. 예를 들어 영업시간을 잘못 입력한 경우, 현재 값만 보고는 이전에 어떤 내용을 제출했는지 알기 어렵다. 이 상태에서 편집자를 늘리면 확인할 작업도 늘어난다.
그래서 누가 제출했는지와 어떤 값을 보냈는지를 함께 보관하기로 했다. 현재 문서 외에 과거 요청을 읽을 수 있으면, 문제를 발견한 뒤 내용을 확인하고 다시 적용할 자료가 생긴다.
OAuth는 외부의 로그인 제공자를 이용해 계정을 확인하는 방식이다. 문서 수정에는 이 로그인을 필수로 하고 최고 관리자, 관리자, 회원의 역할을 구분했다. 계정 확인만 끝났다고 관리자 작업까지 허용하는 방식은 아니다.
갱신 경로도 영역별 수정 API로 바꿨다. API는 화면이 서버에 변경을 요청하는 통로이며, 범용 PUT으로 데이터를 직접 덮어쓰던 경로는 막았다. 요청자 확인과 제출 내용의 저장이 이 경로를 거치도록 하려는 것이다.
수정 API가 받은 JSON은 userTicket에 저장한다. JSON은 제출한 항목과 값을 표현하는 형식이다. 이렇게 원래 입력을 보관하면, 나중에 현재 문서와 대조하거나 복원할 요청으로 사용할 수 있다.
복원할 때는 과거 티켓의 값을 골라 새 요청으로 등록하고 같은 수정 과정을 거친다. 원래 요청을 지우지 않으며 복원도 새 제출로 남는다. 따라서 특정 문서의 입력을 재적용할 수 있지만, 서버 전체를 과거 시점으로 되돌리는 백업 복구는 아니다.
티켓 생성에는 쿨다운을 둔다. 쿨다운은 다음 제출까지 기다리는 시간을 두는 것으로, 같은 요청을 연속해서 보내거나 스팸을 쌓는 일을 제한한다. 사진 업로드, 새 오락실, 폐업 표시는 관리자 승인 후 공개한다.
이제 작성자와 제출값을 찾아 이전 요청을 다시 반영할 수 있다. 다만 보관하는 것은 아직 원시 JSON이므로 요청의 검증과 형식 통일은 더 보완해야 한다. 일상 수정에 필요한 편의와 공개 전에 확인할 항목을 나눠 운영할 계획이다.
참고: 뮤즈캣 엔지니어링 기록.