요구사항과 순서를 정하는 문제
소셜 피드를 설계합니다. 사용자가 팔로우한 사람들의 글을 모아 보여주는데, 시간순이 아니라 점수순으로 보여주는 것이 이번 요구사항입니다.
| 항목 | 값 |
|---|---|
| 대상 | 소셜 피드 |
| 사용자 | 가입 5천만, 일간 활성 1천만 |
| 팔로우 | 평균 200개 |
| 새 글 | 하루 500만 개 |
| 피드 조회 | 하루 3억 회 (초당 3,472) |
| 첫 화면 | 20개 |
| 응답 시간 | 상위 1퍼센트가 200ms 이내 |
| 반영 지연 | 새 글이 5분 안에 피드에 보이면 된다 |
| 순서 | 시간순이 아니다. 점수순 |
시간순이 무엇을 망가뜨리나
팔로우가 평균 200개이고 각자 하루 몇 개씩 올리면, 하루에 쌓이는 글이 수백 건입니다. 시간순으로 늘어놓으면 가장 최근에 올린 사람이 화면을 차지합니다.
| 상황 | 시간순의 결과 |
|---|---|
| 하루 30개 올리는 계정 | 화면 절반을 그 계정이 채운다 |
| 하루 1개 올리는 친한 친구 | 스크롤 한참 아래로 밀린다 |
| 어제 올라온 중요한 글 | 다시 볼 방법이 없다 |
즉 시간순은 올린 빈도가 노출을 정합니다. 사용자가 원하는 것은 자기가 보고 싶은 것이 위에 오는 것이고, 그래서 순서를 점수로 정합니다.
점수순이 새로 만드는 문제
순서를 우리가 정하기로 하면 세 가지가 어려워집니다.
| 어려워지는 것 | 왜 |
|---|---|
| 순서가 사용자마다 다르다 | 같은 글이 사람마다 다른 자리에 온다 |
| 순서가 시간에 따라 변한다 | 방금 본 목록과 다음 목록이 다르다 |
| 무엇이 좋은 순서인지 모른다 | 정답이 없어서 재 봐야 안다 |
시간순 피드에서는 이 셋이 전부 공짜였습니다. 순서가 하나뿐이고 변하지 않고 다툴 여지도 없습니다. 점수순은 그 편의를 포기하는 대가로 관련성을 얻습니다.
읽기가 쓰기의 60배다
새 글은 하루 500만 개인데 조회는 하루 3억 회 (초당 3,472)입니다. 60배입니다.
읽을 때 점수를 계산하면 같은 계산을 60번 반복합니다. 그래서 미리 만들어 두고 읽을 때는 꺼내기만 하는 쪽으로 기울게 됩니다.
이것을 허용하는 조건이 요구사항에 있습니다. 새 글이 피드에 보이기까지 5분까지 늦어도 된다는 항목입니다. 실시간이어야 한다면 미리 만들 시간이 없습니다.
이번 설계에서 다루지 않는 것
| 뺀 것 | 이유 |
|---|---|
| 글을 누구에게 퍼뜨릴지 | 팬아웃 전략에서 다룬 문제다 |
| 무엇이 좋은 글인지 학습으로 정하기 | 데이터가 쌓인 뒤의 일이다. 지금은 규칙으로 점수를 만든다 |
| 광고와 추천 글 끼워 넣기 | 순서 문제가 정리된 뒤에 붙인다 |
| 댓글과 좋아요 자체의 저장 | 우리는 그 숫자를 읽어 쓰는 쪽이다 |
팬아웃을 범위 밖으로 두는 것이 중요합니다. 글을 팔로워들의 목록에 넣는 문제와, 그 목록을 어떤 순서로 보여줄지의 문제는 다릅니다. 이번에는 뒤쪽만 봅니다.
- Q.시간순 피드에는 어떤 문제가 있습니까
- Q.순서를 점수로 정하면 무엇이 어려워지나요
- Q.읽기가 쓰기의 60배라는 것이 설계를 어떻게 바꿉니까