Skip to content

feat(server): 광고 제목 차단 — 관리자가 표시하면 조회·등록을 막는다 - #33

Merged
countnine merged 1 commit into
masterfrom
feat/server/ad-blocklist
Aug 3, 2026
Merged

feat(server): 광고 제목 차단 — 관리자가 표시하면 조회·등록을 막는다#33
countnine merged 1 commit into
masterfrom
feat/server/ad-blocklist

Conversation

@countnine

Copy link
Copy Markdown
Owner

Spotify 광고가 가사로 올라와 있었습니다. 실제 서버에 있던 두 행:

광고 없이 음악을 감상하세요.  | spotify
NEW 뉴트럴 보드카 하이볼 출시  | NUTRL 뉴트럴

자동 판정(AdSignals)은 재생 메타데이터의 광고 플래그·mediaId에 기대는데, Spotify가 그걸
주지 않는 경로가 있어 빠져나옵니다. 사람이 곡 상세에서 [광고로 표시] 를 누르면 그 제목이 막힙니다.

동작

  • 표시하면 이미 올라온 가사도 지웁니다(쓰레기 행이므로). 같은 제목이 아티스트만 달리해
    여러 행으로 갈려 있어도 전부 지웁니다.
  • GET /v1/lyrics404 + {"ad":true} → 클라이언트가 제공자 검색을 건너뜁니다.
  • PUT /v1/lyrics202 + {"error":"ad"} → 저장하지 않습니다.

차단의 실효는 PUT 쪽에 있습니다. 힌트를 모르는 구버전 앱도 여기서 막히므로 앱을 새로
배포하지 않아도 오염이 멈춥니다.
조회 힌트는 헛도는 검색을 아끼기 위한 추가분입니다.

설계 판단

  • 제목만 봅니다(공백·문장부호·대소문자 무시). 같은 광고가 아티스트를 여러 이름으로 달고
    오기 때문입니다 — 위 두 행만 봐도 spotifyNUTRL 뉴트럴로 다릅니다.
  • 광고 조회는 기록도 남기지 않습니다. 미스로 세면 히트율과 "미스 상위(채울 후보)" 목록이
    둘 다 오염됩니다 — 채울 수 없는 것을 채울 후보로 보여 주면 안 됩니다.
  • 되돌릴 수 있습니다. 대시보드에 차단 목록과 [해제] 버튼을 뒀습니다. 진짜 곡을 잘못
    막았을 때 서버에 들어가지 않고도 풀 수 있어야 합니다.

확인

배포 후 실측으로 위 두 광고를 표시해 차단했고, 조회 404+힌트 / 등록 202 거부 / Shallow 200 정상을
확인했습니다. user_version=6, 배포 전 백업 있음.

테스트 7건 추가(295개 통과), 경고 0.

🤖 Generated with Claude Code

자동 판정(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>
@countnine
countnine merged commit 8a980ff into master Aug 3, 2026
1 check passed
@countnine
countnine deleted the feat/server/ad-blocklist branch August 3, 2026 11:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant