요즘IT
위시켓
최근 검색어
전체 삭제
최근 검색어가 없습니다.

해외 유명 IT 기업은 각자 자신들의 블로그를 운영해 개발 방법과 기업 문화 등을 소개하고 있습니다. 요즘IT는 이러한 IT 기업 블로그의 콘텐츠를 번역해 소개하는 시리즈를 준비했습니다. 이들은 어떻게 사고하고, 어떤 방식으로 일하는 걸까요?

회원가입을 하면 원하는 문장을
저장할 수 있어요!

다음

회원가입을 하면
성장에 도움이 되는 콘텐츠를
스크랩할 수 있어요!

확인

개발

스포티파이: 맞춤형 플레이리스트 개발 비하인드 스토리

년차,
어떤 스킬
,
어떤 직무
독자들이 봤을까요?
어떤 독자들이 봤는지 궁금하다면?
로그인

해외 유명 IT 기업은 각자 자신들의 블로그를 운영해 개발 방법과 기업 문화 등을 소개하고 있습니다. 요즘IT는 이러한 IT 기업 블로그의 콘텐츠를 번역해 소개하는 시리즈를 준비했습니다. 이들은 어떻게 사고하고, 어떤 방식으로 일하는 걸까요?

 

이번 글은 세계 최대 음원 스트리밍 서비스를 제공하는 스포티파이(spotify)의 ‘A Look Behind Blend: The Personalized Playlist for You…and You’를 번역했습니다. 아래의 글을 통해 스포티파이가 맞춤형 플레이리스트를 개발하는 과정과 비하인드 스토리에 대해 살펴보겠습니다.

 
스포티파이(Spotify)

 

여기 한 가지 아이디어가 있습니다. 새로운 음악 플레이리스트를 만들고 이것을 전 세계의 스포티파이(Spotify) 사용자에게 공유하는 것이죠. 이를 실제로 구현하려면 무엇이 필요할까요? 기획, 프로토타입 제작, 품질 검수, 최종 출시에 이르기까지 스포티파이에서 새로운 플레이리스트를 출시하는 것은 언제나 새롭고 긴 여정입니다.

 

우리는 최근 사용자가 재생 목록을 만들 수 있는 새로운 기능인 블렌드(Blend)를 출시했습니다. 블렌드는 두 이용자의 음악 취향을 하나의 공통 플레이리스트로 합쳐줍니다. 블렌드 이전에는 이와 유사한 패밀리 믹스(Family Mix)와 듀오 믹스(Duo Mix)가 있었습니다. 이 기능은 동일한 가족 구성원이나 듀오(Duo) 요금제를 구매한 사용자들이 공유할 수 있는 플레이리스트를 만들어 줍니다. 제품의 반응이 좋았기에 우리는 이 기능을 확장하기로 했고, 스포티파이의 사용자라면 누구나 두 명이 자동으로 공유되는 맞춤형 플레이리스트를 만들 수 있게 되었습니다.

 

스포티파이에서 새로운 플레이리스트를 출시할 때, 우리는 과거와는 차별된 무언가를 만들어 낸다는 목표를 가지고 있습니다. 이것은 우리가 항상 과거의 경험에 의존할 수 없으며, 새로운 접근 방식으로 새로운 도전에 직면한다는 것을 의미합니다. 특히 블렌드의 경우 패밀리 믹스와 듀오 믹스의 개념이 녹아있지만, 훨씬 더 큰 사용자 층을 대상으로 합니다. 우리 앞에 놓인 가장 큰 장애물은 기능 동작을 위해 처리해야 하는 사용자 수가 크게 증가했다는 사실이었습니다. 또한 블렌드를 만들기 위해 콘텐츠 생성과 사용자 초대 과정에서 맞닥뜨린 문제도 해결해야 했습니다.

 

대부분의 플레이리스트는 여러 속성과 특성으로 이루어집니다. 예를 들어, Discover Weekly의 주요한 기능은 검색입니다. Daily Mix의 주요한 특성은 친숙함과 일관성입니다. 하지만 여러 사용자가 참여하는 순간 다음과 같이 더 많은 속성을 고려해야 합니다. 

  • 연관성: 사용자를 위해 선택한 노래가 그들의 취향을 잘 반영할까요? 아니면 그저 우연히 한 번 들은 노래일까요?
    • 이는 트랙 속성 선정에 매우 중요합니다. 사용자의 프로필 이미지를 노래 옆에 배치하는 경우, 해당 사용자가 플레이리스트에 담긴 노래가 자신의 취향을 잘 나타내는지 확인하는 과정이 필요합니다.
  • 일관성: 플레이리스트에 흐름이 있나요? 아니면 서로 관련이 없는 노래가 무작위로 섞여 있나요?
  • 평등: 블렌드의 두 사용자가 평등하게 표현되나요?
  • 민주주의: 두 사용자 모두가 좋아하는 음악이 상위로 올라오나요?

 

