뉴스피드(newsfeed)란?
- 사용자의 소셜 미디어나 웹 플랫폼에서 최신 소식이나 업데이트를 실시간으로 보여주는 기능입니다. 기본적으로, 뉴스피드는 여러 사용자가 생성한 콘텐츠(게시글, 사진, 비디오 등)와 활동(댓글, 좋아요, 공유 등)을 한 곳에서 모아 시간순이나 알고리즘에 따라 정렬하여 표시합니다.
피드와 게시글의 차이점
게시글 (Post)
- 정의: 사용자가 작성한 독립적인 콘텐츠로, 일반적으로 텍스트, 이미지, 비디오 등 다양한 형식으로 이루어질 수 있습니다.
- 목적: 사용자에게 정보를 전달하거나, 의견을 표현하며, 다른 사용자와의 상호작용(댓글, 좋아요 등)을 유도하는 역할을 합니다.
- 예시: 블로그 글, 포럼 글, 소셜 미디어의 상태 업데이트 등이 포함됩니다.
뉴스피드 (News Feed)
- 정의: 사용자가 작성한 게시글이나 다른 사람의 활동(댓글, 좋아요 등)을 시간 순서 또는 알고리즘에 따라 정렬하여 보여주는 피드입니다.
- 목적: 사용자에게 최신 정보나 친구 및 관심 있는 사람들의 활동을 제공하여, 상호작용을 유도하고 플랫폼의 참여를 증가시키는 역할을 합니다.
- 예시: Facebook의 뉴스피드, Twitter의 타임라인, Instagram의 홈 피드 등이 있습니다.
차이점 요약
- 구성 요소:
- 게시글: 개별 콘텐츠 (예: 사용자 작성 글).
- 뉴스피드: 여러 게시글과 활동의 집합.
- 목적:
- 게시글: 특정 정보 전달 및 사용자 상호작용 유도.
- 뉴스피드: 사용자에게 다양한 정보를 제공하고, 최신 활동을 보여줌으로써 플랫폼 내 상호작용 촉진.
- 정보 제공 방식:
- 게시글: 사용자에 의해 작성되고 고정되어 있으며, 독립적으로 존재.
- 뉴스피드: 동적으로 업데이트되며, 알고리즘이나 시간순으로 콘텐츠가 배치됨.
결론적으로
게시글은 콘텐츠의 기본 단위인 반면, 뉴스피드는 그 콘텐츠가 사용자에게 전달되는 방식.
뉴스피드는 피드 발행, 뉴스피드 생성순으로 작용한다.
- 피드 발행은 사용자가 콘텐츠를 생성하고 공유하는 단계이며, 이 과정에서 콘텐츠가 데이터베이스에 저장됩니다.(post)
- 뉴스피드 생성은 발행된 콘텐츠를 효과적으로 사용자에게 제공하기 위해 필요한 알고리즘과 데이터를 처리하는 단계입니다. (get)
뉴스피드 구현에 있어 팬아웃이 나오는데 이 팬아웃에 대해 알아보자.
팬아웃(Fan-out).
- 정의: 팬아웃은 하나의 데이터 변경이나 이벤트(예: 게시글 작성)가 여러 사용자에게 동시에 전파되는 구조를 의미합니다. 일반적으로 게시글이 작성되면, 이를 여러 사용자에게 동시에 전달해야 하기 때문에 팬아웃 패턴이 적용됩니다.
팬아웃 두가지모델
- 쓰기시점 팬아웃(fanout-on-write)모델 (push 모델)
- 읽기시점 팬아웃(fanout-on-read)모델 (pull 모델)
쓰기시점에 팬아웃하는 모델
- 새로운 포스팅을 기록하는 시점에 뉴스피드를 갱신하게 된다. 포스팅이 완료되면 바로 해당사용자의 캐시에 해당 포스팅을 기록.
장점
- 뉴스피드가 실시간으로 갱신되며 친구 목록에 있는 사용자에게 즉시 전송
- 새 포스팅이 기록되는 순간에 뉴스 피드가 이미 갱신되므로 뉴스피드를 읽는데 시간이 짧아진다.
단점
- 친구가 많은 사용자의 경우 친구목록을 가져오고 그 목록에 있는 사용자 모두의 뉴스피드를 갱신하는 데 많은 시간이 소요될 수 있다. (핫키 문제)
- 서비스를 자주 이용하지 않는 사용자의 피드까지 갱신해야 하므로 자원낭비.
읽기시점에 팬아웃하는 모델
- 피드를 읽어야 하는 시점에 뉴스피드를 갱신. 사용자가 본인 홈페이지나 타임라인을 로딩하는 시점에 새로운 포스트를 가져온다.
장점
- 비활성화된 사용자, 서비스에 거의 로그인하지 않는 사용자의 경우에 유리하다. 로그인하기까지 컴퓨터 자원이 소모되지 않기 때문이다.
- 데이터를 친구 각각에 푸시하는 작업이 필요 없으므로 핫키문제도 생기지 않는다.
단점
- 뉴스피드를 읽는데 많은 시간이 소요될 수 있다.
위 두가지 방법을 결합하여 상황에 맞게 쓰는 전략이 필요하다.
뉴스피드는 빠르게 새로운 소식을 보는게 중요한 부분이므로 대부분의 사용자는 푸시 모델을 사용한다.
친구나 팔로워가 아주 많은 인플루언서의 경우에는 팔로어로 하여금 포스팅을 필요할때 가져 갈 수 있도록 풀 모델을 사용하여 시스템 과부화를 방지한다.
뉴스피드 구현해보기 전 뉴스피드에 대해 알아보는 시간을 가졌다.
구현할때 푸시모델과 풀모델을 잘 엮어서 써야할것같다.
그래서 기본적으로는 푸시모델이 작동되도록하고, 인플루언서 친구나 팔로워가 일정 기준 이상 넘어간사람을 캐시로 관리하여 해당 사람은 풀 모델이 적용되도록 하면 될 것 같다.
'java 배우기 > TIL' 카테고리의 다른 글
| 게시물 검색 최적화 작업 2 (인덱스 적용) (0) | 2024.11.07 |
|---|---|
| 게시물 검색 최적화 작업 1 (기본 검색기능 구현) (0) | 2024.11.07 |
| 이미지 수정시 추가이미지가 없을때 오류 (0) | 2024.10.30 |
| S3 사용하면서 RequestPart 로 인한 에러 (0) | 2024.10.24 |
| 게시판 사진등록에 S3 써보기 (0) | 2024.10.24 |