본문으로 건너뛰기

News-Feed-System

1. 뉴스 피드 시스템

1.1 뉴스 피드의 정의

  • 소셜 미디어 플랫폼(Twitter, Facebook, Instagram)의 뉴스 피드는 사용자가 팔로우하는 엔티티들이 생성한 스토리들의 목록입니다.
  • 사용자의 홈페이지에서 지속적으로 업데이트되는 개인화된 콘텐츠 스트림입니다.

1.2 포함 콘텐츠

  • 미디어 콘텐츠: 텍스트, 이미지, 비디오
  • 상호작용 활동: 좋아요, 댓글, 공유
  • 기타 요소: 광고, 이벤트 알림 등

1.3 콘텐츠 출처

  • 친구 및 팔로워의 게시물
  • 팔로우하는 그룹 및 페이지
  • 사용자 자신의 게시물
  • 플랫폼에서 추천하는 콘텐츠

1.4 뉴스 피드의 중요성

  • 정보 제공: 최신 업계 동향, 시사, 관련 정보를 지속적으로 제공
  • 사용자 유지: 사용자들이 정기적으로 플랫폼에 재방문하는 동기 부여
  • 플랫폼 가치: 수십억 명의 사용자가 활용하는 핵심 기능

1.5 기술적 도전 과제

  • 실시간 개인화: 각 사용자에게 맞춤화된 콘텐츠 제공
  • 확장성: 대규모 사용자 기반 지원
  • 고가용성: 안정적인 서비스 제공

2. 뉴스 피드 시스템 설계 요구사항

  • 문제의 범위를 제한하기 위해, 다음과 같은 기능적 요구사항과 비기능적 요구사항에 집중합니다.

2.1 기능적 요구사항

2.1.1 뉴스 피드 생성

  • 시스템은 사용자가 팔로우하는 페이지, 그룹, 팔로워를 기반으로 뉴스 피드를 생성해야 합니다.
  • 사용자는 많은 친구와 팔로워를 가질 수 있으므로, 시스템은 모든 친구와 팔로워로부터 피드를 생성할 수 있어야 합니다.
  • 도전 과제: 잠재적으로 엄청난 양의 콘텐츠 중에서 사용자를 위한 적절한 콘텐츠를 선택하고 순위를 매겨 우선순위를 결정해야 합니다.

2.1.2 뉴스 피드 콘텐츠

  • 뉴스 피드는 다음과 같은 콘텐츠를 포함할 수 있습니다:
    • 텍스트
    • 이미지
    • 비디오

2.1.3 뉴스 피드 표시

  • 시스템은 순위 메커니즘을 기반으로 모든 활성 사용자의 뉴스 피드에 새로 들어오는 게시물을 추가해야 합니다.
  • 순위가 매겨진 후, 높은 순위의 콘텐츠를 먼저 사용자에게 표시합니다.

2.2 비기능적 요구사항

2.2.1 확장성

  • Twitter, Facebook, Instagram과 같은 플랫폼에서 계속 증가하는 사용자 수를 지원하기 위해 높은 확장성을 가져야 합니다.

2.2.2 장애 허용성

  • 시스템이 대량의 데이터를 처리해야 하므로, 파티션 허용성(시스템 구성 요소 간의 네트워크 장애 상황에서의 시스템 가용성)이 필요합니다.

2.2.3 가용성

  • 사용자들이 플랫폼에 계속 참여할 수 있도록 서비스는 높은 가용성을 가져야 합니다.
  • PACELC 정리에 따라, 시스템은 가용성과 장애 허용성을 위해 강한 일관성을 타협할 수 있습니다.

2.2.4 낮은 지연시간

  • 시스템은 실시간으로 뉴스 피드를 제공해야 합니다.
  • 최대 지연시간은 2초를 넘지 않아야 합니다.

3. 뉴스 피드 시스템의 고수준 설계

