brunch

You can make anything
by writing

C.S.Lewis

by 뉴비 기획자 Aug 01. 2022

멜론의  개인화 추천 기능은 어떻게 이루어질까?

[코드스테이츠 PMB 13기] 관계형 DB, 데이터 분석

전 개발 1도 모르는 기획자인데요
데이터라도  마스터해보겠습니다! 

출처: https://sketchplanations.com/dikw


기획자가 데이터를 아는 것이 왜 중요할까요?


1. 명확한 기획으로 효율적으로 데이터 구조를 설계한다. 

2. 데이터 구조에 대한 이해로 서비스 개선에 필요한 근거를 마련한다. 

3. 데이터에 대한 이해를 기반으로 동료, 유저와 정확하게 소통할 수 있다. 


데이터는 시계로 따지면 내부의 복잡한 톱니바퀴 같은 역할을 한다고 생각한다. 기획자는 겉보기에 좋은 지, 시계를 사용하는데 문제가 없는지, 잘 돌아가는지를 우선적으로 고려하긴 하지만 이는 모두 내부 톱니바퀴가 잘 돌아가지 않으면 의미 없는 일이다. 그래서 기획자는 필수적으로 이 톱니바퀴를 어떻게 구성할 것이며, 어떤 식으로 굴러가는지 파악하고 있어야 한다. 그러기 위해서는 어떤 데이터 수집이 어떤 배경에서 필요한지 설득할 수 있어야 한다. 또한, 의사결정과 문제 해결을 위해서도 데이터를 확인해야만 하니 어떤 데이터를 어떻게 볼 것인지에 대한 생각도 가지고 있어야 한다. (물론 추출부터 분석까지 할 수 있으면 좋겠지만!) 



같이 일하고 싶은 기획자가 되려면? 

출처: 오늘도 개발자가 안된다고 말했다 yes 24

그동안 프로젝트를 진행하면서 많은 개발자를 만나봤다. 정말 서비스 기획에 대해 1도 몰랐을 때여서 서툴기도 했고, 절대 개발자에게 친절한 기획자는 아니었다. 


예를 들어 이런 식이 었다. 나는 요구사항 정의서와 화면 설계까지는 했어도 그 이후에 ERD 설계나 스키마 설계에 관여하지 않았다. 정확히는 어떻게 이후 개발을 이끌어야 하는지 잘 몰랐다. 요구사항 정의서로만 명확하게 떨어지지 않는 부분들이 많았고, 계속해서 기획이 바뀌는 바람에 백엔드 개발자 분들이 설계에 애를 먹으셨다 (죄송해요..ㅠ) 


PMB에서 배운 내용으로 기반으로 다시 돌아간다면


서비스 기획, 구축 시에는 

1. 요구사항 정의서에서 데이터 수집 의도와 배경을 공유해서 필요성을 설득한다. 
2. 필수, 선택, 데이터 수집 시기 등을 명확하게 정의한다. 
3. ERD 설계부터 개체, 속성, 관계 정의까지 개발자와 함께 의논한다. 


서비스 개선 시에는 

1. 원하는 데이터가 정확하게 어떤 것인지?
2. 구성되어 있는 데이터를 파악하고, 정확하게 원하는 지표를 말해야 한다. 
-여기에 어느 정도 데이터 전처리나 가공을 할 수 있으면 빨리 원하는 지표를 볼 수 있지 않을까 싶다. 

이런 식으로 데이터를 기반으로 서비스 구조와 개발자를 이해하기 위해 더 노력하고 싶다. 




멜론에서 플레이리스트 추천을 받는 플로우 차트

음원 스트리밍 사이트에서 음악을 듣다 보면 내가 튼 음악과 비슷한 노래들을 자동으로 추천해서 들려준다. 이런 방식으로 내 취향의 노래를 찾은 적이 굉장히 많아서 어떻게 이렇게 취향저격을 할 수 있지?? 싶었다. 그래서 플레이리스트 추천 서비스의 구성을 뜯어보려고 한다. 




멜론에 들어가면 바로 떠 있는 내가 좋아할 음악 부분의 플로우만 간단하게 그려봤다. 상단의 DJ 플레이리스트로 들어가게 되면 해당 플레이리스트에는 대표적인 플레이리스트 태그가 달려있다. 해당 태그에 딸린 음악들을 추천해주는 게 아닌가 싶다. 플레이리스트에서 원하는 음악만 플레이할 수 있고, 전체 재생을 통해 모두 재생할 수도 있다. 


특이한 건 각 곡별로 유사한 곡을 볼 수도 있다는 점이다. 음악 추천 서비스 자체가 한곡 -> 유사 여러 곡 추천 -> 더 넓은 범위에서 곡 추천 이런 구조로 이루어져 있는 걸로 느껴졌다. 살짝 하나 뽑으면 줄줄이 나오는 고구마 캐기 같은 느낌?이다. 



내가 추측하는 멜론 플레이리스트 구조

1. 클라이언트가 특정 노래를 플레이 

2. 서버는 해당 노래가 속한 태그 / 카테고리의 플레이리스트 리스트를 DB에 조회 요청

3. DB는 조건에 맞는 플레이리스트를 서버에 반환

4.  서버에서 받은 데이터를 클라이언트에 출력 -> 플레이리스트를 홈 화면 최상단에 노출


짧은 나의 개발 지식으로는 이 정도 구조밖에 나오지 않았다.
여기서 더 파보고 싶은 부분은 단순히 한 노래를 플레이한 기록을 가지고 어떻게 해당 유저가 좋아할 만한 플레이리스트를 골라 홈 화면 상단에 올리는 것인지?이다.
게다가 음악과 플레이리스트 종류는 굉장히 다양해서 어떤 위계로 호출해서 노출하는 지도 궁금했다.



