2024년 4월 15일
로그인 기반 편집과 요청 이력 도입
로그인·역할별 편집 권한과 수정 요청 이력 도입.
개선
참여와 신뢰
#오락실문서
eric

편집 화면에서 값을 바로 바꿀 수 있게 되면 오락실 정보를 반영하는 일은 편해진다. 그러나 잘못된 값으로 저장했을 때 이전 내용을 찾을 수 없다면, 관리자는 수정을 받을 때마다 계속 지켜봐야 한다. 이용자에게 편집을 열기 위해서는 입력 도구뿐 아니라 변경을 확인하고 되돌릴 방법도 필요하다.

Gamma에서는 OAuth 로그인과 역할별 권한을 도입하고 요청 내용을 userTicket에 보관하도록 했다. 계정과 제출 내용을 함께 찾을 수 있게 해 편집을 개방할 준비를 하는 변화다.

직접 갱신과 변경 내역의 필요

PocketBase SDK로 값을 갱신하면서 수작업은 줄었지만 잘못된 변경을 복원하는 기능은 없었다. 예를 들어 영업시간을 잘못 입력한 경우, 현재 값만 보고는 이전에 어떤 내용을 제출했는지 알기 어렵다. 이 상태에서 편집자를 늘리면 확인할 작업도 늘어난다.

그래서 누가 제출했는지와 어떤 값을 보냈는지를 함께 보관하기로 했다. 현재 문서 외에 과거 요청을 읽을 수 있으면, 문제를 발견한 뒤 내용을 확인하고 다시 적용할 자료가 생긴다.

Mermaid
flowchart TD
    accTitle: 계정과 수정 입구
    accDescr: 계정을 확인하고 역할을 구분한 뒤 전용 API로 수정한다.
    A["OAuth 로그인"] --> B
    B["역할 확인"] --> C
    C["영역별 수정 API"]

OAuth 로그인과 역할별 편집 권한

OAuth는 외부의 로그인 제공자를 이용해 계정을 확인하는 방식이다. 문서 수정에는 이 로그인을 필수로 하고 최고 관리자, 관리자, 회원의 역할을 구분했다. 계정 확인만 끝났다고 관리자 작업까지 허용하는 방식은 아니다.

갱신 경로도 영역별 수정 API로 바꿨다. API는 화면이 서버에 변경을 요청하는 통로이며, 범용 PUT으로 데이터를 직접 덮어쓰던 경로는 막았다. 요청자 확인과 제출 내용의 저장이 이 경로를 거치도록 하려는 것이다.

Mermaid
flowchart TD
    accTitle: 요청을 남기는 복원
    accDescr: 저장된 과거 요청을 새 요청으로 제출해 같은 경로로 복원한다.
    A["요청 JSON 보관"] --> B
    B["과거 요청 선택"] --> C
    C["새 요청으로 재등록"] --> D
    D["같은 수정 흐름으로 반영"]

요청 보관과 이전 내용의 재적용

수정 API가 받은 JSON은 userTicket에 저장한다. JSON은 제출한 항목과 값을 표현하는 형식이다. 이렇게 원래 입력을 보관하면, 나중에 현재 문서와 대조하거나 복원할 요청으로 사용할 수 있다.

복원할 때는 과거 티켓의 값을 골라 새 요청으로 등록하고 같은 수정 과정을 거친다. 원래 요청을 지우지 않으며 복원도 새 제출로 남는다. 따라서 특정 문서의 입력을 재적용할 수 있지만, 서버 전체를 과거 시점으로 되돌리는 백업 복구는 아니다.

Mermaid
flowchart TD
    accTitle: 남아 있는 보호 장치
    accDescr: 기록과 함께 쿨다운과 민감한 수정의 승인을 적용한다.
    A["수정 요청"] --> B
    B["생성 쿨다운과 기록"] --> C
    C["민감한 변경 관리자 승인"] --> D
    D["공개 반영"]

반복 제출과 민감한 변경의 관리

티켓 생성에는 쿨다운을 둔다. 쿨다운은 다음 제출까지 기다리는 시간을 두는 것으로, 같은 요청을 연속해서 보내거나 스팸을 쌓는 일을 제한한다. 사진 업로드, 새 오락실, 폐업 표시는 관리자 승인 후 공개한다.

이제 작성자와 제출값을 찾아 이전 요청을 다시 반영할 수 있다. 다만 보관하는 것은 아직 원시 JSON이므로 요청의 검증과 형식 통일은 더 보완해야 한다. 일상 수정에 필요한 편의와 공개 전에 확인할 항목을 나눠 운영할 계획이다.

참고: 뮤즈캣 엔지니어링 기록.

뮤즈캣
리듬게이머의 최고의 파트너