3.1 시스템 개요

  • 뉴스 피드 시스템은 주로 다음 두 가지 작업을 담당합니다:
  • 피드 생성 (Feed Generation)
    • 뉴스 피드는 어떤 순위 메커니즘을 기반으로 친구들과 팔로워들의 게시물(또는 피드 항목)을 집계하여 생성됩니다.
  • 피드 발행 (Feed Publishing)
    • 피드가 발행될 때, 관련 데이터가 캐시와 데이터베이스에 작성됩니다.
    • 이 데이터는 텍스트이거나 임의의 미디어 콘텐츠일 수 있습니다.
    • 친구들과 팔로워들의 데이터를 포함하는 게시물이 사용자의 뉴스 피드에 채워집니다.

3.2 주요 컴포넌트

고수준 설계에서 보여지는 주요 컴포넌트들입니다:

사용자(User(s))

  • 사용자들은 어떤 콘텐츠로 게시물을 작성하거나 자신의 뉴스 피드를 요청할 수 있습니다.

로드 밸런서(Load Balancer)

  • 트래픽을 웹 서버 중 하나로 리디렉션합니다.

웹 서버(Web Servers)

  • 웹 서버는 백엔드 서비스들을 캡슐화하고 사용자와 다양한 서비스들 사이의 중간 계층 역할을 합니다.
  • 인증과 속도 제한을 적용하는 것 외에도, 웹 서버는 다른 백엔드 서비스들로 트래픽을 리디렉션하는 역할을 담당합니다.

알림 서비스(Notification Service)

  • 친구나 팔로워로부터 새로운 게시물이 있을 때마다 뉴스 피드 생성 서비스에 알려주고, 푸시 알림을 보냅니다.

뉴스 피드 생성 서비스(Newsfeed Generation Service)

  • 이 서비스는 사용자의 팔로워/친구들의 게시물로부터 뉴스 피드를 생성하고 이를 뉴스 피드 캐시에 보관합니다.

뉴스 피드 발행 서비스(Newsfeed Publishing Service)

  • 이 서비스는 뉴스 피드 캐시로부터 사용자의 타임라인에 뉴스 피드를 발행하는 역할을 담당합니다.
  • 또한 블롭 저장소에서 미디어 콘텐츠의 썸네일과 그 링크를 사용자를 위한 뉴스 피드에 추가합니다.

포스트 서비스(Post-Service)

  • 사용자가 게시물 생성을 요청할 때마다 포스트 서비스가 호출되고, 생성된 게시물은 포스트 데이터베이스와 해당 캐시에 저장됩니다.
  • 게시물의 미디어 콘텐츠는 블롭 저장소에 저장됩니다.

4. 뉴스 피드 API

  • 뉴스 피드 시스템에서 가장 중요한 두 가지 API는 뉴스 피드 생성과 뉴스 피드 조회입니다.

