feat(server): 광고 제목 차단 — 관리자가 표시하면 조회·등록을 막는다 - #33
Merged
Conversation
자동 판정(AdSignals)은 재생 메타데이터의 광고 플래그·mediaId에 기대는데, Spotify가 그걸 주지
않는 경로가 있다. 그래서 "광고 없이 음악을 감상하세요.", "NEW 뉴트럴 보드카 하이볼 출시" 같은
행이 실제로 가사로 올라와 있었다. 사람이 곡 상세에서 [광고로 표시]를 누르면 그 제목이 막힌다.
- 표시하면 **이미 올라온 가사도 지운다**(쓰레기 행이다). 같은 제목이 아티스트만 달리해 여러
행으로 갈려 있어도 전부 지운다.
- `GET /v1/lyrics` → 404 + `{"ad":true}`. 클라이언트는 제공자 검색을 건너뛴다 — 광고는 곡이
아니라 검색이 늘 헛돌고, 어쩌다 뭔가 맞으면 광고 위에 엉뚱한 가사가 뜬다.
- `PUT /v1/lyrics` → 202 + `{"error":"ad"}`. **차단의 실효는 이쪽에 있다** — 힌트를 모르는
구버전 앱도 여기서 막히므로, 앱을 새로 배포하지 않아도 오염이 멈춘다.
판정은 **제목만** 본다(공백·문장부호·대소문자 무시). 같은 광고가 아티스트를 여러 이름으로
달고 오기 때문이다("Spotify", "광고 • 1/2" …).
광고 조회는 **기록도 남기지 않는다.** 미스로 세면 히트율과 "미스 상위(채울 후보)" 목록이
둘 다 오염된다 — 채울 수 없는 것을 채울 후보로 보여 주면 안 된다.
되돌릴 수 있어야 하므로 차단 목록을 대시보드에 [해제] 버튼과 함께 보여 준다. 진짜 곡을 잘못
막았을 때 서버에 들어가지 않고도 풀 수 있다.
테스트 7건 추가(295개 통과), 경고 0.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.
Spotify 광고가 가사로 올라와 있었습니다. 실제 서버에 있던 두 행:
자동 판정(
AdSignals)은 재생 메타데이터의 광고 플래그·mediaId에 기대는데, Spotify가 그걸주지 않는 경로가 있어 빠져나옵니다. 사람이 곡 상세에서 [광고로 표시] 를 누르면 그 제목이 막힙니다.
동작
여러 행으로 갈려 있어도 전부 지웁니다.
GET /v1/lyrics→404+{"ad":true}→ 클라이언트가 제공자 검색을 건너뜁니다.PUT /v1/lyrics→202+{"error":"ad"}→ 저장하지 않습니다.차단의 실효는
PUT쪽에 있습니다. 힌트를 모르는 구버전 앱도 여기서 막히므로 앱을 새로배포하지 않아도 오염이 멈춥니다. 조회 힌트는 헛도는 검색을 아끼기 위한 추가분입니다.
설계 판단
오기 때문입니다 — 위 두 행만 봐도
spotify와NUTRL 뉴트럴로 다릅니다.둘 다 오염됩니다 — 채울 수 없는 것을 채울 후보로 보여 주면 안 됩니다.
막았을 때 서버에 들어가지 않고도 풀 수 있어야 합니다.
확인
배포 후 실측으로 위 두 광고를 표시해 차단했고, 조회 404+힌트 / 등록 202 거부 /
Shallow200 정상을확인했습니다.
user_version=6, 배포 전 백업 있음.테스트 7건 추가(295개 통과), 경고 0.
🤖 Generated with Claude Code