우리가 이 플레이리스트를 기획하며 내려야 했던 가장 중요한 결정 중 하나는, 사용자의 "실망을 최소화" 하는 것과 "기쁨을 극대화" 하는 것 중 무엇이 옳은가 였습니다. 즉, 다른 사람들이 좋아하지 않아도 모두가 좋아하는 트랙을 선택하는 것이 더 나을까요, 아니면 좋아하는 노래가 선택되지 않더라도 모두가 좋아할 것 같은 트랙을 선택하는 것이 더 나을까요? "실망을 최소화" 하는 것은 연관성 보다 민주적이고, 일관된 속성에 무게를 둡니다. "기쁨의 극대화"는 민주적이고 일관된 속성보다 연관성에 무게를 둡니다. 

 

우리는 기쁨을 극대화하는 쪽으로 방향을 잡았습니다. 이는 사용자 개인과 가장 연관성이 높은 노래를 선곡해 줌으로써 기쁨을 극대화하는 방법입니다. 이러한 결정은 임직원과 데이터 큐레이션 팀의 피드백을 기반으로 이루어졌습니다.

 

스포티파이(Spotify)

 

취향이 비슷한 사용자 사이에 블렌드를 만드는 것은 조금 더 쉽습니다. 같은 음악을 많이 듣기 때문이죠. 그러나 지금까지 같은 음악을 들은 적이 없는 두 사용자를 위한 블렌드를 만드는 것은 훨씬 더 어렵습니다. 블렌드 알고리즘의 변경 사항이 모든 사용자 조합에 어떤 영향을 미치는지 고려하면서, 위 두 가지 시나리오 모두를 위한 접근 방식이 필요했습니다.

 

블렌드에서 두 사용자의 데이터를 가져와 모든 속성을 균형 있게 고려하면서, 이상적인 순서를 가진 블렌드를 만든다는 것은 매우 어려운 과정입니다. 우리가 이를 구현해 줄 최고의 알고리즘을 찾아냈을 때, 이것에 대한 성능은 크게 고민하지 않았습니다. 하지만 블렌드의 품질에 만족하여 서비스 확장에 대해 생각할 무렵, 알고리즘의 동작 속도가 갈수록 느려진다는 것을 깨달았습니다. 우리는 속도를 최대한 끌어올리기 위해 많은 시간과 노력을 쏟아부었습니다. 

 

우리는 먼저 알고리즘을 구현한 코드에서 핫스팟[1]을 찾아냈습니다. 블렌드를 생성할 때 코드의 어떤 부분은 한 번 실행됐지만, 어떤 부분은 50회 이상 실행되었습니다. 코드를 아무리 최적화한다 해도 많이 사용되지 않는다면 성능 향상에 큰 효과가 없습니다. 따라서 우리는 핫스팟 코드를 개선했고, 극적인 성능 향상을 이뤄낼 수 있었습니다. 한 가지를 예로 들면, 자바의 if문 내에서 함수 호출의 순서를 바꿈으로써 단축 평가(short-circuit)[2]효과를 극대화했습니다. 이렇게 간단한 코드 변경으로 수행 속도가 1/10로 단축됐습니다.

 

또한 질적인 방법과 양적인 방법을 모두 사용하여 콘텐츠 품질을 개선했습니다. 일반적으로 변경 사항을 적용할 때 내가 가진 플레이리스트만 테스트하고 끝나지만, 블렌드의 경우 다양한 유형을 함께 테스트해야 했습니다. (예: 사용자의 취향이 많이 겹치는 블렌드와 거의 없는 블렌드에 대한 테스트) 우리는 이러한 속성이 빠르게 동작하는지 측정하고자 몇 가지 오프라인 측정항목을 만들었습니다. 또한 추천 시스템의 콘텐츠 품질을 평가, 관리하는 데이터 큐레이션 팀과 긴밀하게 협력했습니다.  

 

