탈퇴 처리와 결제 웹훅이 같은 순서로 잠그게 했다
계정을 지우는 동안 결제 웹훅이 들어오면 교착이나 절반만 지워진 계정이 될 수 있었다. 잠금 순서를 웹훅과 맞추고, 남는 행에서는 신원만 지우도록 정리했다.
태그
#개인정보 · 15개
계정을 지우는 동안 결제 웹훅이 들어오면 교착이나 절반만 지워진 계정이 될 수 있었다. 잠금 순서를 웹훅과 맞추고, 남는 행에서는 신원만 지우도록 정리했다.
방문 수와 광고 슬롯 수치는 요청이 도착했다는 사실만으로 만들어졌다. 기록하기 전에 출처와 사용자 에이전트를 나누고, IP 원문 대신 해시만 남기도록 바꿨다.
SDK 객체가 준비된 것과 광고를 요청해도 되는 것을 같은 사실로 다루고 있었다. 요청 허용은 동의 결과의 명시적인 값으로만 판단하고, 실패는 진단 코드로 남기게 했다.
개인 데이터 내보내기는 요청 즉시 파일을 내려주는 기능이 아니었다. 요청을 대기열에 넣고, 준비된 파일은 본인에게만 캐시 없이 전달하며, 만료되면 삭제 대기열을 거쳐 남지 않게 했다.
로그아웃은 토큰만 지우는 일이 아니었다. 위젯, 알림, Live Activity, 워치 상태를 정리하되 네이티브 작업이 멈춰도 계정 전환은 제한 시간 안에 끝내게 했다.
댓글 목록에는 투표 조건이 있는데 베스트 댓글 API가 따로 열리면 내용이 새어 나갈 수 있다. 같은 공개 조건을 먼저 통과한 사람에게만 진영별 댓글을 골라 보냈다.
차단한 작성자를 제외하려고 NOT IN을 붙였더니 authorId가 NULL인 시스템 글도 목록에서 빠졌다. NULL을 따로 살리는 조건으로 고쳤다.
가입 전에 만든 데이터를 로그인 뒤 합치는 재시도가 계정 전환을 따라갈 수 있었다. 처음 합치기를 시작한 이메일과 사용자 ID에 작업을 묶었다.
로그아웃하면서 위젯을 비웠는데 늦게 끝난 이전 새로고침이 다시 써버렸다. 계정 세대 번호와 직렬 queue로 오래된 native write를 막았다.
다운로드 요청이 끝났다는 이유만으로 JSON 파일을 공유하고 있었다. 서버의 byte 수와 SHA-256을 비교하고 임시 파일도 반드시 지웠다.
서버 세션만 지우고 로컬 게임 기록과 알림 설정, 작성 임시 저장을 남겨 다른 계정에 연결됐다. 항목별 정리 결과를 모아 일부 실패까지 알 수 있게 바꿨다.
앱의 세션만 지우고 서버에 남은 기기 등록은 그대로 두고 있었다. 인증 토큰을 없애기 전에 푸시와 위젯 연결부터 끊었다.
앱 시작과 화면 복귀가 광고 준비를 동시에 부르면서 동의창이 겹쳤다. 진행 중인 Promise를 함께 기다리고, 판단할 수 없으면 개인화를 끄게 정리했다.
공개 주소에서 내부 UUID를 빼려 했는데 이미 보낸 알림과 저장된 북마크는 옛 값을 들고 있었다. 새 주소로 옮기면서 읽기 호환만 잠시 남겼다.
남의 예약에는 403, 없는 예약에는 404를 주니 식별자만 바꿔도 존재 여부가 보였다. 밖에서는 같은 404를 주고 자세한 원인은 내부 기록으로만 남겼다.