4.1 사용자의 뉴스피드 생성 (Generate User's Newsfeed)

다음 API는 사용자의 뉴스피드를 생성하는 데 사용됩니다:

generateNewsfeed(user_id)

API 설명

  • 이 API는 사용자의 ID를 받아서 그들의 친구와 팔로워를 결정합니다.
  • 이 API는 여러 게시물로 구성된 뉴스피드를 생성합니다.
  • 내부 시스템 컴포넌트들이 이 API를 사용하므로, 사용자를 위한 뉴스피드를 미리 생성하기 위해 오프라인으로 호출될 수 있습니다.
  • 미리 생성된 뉴스피드는 영구 저장소와 관련 캐시에 저장됩니다.

매개변수

  • user_id: 뉴스피드를 생성할 사용자의 고유 식별자

4.2 사용자의 뉴스피드 가져오기 (Get User's Newsfeed)

  • 다음 API는 사용자의 뉴스피드를 가져오는 데 사용됩니다:
getNewsfeed(user_id, count)

API 설명:

  • getNewsfeed(.) API 호출은 게시물 목록으로 구성된 JSON 객체를 반환합니다.

매개변수:

  • user_id: 뉴스피드를 요청하는 사용자의 고유 식별자
  • count: 반환할 게시물의 개수

4.3 API 구분

  • generateNewsfeed: 뉴스피드를 생성하는 내부 API (오프라인 처리)
  • getNewsfeed: 이미 생성된 뉴스피드를 조회하는 사용자 API (실시간 처리)

5. 뉴스 피드 생성 서비스

5.1 개요

  • 뉴스 피드는 사용자의 친구, 팔로워, 그리고 기타 엔티티(페이지와 그룹)의 게시물(또는 피드 항목)을 집계하여 생성됩니다.
  • 뉴스 피드 생성 서비스는 뉴스 피드를 생성하는 역할을 담당합니다.
  • 사용자(예: Alice)로부터 뉴스 피드를 검색하는 요청이 웹 서버에 수신되면, 웹 서버는 다음 중 하나를 수행합니다:
    • 뉴스 피드 생성 서비스를 호출하여 피드를 생성: 일부 사용자들은 플랫폼을 자주 방문하지 않으므로, 그들의 피드는 요청 시에 생성됩니다.
    • 미리 생성된 뉴스 피드를 가져오기: 플랫폼을 자주 방문하는 활성 사용자들을 위해 미리 생성된 뉴스 피드를 가져옵니다.

5.2 뉴스 피드 생성 과정

  • 다음 단계들이 순차적으로 수행되어 Alice를 위한 뉴스 피드를 생성합니다.

1단계: 팔로우 대상 ID 조회

  • 뉴스 피드 생성 서비스는 Alice가 팔로우하는 모든 사용자와 엔티티의 ID를 그래프 데이터베이스에서 검색합니다.

2단계: 친구 정보 조회

  • 그래프 데이터베이스에서 ID들이 검색되면, 다음 단계는 사용자 캐시에서 그들의 친구들(팔로워와 엔티티) 정보를 가져오는 것입니다.
  • 이 캐시는 사용자 데이터베이스가 업데이트/수정될 때마다 정기적으로 업데이트됩니다.

3단계: 관련 게시물 검색

  • 이 단계에서 서비스는 해당 ID들에 대한 최신의, 가장 인기 있는, 관련성 높은 게시물들을 포스트 캐시에서 검색합니다.
  • 이들은 Alice의 뉴스 피드에 표시할 수 있는 게시물들입니다.

4단계: 게시물 순위 매기기

  • 순위 서비스가 Alice와의 관련성을 기반으로 게시물들의 순위를 매깁니다.
  • 이것이 Alice의 현재 뉴스 피드를 나타냅니다.

5단계: 뉴스 피드 저장 및 발행

  • 뉴스 피드는 뉴스 피드 캐시에 저장되고, 이곳에서 상위 N개의 게시물이 Alice의 타임라인에 발행됩니다. (발행 과정은 다음 섹션에서 자세히 논의됩니다)

6단계: 추가 게시물 로딩

  • 마지막으로, Alice가 타임라인의 끝에 도달하면, 다음 상위 N개의 게시물이 뉴스 피드 캐시에서 그녀의 화면으로 가져와집니다.

5.3 핵심 특징

  • 적응형 생성: 활성 사용자는 미리 생성, 비활성 사용자는 요청 시 생성
  • 캐시 활용: 사용자 캐시와 포스트 캐시를 활용한 성능 최적화
  • 순위 기반: 개인화된 관련성을 기반으로 한 게시물 순위 매기기
  • 점진적 로딩: 상위 N개씩 단계적으로 피드 제공

6. 뉴스피드 발행 서비스

6.1 개요

  • 이전 단계(뉴스피드 생성 서비스)에서 뉴스피드가 <Post_ID, User_ID> 형태로 뉴스피드 캐시에 저장되었습니다.
  • 뉴스피드 발행 서비스는 이미 생성되어 캐시에 저장된 뉴스피드 데이터를 조회하여, 완전한 형태로 구성한 후 사용자의 타임라인에 실제로 전달하는 역할을 담당합니다.

6.2 발행 과정

1단계: 캐시에서 데이터 조회

  • 뉴스피드 발행 서비스가 뉴스피드 캐시에서 포스트 ID 목록을 가져옵니다.
  • 뉴스피드 캐시에서 가져온 데이터는 포스트와 사용자 ID의 튜플 형태입니다: <Post_ID, User_ID>

2단계: 완전한 데이터 구성

  • 포스트와 사용자에 대한 완전한 데이터를 다음 캐시들에서 조회합니다.
    • 사용자 캐시: 사용자 정보 (프로필, 이름 등)
    • 포스트 캐시: 게시물 상세 정보 (텍스트, 미디어, 메타데이터 등)
  • 이를 통해 완전히 구성된 뉴스피드를 생성합니다.

3단계: 클라이언트 전송

  • 완전히 구성된 뉴스피드가 팬아웃(fan-out) 방식 중 하나를 사용하여 클라이언트에게 전송됩니다.
  • 팬아웃 방식의 종류:
    • Push 모델: 미리 계산된 피드를 사용자에게 즉시 전송
    • Pull 모델: 사용자 요청 시 실시간으로 피드 생성 및 전송

7. 뉴스피드 순위 서비스

7.1 개요

  • 소셜 미디어 계정에 로그인할 때마다 관련성 높고 중요한 게시물들이 뉴스피드 상단에 표시되는 것을 경험할 수 있습니다.
  • 이러한 순위 매기기에는 여러 고급 순위 및 추천 알고리즘이 포함됩니다.
  • 뉴스피드 순위 서비스는 개인화된 콘텐츠 추천을 통해 사용자 경험을 향상시키는 핵심 시스템입니다.

7.2 알고리즘 입력 데이터

순위 알고리즘은 다음과 같은 다양한 사용자 특성들을 활용합니다:

  • 사용자 과거 기록: 이전 활동 패턴 및 행동 데이터
  • 상호작용 데이터: 좋아요, 싫어요, 댓글, 공유
  • 클릭 패턴: 어떤 유형의 콘텐츠에 더 많이 클릭하는지
  • 시간 기반 데이터: 특정 콘텐츠에 머무는 시간
  • 기타 행동 지표: 스크롤 속도, 재방문 패턴 등

7.3 주요 기능

7.3.1 후보 게시물 선택

  • 뉴스피드에 표시할 "후보" 게시물들을 선택합니다.
  • 사용자의 관심사와 관련성이 높은 콘텐츠를 우선적으로 고려합니다.

7.3.2 콘텐츠 품질 관리

  • 잘못된 정보(misinformation) 제거: 허위 정보나 검증되지 않은 내용 필터링
  • 클릭베이트(clickbait) 제거: 과장되거나 오해를 불러일으키는 제목의 콘텐츠 제거
  • 플랫폼의 신뢰성과 품질 유지

7.3.3 사회적 관계 분석

  • 사용자가 자주 상호작용하는 친구들의 목록을 생성합니다.
  • 친밀도가 높은 관계의 콘텐츠에 더 높은 가중치를 부여합니다.

7.3.4 관심 주제 파악

  • 사용자가 더 많은 시간을 보낸 주제들을 식별합니다.
  • 특정 카테고리나 해시태그에 대한 관심도를 측정합니다.

7.4 순위 결정 과정

  1. 데이터 수집: 사용자의 모든 활동 데이터를 실시간으로 수집
  2. 특성 추출: 수집된 데이터로부터 의미 있는 특성들을 추출
  3. 모델 적용: 머신러닝 모델을 통해 콘텐츠 관련성 점수 계산
  4. 순위 매기기: 계산된 점수를 바탕으로 게시물 순위 결정
  5. 품질 필터링: 부적절한 콘텐츠 제거 및 최종 순위 조정

7.5 핵심 특징

  • 개인화: 각 사용자에게 맞춤화된 콘텐츠 순위 제공
  • 실시간 적응: 사용자 행동 변화에 따른 실시간 순위 조정
  • 품질 보장: 신뢰할 수 있는 고품질 콘텐츠 우선 제공
  • 다중 신호 활용: 다양한 데이터 소스를 종합적으로 고려

참고