자동화 slecs

음악 발견 봇의 장르별 노이즈 필터링 정확도 개선

목차

음악 발견 시스템에서 특정 신호가 없을 때의 필터링이 제대로 동작하지 않던 문제를 수정했다. 사소해 보이지만, 자동화 시스템에서 "조건부 처리"의 함정을 보여주는 좋은 사례다.

문제 상황: 신호 부재 시 노이즈 증가

우리 음악 발견 봇은 사용자의 취향에 따라 여러 장르(아이돌, 밴드, 인디, 힙합 등)의 결과를 추천한다. 핵심은 아이돌 신호가 있는지 없는지에 따라 필터링 규칙을 달리 적용해야 한다는 점이다.

예를 들어:
- 사용자가 아이돌 음악 신호를 보였을 때 → 아이돌 결과 포함, 다른 장르는 가끔 섞임
- 사용자가 아이돌 신호를 보이지 않았을 때 → 밴드/인디/힙합 결과는 깔끔하게, 무관한 노이즈 배제

그런데 후자의 경우, 밴드/인디/힙합 같은 장르에서 불필요한 결과가 섞여 올라왔다. 필터링 조건이 "아이돌 신호 있음"에만 적용되고 있었고, "아이돌 신호 없음"의 경우는 명시적으로 처리하지 않고 있던 것이다.

근본 원인: 조건부 로직의 단방향 처리

이런 버그는 자동화 시스템의 일반적인 안티패턴이다:

if (아이돌_신호_있음):
    필터 적용 (정상)
else:
    # 아무것도 안 함 (문제!)

대부분의 개발자가 "어떤 신호가 있을 때" 그걸 처리하는 데 집중한다. 하지만 자동화 시스템은 "신호가 없는 경우"도 명시적으로 정의해야 한다. 왜냐하면:

  • 신호 부재 = 디폴트 동작인데, 그 디폴트가 항상 옳은 건 아님
  • 여러 신호가 조합되면, 부분적 신호만으로는 중간 상태를 제어할 수 없음
  • 결과적으로 "의도하지 않은 디폴트 동작"이 프로덕션에서 계속됨

해결책: 신호 부재도 명시적 처리

수정 후 로직:

if (아이돌_신호_있음):
    [밴드/인디/힙합 결과 중] 아이돌 연관성 높은 것 배제
else:
    [밴드/인디/힙합 결과 중] 모든 노이즈 추가 필터링

신호가 없을 때도 적극적으로 필터를 강화하는 방식이다. 이렇게 하면:

  • "신호가 없다"는 상태를 단순히 무시하지 않음
  • 더 엄격한 필터링 규칙을 적용해서 정확도 개선
  • 추후 다른 신호(예: "발라드 신호")가 추가돼도 같은 패턴으로 확장 가능

회고: 조건부 필터링을 설계할 때

이런 류의 버그를 미리 방지하려면, 리뷰나 설계 단계에서:

  1. 모든 신호 상태를 명시적으로 나열
  2. 신호 A 있음 → 동작 X
  3. 신호 A 없음, 신호 B 있음 → 동작 Y
  4. 둘 다 없음 → 동작 Z

  5. else 블록도 코드 리뷰 체크리스트에 포함

  6. "이 else 블록이 정말 최선인가?"
  7. "혹시 암묵적 기본값에 의존하고 있지는 않은가?"

  8. 자동화 봇 테스트에 상태 조합 포함

  9. 신호 있음/없음 각각 테스트
  10. 부분적 신호(신호 A만 있고 B는 없음) 시나리오도 포함

이번 케이스처럼, "어떤 신호가 없을 때"라는 엣지 케이스는 프로덕션에서 자주 발생하지만, 설계 단계에서 명시적으로 다루지 않으면 쉽게 놓친다. 특히 여러 신호가 독립적으로 움직이는 시스템일수록 더 그렇다.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.