← 모든 글

AI 커버곡에 돈이 흐르기 시작했다

Spotify-UMG AI 커버곡 정산 딜을 결제·자동화 팀 시각으로 해석한다. 원저작물 식별 구조부터 부동소수점 오차, 최소 지급 임계값까지 실제 파이프라인 설계 전략을 담았다.

이건 음악 산업 뉴스가 아니라 정산 파이프라인 뉴스다

2026년 5월, Spotify가 Universal Music Group(UMG)과 체결한 계약의 구조는 이렇다: 프리미엄 구독자가 AI 툴로 특정 아티스트의 커버곡이나 리믹스를 만들면, 원곡 권리자에게 수익 일부가 자동으로 배분된다. 저작권 회색지대에서 플랫폼에 조용히 삭제되거나 그냥 유통되던 팬 메이드 AI 콘텐츠가 공식 정산 라인 위에 올라온, 업계 최초의 대형 사례다.

HEDVION 팀이 이 딜에서 주목한 건 "아티스트가 이제 AI 커버로 돈을 번다"는 헤드라인이 아니다. 생성 행위 → 원저작물 식별 → 수익 배분, 이 세 단계가 사람 개입 없이 자동으로 연결된다는 구조다. 파트너사 API를 통해 발생한 거래에서 수수료를 자동으로 쪼개 분배하고, 구독 플랫폼에서 콘텐츠 사용량 기반으로 크리에이터 정산을 처리하는 파이프라인 — 우리가 매일 코드로 구현하는 것들과 본질적으로 같은 문제다. 규모만 다를 뿐, 설계가 풀어야 할 질문은 동일하다.

세 단계 중 실제로 제일 어려운 건 '식별'이다

정산 파이프라인의 세 단계 중 기술적으로 가장 까다로운 것은 두 번째인 원저작물 식별이다. AI 커버곡이 생성되는 순간, 시스템은 "이 음원이 어떤 원곡을 기반으로 했는가"를 정확히 확정해야 한다. Spotify 입장에서는 오디오 핑거프린팅(audio fingerprinting)으로 원곡을 매칭하고, 권리자 테이블에서 배분 대상을 확정한 뒤 정산 룰을 실행하는 파이프라인이 필요하다. 이 연결고리가 끊기는 순간, 이후의 배분 연산은 통째로 무의미해진다.

이걸 결제·정산 도메인으로 번역하면 구조가 그대로 겹친다: 파트너사 API를 통해 들어온 거래 한 건에서 "이 거래가 어떤 계약 조건을 가진 파트너로부터 왔는가"를 정확히 식별하는 문제다. HEDVION의 정산 파이프라인에서 partner_id, contract_version, fee_schedule_id가 올바르게 연결돼 있지 않으면, 자동화 코드가 틀린 비율로 수수료를 쪼개는 조용한 버그가 발생한다. 에러를 뱉지 않아서 모르고 지나치는 그 버그가 실제로 가장 위험하다. Spotify도 같은 유형의 위험을 다루고 있다.

수치로 보는 복잡도 — 단순해 보이는 정산이 왜 터지는가

개념적으로 수익 배분은 단순하다.

from decimal import Decimal, ROUND_HALF_UP

def distribute_revenue(total: Decimal, rules: dict) -> dict:
    distributed = {
        party: (total * Decimal(str(share))).quantize(
            Decimal("0.01"), rounding=ROUND_HALF_UP
        )
        for party, share in rules.items()
    }
    # 반올림 오차 보정: 나머지를 첫 번째 수취자에게 귀속
    diff = total - sum(distributed.values())
    first_key = next(iter(distributed))
    distributed[first_key] += diff
    return distributed

rules = {"artist": 0.45, "platform": 0.35, "label": 0.20}
distribute_revenue(Decimal("10000"), rules)
# {'artist': Decimal('4500.00'), 'platform': Decimal('3500.00'), 'label': Decimal('2000.00')}

처음에 float로 짜면 이걸 모른다. Spotify처럼 스트리밍 단가가 건당 $0.003~$0.005 수준일 때, 1억 건을 float으로 처리하면 누적 반올림 오차가 수천 달러 단위 차이로 나타난다. 이게 첫 번째 폭탄이다.

실제 운영에서 HEDVION이 마주친 엣지 케이스를 더 나열하면: 최소 지급 임계값(minimum payout threshold) — 아티스트 한 명에게 배분될 금액이 ₩500 미만일 경우 이월(carry-forward)할 것인가, 플랫폼이 수취할 것인가, 별도 적립할 것인가. 이 규칙이 없으면 정산 후 정산분 분쟁이 된다. 통화 환산 타이밍 — 달러 수익을 원화로 환산할 때 정산일 기준 환율을 쓸지, 거래 발생일 기준을 쓸지에 따라 수익 귀속 금액이 수 퍼센트 단위로 달라진다. 계약서에 명문화되지 않으면 반드시 분쟁이 발생한다. 단순 곱셈처럼 보이는 정산 로직이 수십 개의 엣지 케이스를 다루는 시스템으로 자라는 것은, Spotify든 우리든 피할 수 없는 과정이다.

HEDVION 팀이라면 이렇게 구현한다

만약 HEDVION이 "AI 생성 콘텐츠 수익 배분" 파이프라인을 직접 설계해야 한다면, 실전 접근 방식은 네 단계로 요약된다.