예를 들어, 팀에서 플레이리스트를 보다 일관성 있게 만들어주는 변경 코드를 적용하려는 경우 다음 과정을 거칩니다.

 

  • 개인 플레이리스트 확인: 변경 사항을 평가하기 전 약 한 달 동안의 구현 기간을 거쳤습니다. 이 기간 동안 이러한 변화가 긍정적인지 아닌지에 대한 느낌을 받을 수 있었습니다.
  • 데이터 큐레이션 팀이 다양한 취향 중복 점수를 가진 여러 블렌드를 대상으로 비교 검토를 수행했습니다. 
    • 이러한 과정을 통해 콘텐츠 품질 및 사용자 경험과 가장 밀접하게 관련된 사용성과 일관성 문제를 식별할 수 있었습니다.
    • "콘텐츠 추천 스코어카드(Content Recommendation Scorecard)" 사용 - 각 노래에 대해 연관성과 일관성 등 다양한 속성에 점수를 부여합니다.
    • 콘텐츠 추천 스코어카드를 통해 우리는 새로운 접근 방식이 우리가 최적화하기 원하는 속성을 더욱 두드러지게 만들어 준다는 사실을 알 수 있었습니다.
    • 검토 결과, 우리는 모든 사용자에게 새로운 접근 방식을 적용할 수 있으리라는 확신을 얻게 됐습니다.

 

또 다른 플레이리스트인 소셜 플레이리스트 알고리즘 개발과정에서도 많은 어려움이 있었습니다. 우리는 연관성, 일관성, 평등, 민주적 결정과 같은 많은 속성을 최적화해야 했습니다. 또한 취향이 많이 겹치는 사용자와 그렇지 않은 사용자를 모두 고려해야 했습니다.

 

블렌드 기능을 개발하는 동안 우리는 사용자가 가진 음악적 취향의 유사점과 차이점을 쉽게 전달할 방법이 무엇일까 고민했습니다. 이에 대한 해답으로 우리는 블렌드 데이터 스토리(Blend Data Stories)를 만들게 되었고, 사용자를 한데 모아 가수와 같은 사용자의 취향 정보의 일치도를 점수로 표시할 수 있게 되었습니다. 우리는 스포티파이의 연말 결산 캠페인인 랩드(Wrapped)에서 사용자에게 랩드 블렌드(Wrapped Blend)라는 경험을 제공했습니다. 우리는 랩드의 데이터를 사용하도록 블렌드 데이터 스토리를 수정했고, 사용자들이 공유하는 플레이리스트에서 올 한해 최고의 아티스트와 장르를 보여주었습니다.

 

우리는 여전히 블렌드를 개선하기 위해 최선을 다하고 있습니다. 스포티파이는 음악을 통해 사람들을 이어주는 제품을 선보이며, 그 안에서 더 재미있고 활발한 소셜 경험을 제공하기 위해 오늘도 끊임없이 고민하고 있습니다.


[1] 알고리즘을 구현한 코드에서 다른 부분에 비해 월등히 많이 반복 호출된 부분.

[2] 하나의 조건검사만으로 결과를 알수 있는 경우 Java컴파일러는 뒤에 조건을 수행하지 않고 건너뛴다.

 

위 번역글의 원 저작권은 spotify에게 있으며, 요즘IT는 해당 글로 수익을 창출하지 않습니다.

좋아요

댓글

공유

공유

댓글 0
작가
400
명 알림 받는 중

작가 홈

작가
400
명 알림 받는 중
요즘 해외 개발자들은 어떻게 일할까요? 기획자나 디자이너는요? 그래서 준비했습니다. 읽어볼만한 해외 소식들을 번역해 전합니다. We are the world.

좋아요

댓글

스크랩

공유

공유

지금 회원가입하고,
요즘IT가 PICK한 뉴스레터를 받아보세요!

회원가입하기
요즘IT의 멤버가 되어주세요! 요즘IT의 멤버가 되어주세요!
요즘IT의 멤버가 되어주세요!
모든 콘텐츠를 편하게 보고 스크랩해요.
모든 콘텐츠를 편하게 보고 스크랩 하기
매주 PICK한 콘텐츠를 뉴스레터로 받아요.
매주 PICK한 콘텐츠를 뉴스레터로 받기
로그인하고 무료로 사용하기