멜론에서 밝힌 우리 음악 추천 이렇게 해요! 


노래를 추천하는 방식 

콘텐츠 기반 필터링: 곡 자체의 분석을 통해 형태가 유사한 곡을 추천해요. 
곡 자체의 음 낮이, 임베딩이 비슷한 곡을 골라서 추천해준다고 한다. 


협업 필터링: 10CM를 좋아한 사람은 선우정아 노래도 좋아했어요! 

굉장히 특이했던 부분이 모델을 학습시킬 때, 내가 들은 노래 중 몇 개는 가리고, 가린 노래가 뭐였을까? 를 맞추는 방식으로 추천 정확도를 높였다고 한다. 


태그 간 유사도: 예를 들어 내가 '감각적인'의 태그가 달린 노래를 들었을 때, 유사한 태그로 '느낌 있는' '편집샵' '감각적' 등의 태그를 뽑고, 해당하는 노래를 추천해줄 수 있다고 한다. 


결론적으로 보면 아래의 사진처럼 왼쪽의 정보처럼 내가 플레이 한 노래와 태그를 기반으로
오른쪽 정보 같은 비슷한 스타일의 음악, 유사한 태그의 음악을 뽑아서 추천해줄 수 있다고 한다. 

출처: https://brunch.co.kr/@kakao-it/342



플레이리스트를 추천하는 방식

멜론의 추천 플레이리스트는 개인의 취향, 시즌별, 인기별 등으로 다양하게 구성되어 있다. 실제로도 아래 사진처럼 비가 오는 날에는 비 오는 날 듣기 좋은 노래 등의 플레이리스트가 인기가 많았다고 한다. 스포티파이는 시진, 인기별보다는 개인 취향 중심 믹스가 위주로 구성되어서 쓰면서 흥미로웠던 부분이었다. 

출처: https://tech.kakao.com/2020/04/29/kakaoarena-3rd-part2/



어떻게 플레이리스트의 태그, 곡을 예측할 수 있을까? 

1. 장르 코드 트리 

대분류 장르(발라드, 댄스, 랩, 힙합) > 상세 장르 코드로 나눠서 관리하고 있었다. 대분류 장르는 우리가 보는 카테고리 분류와 비슷해 보이는데, 대분류 안에서도 상세 장르가 많아서 따로 코드를 부여에 관리하고 있다는 점이 인상 깊었다. 아마 상세 장르 코드가 더 자세할수록 복잡하긴 하겠지만 유저의 취향을 더 잘 반영한 추천을 할 수 있지 않을까 싶다. 


2. 태그


플레이리스트에도 직접적으로 태그를 매핑하고 있음을 UI에서도 확인할 수 있었다. 플레이리스트에 매핑된 태그로 발라드, 팝, 락 등이 굉장히 인기가 많다고 한다. 

매핑된 태그 리스트 순위

인기가 많은 감성, 발라드의 태그에 가장 많이 매핑된 곡은 아이유의 밤 편지라고 한다. 감성이라는 태그에 묶여 있는 노래에서 밤 편지가 1위로 가장 매핑 횟수가 많았고, 2위로는 폴킴의 비가 많았다고 한다. 즉, 두 곡은 감성이라는 태그 아래 같이 묶일 확률이 높다. 



다시 추천 서비스 구조에 대해 생각해보자면...


노래, 플레이리스트를 어떤 식으로 서버와 DB에 전달해 조회하는지 위의 카카오 글을 통해 힌트를 얻고 더 자세하게 정의해보았다. 

서버는 DB에 태그나 장르 코드를 조회하는 식으로 요청할 것 같고, 

DB에서는 태그에 매핑된 노래나 플레이리스트나 유사 태그의 노래, 플레이리스트를 서버에 반환하는 구조가 아닐까 싶다. 
서버는 그렇게 추천받는 노래, 플레이리스트를 클라이언트로 보내 홈 화면의 상단에 추천해줄 것이다. 



개발 지식이 부족한 뉴비 기획자이지만, 노력할 거예요! 

나의 티끌 같은 개발 지식을 채우기 위해 앞으로도 더 노력해야겠다는 생각이 글을 쓰며 더 강력하게 듭니다. 제가 개발을 이해하기 위해 한 것과 할 것을 공유해볼게요. 


1. 한 것: 

-파이썬을 통한 데이터 분석, DB 이해, 데이터 추출을 배웠습니다! 

-실제 프로젝트를 통해 전처리 - 분석 - 시각화까지 해보려고 해요 (도전!) 


2. 할 것: 

-SQL에 익숙해지기 

: SQL 이란? 관계형 데이터베이스 관리 시스템(RDBMS)에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 고안되었습니다. 많은 수의 데이터베이스 관련 프로그램들이 SQL을 표준으로 채택하고 있습니다. 


-개발자와 이런저런 얘기 많이 해보기 

: 모든 개발 지식을 다 채울 수 없기에 무서워하지 말고 개발 회의도 많이 참여해보고 이런저런 얘기도 많이 해보면서 개발 지식을 하나씩 주워서 모을 거예요! 



뇌피셜로 가득한 포스팅이었지만, 읽어주셔서 감사합니다!
다음 주에 이 포스팅을 다시 회고하며 발전된 모습으로 돌아오겠습니다:) 


참고 자료

https://brunch.co.kr/@eunmee910/30

https://brunch.co.kr/@herbeauty/40

https://tech.kakao.com/2020/04/29/kakaoarena-3rd-part1/


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari