시스템 설계, 기술 면접 대비

뉴스 피드 시스템 설계 면접 퀴즈

순서를 우리가 정하기로 하면 무엇을 잃는가

소셜 피드를 요구사항부터 끝까지 설계합니다. 가입 5천만에 일간 활성 1천만, 팔로우 200개, 조회가 작성의 60배, 응답 200ms, 반영 5분이라는 제약 아래에서 두 단계 순위, 신선도, 사전 계산 대상, 변하는 목록의 페이지 넘김, 본 것 걸러내기, 집계 신호, 품질 판단을 다룹니다.

로그인 없이 풀어보기
17개 문제, 무료

이 설계에 주어진 요구사항

문제는 모두 이 하나의 요구사항 안에서 풉니다.

뉴스 피드 시스템 설계

소셜 피드

팔로우한 사람들의 글을 모아 보여줍니다. 시간순이 아니라 점수순으로 보여주는 것이 이번 요구사항입니다.

이번에 만드는 기능

  • 팔로우한 사람들의 글을 모아 보기
  • 첫 화면을 본 뒤 아래로 계속 내리기
  • 이미 본 글이 다시 보이지 않기
  • 글에 붙은 반응 수를 함께 보기

범위 밖

  • 글을 팔로워들의 목록에 퍼뜨리는 방법
  • 무엇이 좋은 글인지 학습으로 정하기
  • 광고와 추천 글 끼워 넣기
  • 사용자가 정렬 기준을 직접 고르기

지켜야 하는 수치

사용자
가입 5천만, 일간 활성 1천만
팔로우
평균 200개
새 글
하루 500만 개
피드 조회
하루 3억 회 (초당 3,472)
첫 화면
20개
응답 시간
상위 1퍼센트가 200ms 이내
반영 지연
새 글이 5분 안에 보이면 된다

전제로 주어진 것

  • 순서는 시간순이 아니다. 점수로 정한다
  • 반응 수는 글이 올라온 뒤에도 계속 늘어난다
  • 같은 글이 두 번 보이면 사용자가 곧바로 알아차린다
  • 좋은 순서인지는 재 봐야 안다

학습할 핵심 개념

요구사항과 순서를 정하는 문제
후보를 고르고 순위를 매긴다
점수와 신선도
누구 것을 미리 만드나
변하는 목록에서 다음 장 넘기기
이미 본 것을 걸러내기
점수에 쓰는 집계 값
좋은 순서인지 어떻게 아나

핵심 개념 미리보기

뉴스 피드 시스템 설계 면접에서 꼭 나오는 개념을 미리 확인하세요

요구사항과 순서를 정하는 문제

핵심

소셜 피드를 설계합니다. 사용자가 팔로우한 사람들의 글을 모아 보여주는데, 시간순이 아니라 점수순으로 보여주는 것이 이번 요구사항입니다.

항목
대상소셜 피드
사용자가입 5천만, 일간 활성 1천만
팔로우평균 200개
새 글하루 500만 개
피드 조회하루 3억 회 (초당 3,472)
첫 화면20개
응답 시간상위 1퍼센트가 200ms 이내
반영 지연새 글이 5분 안에 피드에 보이면 된다
순서시간순이 아니다. 점수순

시간순이 무엇을 망가뜨리나

팔로우가 평균 200개이고 각자 하루 몇 개씩 올리면, 하루에 쌓이는 글이 수백 건입니다. 시간순으로 늘어놓으면 가장 최근에 올린 사람이 화면을 차지합니다.

상황시간순의 결과
하루 30개 올리는 계정화면 절반을 그 계정이 채운다
하루 1개 올리는 친한 친구스크롤 한참 아래로 밀린다
어제 올라온 중요한 글다시 볼 방법이 없다

즉 시간순은 올린 빈도가 노출을 정합니다. 사용자가 원하는 것은 자기가 보고 싶은 것이 위에 오는 것이고, 그래서 순서를 점수로 정합니다.

점수순이 새로 만드는 문제

순서를 우리가 정하기로 하면 세 가지가 어려워집니다.

어려워지는 것
순서가 사용자마다 다르다같은 글이 사람마다 다른 자리에 온다
순서가 시간에 따라 변한다방금 본 목록과 다음 목록이 다르다
무엇이 좋은 순서인지 모른다정답이 없어서 재 봐야 안다

시간순 피드에서는 이 셋이 전부 공짜였습니다. 순서가 하나뿐이고 변하지 않고 다툴 여지도 없습니다. 점수순은 그 편의를 포기하는 대가로 관련성을 얻습니다.

읽기가 쓰기의 60배다

피드 조회가 글 작성의 60배이므로 읽기 경로를 미리 만들어 둔다 하루 글 작성 500만 하루 피드 조회 3억. 60배 한 번 쓴 글을 수없이 읽는다 읽을 때 계산하면 그 계산을 60배로 반복한다 쓸 때 또는 미리 만들어 두고, 읽을 때는 꺼내기만 한다 반영이 5분 늦어도 된다는 조건이 이것을 허용한다

새 글은 하루 500만 개인데 조회는 하루 3억 회 (초당 3,472)입니다. 60배입니다.

읽을 때 점수를 계산하면 같은 계산을 60번 반복합니다. 그래서 미리 만들어 두고 읽을 때는 꺼내기만 하는 쪽으로 기울게 됩니다.

이것을 허용하는 조건이 요구사항에 있습니다. 새 글이 피드에 보이기까지 5분까지 늦어도 된다는 항목입니다. 실시간이어야 한다면 미리 만들 시간이 없습니다.

이번 설계에서 다루지 않는 것

뺀 것이유
글을 누구에게 퍼뜨릴지팬아웃 전략에서 다룬 문제다
무엇이 좋은 글인지 학습으로 정하기데이터가 쌓인 뒤의 일이다. 지금은 규칙으로 점수를 만든다
광고와 추천 글 끼워 넣기순서 문제가 정리된 뒤에 붙인다
댓글과 좋아요 자체의 저장우리는 그 숫자를 읽어 쓰는 쪽이다

팬아웃을 범위 밖으로 두는 것이 중요합니다. 글을 팔로워들의 목록에 넣는 문제와, 그 목록을 어떤 순서로 보여줄지의 문제는 다릅니다. 이번에는 뒤쪽만 봅니다.

면접에서 이렇게 나옵니다
  • Q.시간순 피드에는 어떤 문제가 있습니까
  • Q.순서를 점수로 정하면 무엇이 어려워지나요
  • Q.읽기가 쓰기의 60배라는 것이 설계를 어떻게 바꿉니까

후보를 고르고 순위를 매긴다

핵심

앞 절에서 순서를 점수로 정하기로 했습니다. 그러면 점수를 무엇에 대해 계산하는지가 문제가 됩니다. 팔로우 평균 200개의 최근 글을 다 모으면 수천 건이고, 응답 시간은 상위 1퍼센트가 200ms 이내여야 합니다.

수천 건에 비싼 점수를 매길 수 없다

수천 건에서 수백 건의 후보를 고르고 그 안에서만 순위를 매긴다 팔로우 200명의 최근 글에서 시작한다 수천 건 값싼 기준으로 걸러낸다 후보 수백 건 비싼 점수를 여기서만 계산한다 보여줄 20개 수천 건 전부에 비싼 점수를 매기면 200ms 안에 못 끝난다 단계를 나누면 비싼 계산의 대상이 수십 분의 일이 된다 거르는 단계에서 좋은 글을 떨어뜨리면 순위를 잘 매겨도 못 살린다

점수를 제대로 매기려면 글마다 여러 값을 봐야 합니다. 작성자와의 친밀도, 반응 수, 내용 종류, 사용자가 최근 무엇을 눌렀는지. 이것을 수천 건에 하면 200ms 안에 끝나지 않습니다.

그래서 두 단계로 나눕니다.

단계하는 일비용
후보 생성값싼 기준으로 수백 건까지 줄인다낮다
순위 매기기그 수백 건에만 비싼 점수를 매긴다높지만 대상이 적다

첫 화면이 20개이므로 후보가 수백 건이면 충분합니다. 20개를 뽑기 위해 수천 건을 다 볼 필요가 없습니다.

후보는 무엇으로 고르나

