게스트의 토너먼트 생성 제한을 클라 대응 전까지 임시 해제 - #966
Merged
Merged
Conversation
- #904(v1.2.0 promote)에서 넣은 회원 전용 게이트가, 클라이언트의 403(TOURNAMENT-036) 대응 없이 prod 에 나갔다. 게스트가 토너먼트를 만들려 하면 클라가 해석하지 못하는 응답을 받고 있어 이 게이트만 국소적으로 걷는다 - requireMember 에서 identityType 분기만 빼고 탈퇴(tombstone) 계정 차단은 남긴다. 그쪽은 #691 사유라 게스트 건과 무관하다. 남은 책임이 하나뿐이라 이름도 rejectIfDeleted 로 바꿔 함수명이 실제 계약과 어긋나지 않게 했다 - TOURNAMENT-036 의 ErrorCode 엔트리와 예외 팩토리는 지우지 않았다. 곧 되살릴 것이라 재적용을 한 줄 복구로 끝내려는 것이고, 번호는 append-only 라 남겨 둬도 재사용 위험이 없다. 되살릴 자리는 rejectIfDeleted 주석에 적어 뒀다 - 반면 API 문서의 403 @apiresponse 와 example 은 지웠다. 도달 불가가 된 응답을 선언만 남기면 example 커버리지 메타 테스트가 깨지고, docs 가 실제 계약과 어긋난다 - 게스트 거부 테스트는 삭제 대신 반대 단언(201 + 실제 행 증가)으로 뒤집었다. 게이트를 임시로 되살리면 155건 중 이 테스트만 정확히 깨지는 것을 negative control 로 확인했다 - 감수하는 것: 게스트가 오너인 토너먼트의 아이템 등록은 그 게스트 몫에서 깎이는데 게스트 계정은 무한 발급되므로, 계정별 한도는 이 창 동안 게스트에 대해 실효가 없다. 남는 방어선은 전역 가용량 상한 하나다. 게스트 전용 별도 한도는 곧 게이트를 되살릴 예정이라 두지 않았다
|
Discord 스레드 연동용 메타데이터입니다. discord-pr-bot 워크플로가 자동 생성하며, 수정·삭제하면 PR 과 Discord 알림 연동이 끊깁니다. |
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yml Review profile: CHILL Plan: Pro Plus Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Situation
#904 는 아이템 등록 한도를 계정 단위로 걸면서, 그 한도가 우회되지 않도록 토너먼트 생성을 회원 전용으로 좁혔다. 게스트 계정은
POST /auth/guest로 입력값 없이 무한 발급되므로, 비용이 드는 행위의 소유자가 게스트면 계정을 갈아타는 것만으로 한도가 리셋되기 때문이다.그 변경이 v1.2.0 promote(2026-08-13)로 prod 에 나갔는데, 클라이언트가 아직 이 403(TOURNAMENT-036)을 처리하지 못한다. 지금 prod(v1.3.1)에서 게스트가 토너먼트를 만들려 하면 앱이 해석하지 못하는 응답을 받는다.
게스트를 막는 지점은 코드 전체에 네 곳인데, 이번 promote 구간에서 새로 좁혀진 것은 토너먼트 생성 하나뿐이다.
아래 셋은 6월부터 있던 계약이라 클라가 이미 대응한 상태다. 그래서 되돌릴 범위는 하나로 좁혀진다.
Task
Action
무엇을 빼고 무엇을 남겼나
requireMember는 두 가지를 함께 막고 있었다. 신분 검사(게스트 차단)와 탈퇴(tombstone) 계정 차단인데, 뒤쪽은 #691 사유라 이번 건과 무관하다. 신분 검사만 빼고, 남은 책임이 하나뿐이 되었으므로 이름도rejectIfDeleted로 바꿨다. 이름이 실제 계약과 어긋난 채로 남으면 다음 독자가 잘못 읽는다.TournamentService의 신분 분기TOURNAMENT-036enum 엔트리guestCannotCreateTournament()팩토리@ApiResponse+ example되살릴 위치는
rejectIfDeleted주석에 복구할 한 줄 그대로 적어 뒀다. 코드와 문서에서 각각 무엇을 되돌려야 하는지 찾아다니지 않게 하려는 것이다.테스트는 지우지 않고 뒤집었다
게스트 거부 테스트를 삭제하는 대신 반대 단언(201 + 실제 행 증가)으로 교체했다. 삭제하면 롤백이 실제로 동작하는지 아무도 확인하지 않고, 재적용 때 테스트를 새로 써야 한다. 뒤집어 두면 그 자리가 계약의 현재 상태를 계속 말한다.
이 테스트가 배선을 검증하는지는 negative control 로 확인했다. 게이트 한 줄을 임시로 되살리자 155건 중 이 테스트 하나만 실패했고, 원복 후 다시 통과했다.
Result
SERVER_BUSY503) 하나다rejectIfDeleted의 분기 한 줄과 API 문서의 403 선언, example 을 복구하고 테스트 단언을 원래대로 되돌린다. code 와 예외는 남아 있어 새로 만들 것이 없다연관 이슈