1단계: 생성 시점과 정산 시점을 분리한다. cover_created 이벤트가 발생하면 메시지 큐(SQS 혹은 Redis Stream)에 적재하고, 정산 워커가 비동기로 처리한다. 팬 한 명이 하루 50개의 AI 커버를 만들어도 정산 파이프라인이 뒤처지지 않으려면 이 버퍼가 필수다. Spotify 규모에서 이 구분이 없으면 정산 처리가 스트리밍 트래픽에 직접 종속되고, 피크 타임마다 병목이 된다.

2단계: source_content_id를 모든 파생물 레코드에 강제 연결한다. AI 커버 생성 시 원곡의 식별자(ISRC 코드 혹은 내부 track_id)와 권리자 ID를 메타데이터로 저장하되, nullable을 허용하지 않는다. 우리 팀의 경험상 이 필드를 나중에 추가할 때 드는 데이터 마이그레이션 비용은 처음부터 설계하는 것보다 3~5배 더 든다. "나중에 붙이면 되지"는 결제·정산 도메인에서는 통하지 않는다.

3단계: 정산 룰을 코드가 아닌 설정값으로 관리한다. 배분 비율을 distribute_revenue 함수 안에 하드코딩하지 않고, DB의 fee_schedules 테이블에서 읽어온다. Spotify-UMG 딜에서도 대형 레이블과의 계약 조건이 인디 아티스트와 다를 수 있다. 룰이 코드에 박혀 있으면 조건이 바뀔 때마다 배포가 필요하고, 변경 이력이 Git 커밋에 묻혀 감사(audit) 시 재구성이 불가능해진다.

4단계: 자동화가 처리 못하는 케이스를 위한 수동 검토 큐를 별도 운영한다. 원저작물 식별 실패, 권리자 분쟁, 세금 처리 예외는 자동 정산에서 제외하고 별도 큐에 적재해 담당자가 확인 후 처리한다. 전체 건수의 2~3%만 이 경로로 빠지더라도 시스템 전체의 신뢰성이 극적으로 올라간다. "전부 자동화"를 고집하다 엣지 케이스에서 무너지는 시스템보다, 80% 자동화 + 20% 잘 설계된 예외 경로가 실제 운영 환경에서 훨씬 강하다.

자동화가 선택지가 아닌 전제조건이 된 이유

Spotify에는 매일 약 6만 곡 이상의 새 음원이 업로드된다. AI 커버 기능이 프리미엄 구독자 2억 5천만 명에게 열리면 이론적으로 하루 수백만 건의 파생 콘텐츠가 생성 가능하다. 이 규모에서 수작업 정산은 물리적으로 불가능하다. 자동화는 비용 절감 선택지가 아니라 서비스 운영의 전제조건이다.

HEDVION 팀도 동일한 압력 곡선을 경험한다. 파트너사 수가 두 배가 되면 거래 건수는 그보다 빠르게 늘어나고, 정산 복잡도는 다시 그보다 빠르게 늘어난다. 사람이 직접 처리하는 정산 프로세스는 선형적으로만 스케일하지만, 잘 설계된 룰 기반 자동화 시스템은 거의 수직에 가깝게 스케일한다. 이 비대칭성이 작은 팀이 큰 팀과 경쟁할 수 있는 구조적 레버다. Spotify-UMG 딜은 그 레버를 글로벌 스케일에서 구현한 사례일 뿐이다.

바로 써먹는 실행 시사점

이 뉴스가 결제·정산·자동화 팀에 던지는 메시지는 세 가지로 압축된다.

① 이번 주 안에 정산 룰을 코드 밖으로 꺼내라. 배분 비율이나 수수료 조건이 파이썬 파일 어딘가에 하드코딩돼 있다면 지금 당장 DB 테이블이나 설정 파일로 이동하라. 계약 조건이 바뀔 때마다 코드를 수정·배포하는 구조는 기술 부채를 넘어 운영 리스크다. 변경 이력이 코드 커밋에 묻히면 감사 시 "그때 왜 그 비율이었나"를 재구성하는 것이 불가능해진다.

② 모든 거래 레코드에 source_id를 nullable 없이 강제 필드로 넣어라. "이 거래가 어디서 왔는가"를 잃지 않는 것이 정산 시스템의 가장 기본적인 불변식이다. 지금 당장 완벽한 추적 시스템을 구축할 수 없더라도, 최소한 source_typesource_id 컬럼을 스키마에 넣어라. 사후에 추가할 때의 마이그레이션 비용은 지금 당장 설계하는 것의 몇 배다.

③ 자동화 범위와 수동 검토 범위의 경계를 코드 주석 혹은 문서로 명문화하라. 이 경계가 흐릿하면 엣지 케이스 발생 시 아무도 책임 소재를 모른 채 시스템이 조용히 오작동한다. 경계를 명확히 해야 온콜 대응이 빨라지고, 신규 팀원 온보딩이 쉬워지며, 분쟁 발생 시 처리 절차가 명확해진다.

Spotify-UMG 딜은 수십억 달러 규모 플레이어의 이야기지만, 그 안의 설계 원칙은 5인 팀에도 그대로 적용된다. AI가 콘텐츠 생성 속도를 올릴수록, 그 뒤를 정산하는 인프라의 설계 품질이 비즈니스 생존을 가른다. 지금 기술 부채로 묻어두고 있는 정산 로직이 있다면, 그것이 다음 병목이 될 것이다.


원문: Spotify and Universal Music strike deal allowing fan-made AI covers and remixes — TechCrunch

* 위 링크는 인프런 affiliate 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

📚 추천 강의
한 입 크기로 잘라먹는 바이브코딩 (with Claude Code)
Claude Code로 바이브코딩, 개발자라면 꼭 들어야 할 필수 강의
강의 보러가기 →

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