값싼 기준이란 미리 정렬해 둘 수 있는 것입니다.

최근에 올라온 것부터 일정 개수
반응이 많은 것부터 일정 개수
자주 보는 계정의 글부터 일정 개수

세 목록을 각각 얻어 합칩니다. 각 목록은 미리 만들어 둘 수 있으므로 꺼내기만 하면 됩니다.

한 기준만 쓰면 그 기준의 편향이 그대로 남습니다. 최근성만 쓰면 시간순 피드의 문제가 후보 단계에서 재현되고, 반응 수만 쓰면 큰 계정의 글만 후보가 됩니다. 여러 목록을 합치는 것이 이것을 막습니다.

거르는 단계에서 놓치면 못 살린다

두 단계로 나누면 새 위험이 생깁니다. 후보에 들어오지 못한 글은 순위를 아무리 잘 매겨도 보이지 않습니다.

놓치는 경우결과
조용한 계정의 좋은 글반응 수 기준에 못 들고 최근성에서도 밀린다
조금 오래된 글최근성 기준에서 빠진다

그래서 후보 목록 하나에는 일부러 다른 기준을 넣습니다. 예를 들어 최근 상호작용이 있었던 계정의 글을 반응 수와 무관하게 일정 개수 넣습니다.

후보 단계의 품질을 따로 재야 합니다. 최종 화면만 보면 순위 문제인지 후보 문제인지 구분할 수 없습니다. 보여준 20개가 후보 수백 개 중 어디에서 왔는지 기록해 두면, 어느 목록이 쓸모없는지 알 수 있습니다.

두 단계가 실패를 다르게 만든다

각 단계가 느려지거나 실패했을 때 할 수 있는 것이 다릅니다.

실패대응
순위 매기기가 느리다후보를 값싼 기준 순서로 그냥 보여준다
후보 생성이 실패한다보여줄 것이 없다

순위는 없어도 피드가 나가지만 후보는 없으면 빈 화면입니다. 그래서 후보 목록은 여러 벌 두고 하나가 없어도 나머지로 만들고, 순위 계산에는 시간 제한을 걸어 넘긴 만큼만 반영합니다.

면접에서 이렇게 나옵니다
  • Q.팔로우 200명의 최근 글 수천 건에 모두 점수를 매기면 무엇이 문제입니까
  • Q.후보를 고르는 기준을 하나만 쓰면 어떻게 되나요
  • Q.피드 품질이 나쁠 때 후보 문제인지 순위 문제인지 어떻게 구분하시겠습니까

점수와 신선도

핵심

앞 단계에서 후보 수백 건에만 점수를 매기기로 했습니다. 그 점수를 무엇으로 만드는지, 그리고 점수가 시간에 따라 변한다는 사실이 무엇을 강제하는지가 이 절입니다.

점수는 몇 가지의 합이다

작성자와 얼마나 가까운가
반응이 얼마나 많은가
얼마나 새 글인가
내가 이런 종류를 눌러 왔는가

각 항목에 무게를 주고 합칩니다. 처음에는 무게를 사람이 정합니다. 요구사항에 학습 모델이 없으므로 규칙으로 시작하고 재 보면서 고칩니다.

무게를 정할 때 중요한 것은 한 항목이 다른 항목을 압도하지 않게 하는 것입니다. 반응 수는 값의 범위가 크므로(0에서 수만) 그대로 더하면 다른 항목이 의미를 잃습니다. 범위를 좁혀서 더합니다.

신선도가 없으면 오래된 글이 남는다

시간이 지나면 같은 글의 점수가 내려가므로 미리 정렬한 순서가 낡는다 글 하나의 점수 올린 직후 하루 뒤 시간이 지나면 내려간다 감쇠가 없으면 반응이 많았던 오래된 글이 계속 상위에 남는다 그런데 점수가 시간에 따라 변하면 미리 정렬한 순서가 낡는다 모든 글의 점수를 매 순간 다시 계산할 수는 없다 그래서 감쇠는 꺼낼 때 적용하고, 미리 두는 것은 감쇠 이전 점수다

반응 수만 보면 어제 크게 터진 글이 오늘도 1위입니다. 반응은 시간이 지나며 쌓이므로 오래된 글이 유리합니다.

