Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat ✨ feed api 추가 #416

Open
niamu01 opened this issue Mar 3, 2024 · 0 comments
Open

feat ✨ feed api 추가 #416

niamu01 opened this issue Mar 3, 2024 · 0 comments
Assignees
Labels
enhancement New feature or request

Comments

@niamu01
Copy link
Contributor

niamu01 commented Mar 3, 2024

내용

주요 기능: 새로운 소식 올리기 (피드 발행) , 팔로우 한 사람들의 소식 보기 (피드 생성)

피드 발행: 캐시&db에 기록, 나를 팔로우 하는 사람들의 피드에 전송
피드 생성: 내가 팔로우 하는 사람들의 피드를 모아 최신순 정렬

설계

feed db: {
피드 고유 id : objectId
유저 고유 id (로그인한 사람 말고 작성자) : number -> userPreview로 변경
작성된 시각 : Date
피드 타입 : enumType
각 피드에 맞는 글: 각 피드에 맞는 타입
}
// id까지만 한 collection에 두고 feed collection을 따로 두는 설계를 고민했지만... sql공부 중에 비슷한 컬럼끼리 한 테이블에 모아두라 해서 모아둠

feed cache: (Map자료구조)
key: 유저 id
value: 피드 고유 id의 배열

ex) Map<81730, [(81730이 팔로우 하는 사람이 적은 글1), ...]>

cache 방식 2가지

fanout-on-write

포스팅 시 뉴스피드(모든 피드)를 갱신
본인의 캐시에 해당 포스팅을 기록
뉴스피드가 갱신되어있어 (pre-computed) read시 빠름
팔로워가 많은 사용자는 모두(접속하지 않는 유저도) 갱신해줘야해서 오래 걸림 (hotkey)

fanout-on-read

피드를 읽으려 할 때 갱신 (요청기반 on-demand)
비활성화 사용자가 많은 경우 로그인 전까지 자원 소모 x
hotkey x
피드 읽기까지의 소요시간이 길어질 수 있음

+) 두 방법을 적절히 섞어 장점을 얻을 수 있지만, fanout-on-write 방식을 우선적으로 구현 완료하고 마칠 예정의 이슈

API

GET

캐시의 userId와 feedId를 통해 userPreview와 게시글을 가져와 반환
(그럼 게시글도 preloadCache를 해야하는게...맞나)

  1. feedCache에서 내 userId을 통해 (key) 내가 팔로우하는 사람들의 피드id를 받음 (value)
  2. 피드 id를 통해 feed를 가져옴
  3. 반환

POST

cache와 db에 업데이트

  1. 내가 새 소식을 포스팅 함
  2. 나를 팔로우 하는 유저들의 id를 userCache에서 가져옴
  3. (나를 팔로우 했지만 mute한 유저 filter)
  4. feedCache에서 id를 키값으로 새로 쓴 포스팅 id를 push 해줌

get, post 둘 다 Authorization header 필요

240303

  • 설계 고민 및 위 이슈 작성
  • 코드로 구조 맞춰보기...

240308

  • cursor paginated 추가
    • union type을 paginated할 수 없던 이슈
  • local에 cache가 있는 follow 먼저 만들기 시작
    • type을 고정할 수 없던 이슈

240309

  • temp_follow 데이터 만든 후 follow feed 테스트
  • get 틀 구현

  • cache Map으로 구현
  • post 틀 구현
  • follow이외의 피드 이어서 작업...
    • 작업 도중 cache를 바꾸게 될 수도 있음...
    • db참조를 덜 하는 방향으로 가려 함...
@niamu01 niamu01 added this to 42Stat Mar 3, 2024
@niamu01 niamu01 converted this from a draft issue Mar 3, 2024
@niamu01 niamu01 moved this from 🔖 Ready to 🏗 In progress in 42Stat Mar 3, 2024
niamu01 added a commit that referenced this issue Mar 3, 2024
@niamu01 niamu01 self-assigned this Mar 3, 2024
@niamu01 niamu01 added the enhancement New feature or request label Mar 3, 2024
@niamu01 niamu01 mentioned this issue Mar 9, 2024
niamu01 added a commit that referenced this issue Apr 4, 2024
niamu01 added a commit that referenced this issue Apr 5, 2024
niamu01 added a commit that referenced this issue Apr 7, 2024
flatMap은 빈 배열을 합치지 못하더라구용

- #416
niamu01 added a commit that referenced this issue Apr 10, 2024
niamu01 added a commit that referenced this issue Apr 10, 2024
niamu01 added a commit that referenced this issue Apr 10, 2024
niamu01 added a commit that referenced this issue Apr 10, 2024
flatMap은 빈 배열을 합치지 못하더라구용

- #416
niamu01 added a commit that referenced this issue Apr 12, 2024
틀만 갖추도록 만들어 두고 endCursor도 없어질 예정

- #416
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
Status: 🏗 In progress
Development

No branches or pull requests

1 participant