그래서 시간이 지나면 점수를 내립니다. 새 글이 하루 500만 개 올라오는데 어제 글이 계속 상위에 있으면, 사용자는 새로 볼 것이 없다고 느낍니다.

그런데 점수가 변하면 미리 정렬할 수 없다

여기에 앞 절과 충돌하는 지점이 있습니다. 읽기가 60배라서 미리 만들어 두기로 했는데, 점수가 시간에 따라 계속 변하면 미리 정렬한 순서가 낡습니다.

모든 글의 점수를 매 순간 다시 계산할 수는 없습니다. 그래서 점수를 두 부분으로 나눕니다.

부분언제 계산
시간과 무관한 부분 (친밀도, 반응 수, 종류)미리 계산해 둔다
시간에 따라 변하는 부분 (감쇠)꺼낼 때 적용한다

감쇠는 글의 나이만 알면 계산되므로 꺼낼 때 붙이는 비용이 낮습니다. 변하는 부분만 늦게 계산하는 것이 사전 계산과 신선도를 함께 얻는 방법입니다.

반응 수는 나중에 늘어난다

미리 계산해 둔 부분도 완전히 고정은 아닙니다. 글이 올라온 뒤에도 반응은 계속 붙습니다.

올린 직후에 계산한 점수는 반응이 0인 상태의 점수다

이것을 그대로 두면 좋은 글이 초반에 낮은 점수로 굳습니다. 그래서 반응 수가 크게 바뀐 글만 점수를 다시 계산합니다. 전체를 다시 하는 것이 아니라 변한 것만 다시 합니다.

기준을 정해야 합니다. 반응이 10개에서 11개가 된 것은 순서를 바꾸지 않지만, 10개에서 500개가 된 것은 바꿉니다. 순서를 바꿀 만큼 변했을 때만 다시 계산합니다.

면접에서 이렇게 나옵니다
  • Q.점수에 반응 수를 그대로 더하면 무엇이 문제입니까
  • Q.점수가 시간에 따라 변하는데 어떻게 미리 정렬해 둘 수 있습니까
  • Q.글이 올라온 뒤에 반응이 늘어나면 점수를 어떻게 하시겠습니까

더 많은 개념과 문제는 가입 후 이용할 수 있어요

먼저 5문제 맛보기

뉴스 피드 시스템 설계 면접 빈출 질문

실제 면접에서 자주 나오는 질문들입니다

Q.

시간순 피드에는 어떤 문제가 있습니까

요구사항과 순서를 정하는 문제 개념 정리 보기
Q.

순서를 점수로 정하면 무엇이 어려워지나요

요구사항과 순서를 정하는 문제 개념 정리 보기
Q.

읽기가 쓰기의 60배라는 것이 설계를 어떻게 바꿉니까

요구사항과 순서를 정하는 문제 개념 정리 보기
Q.

팬아웃을 이번 범위에서 빼는 이유가 무엇입니까

요구사항과 순서를 정하는 문제 개념 정리 보기
Q.

팔로우 200명의 최근 글 수천 건에 모두 점수를 매기면 무엇이 문제입니까

후보를 고르고 순위를 매긴다 개념 정리 보기
Q.

후보를 고르는 기준을 하나만 쓰면 어떻게 되나요

후보를 고르고 순위를 매긴다 개념 정리 보기
Q.

피드 품질이 나쁠 때 후보 문제인지 순위 문제인지 어떻게 구분하시겠습니까

후보를 고르고 순위를 매긴다 개념 정리 보기
Q.

순위 계산이 느려지면 피드를 어떻게 보여주시겠습니까

후보를 고르고 순위를 매긴다 개념 정리 보기

이런 점이 좋아요

비싼 계산의 대상을 줄이는 것이 계산을 빠르게 하는 것보다 크게 듣는다는 감각

허용 지연 한 줄이 설계 전체를 가능하게 하는 것을 확인하는 훈련

정답이 없는 문제를 되돌릴 수 있게 다루는 판단

지금 바로 시작하세요

무료로 뉴스 피드 시스템 설계 퀴즈를 풀고, AI 오답 분석으로 실력을 키우세요.