Django-Wanted-Internship-3-Team / repo1_feed-service

소셜 미디어 통합 Feed 서비스 (원티드 팀 과제 1)
https://bow-hair-db3.notion.site/Feed-938175f1165b470e90462d1f1d52fd78
MIT License
2 stars 0 forks source link

추가기능 API (최근 많이 사용한 태그 추천, 내 게시물 단기간 조회수 급상승) #21

Open saJaeHyukc opened 10 months ago

saJaeHyukc commented 10 months ago

PR 체크리스트

아래 항목을 확인해 주세요:

PR 유형

이 PR은 어떤 종류의 변경을 가져오나요?

현재 동작은 무엇인가요?

14

이슈 번호: N/A

새로운 동작은 무엇인가요?

최근 가장 많이 생성된 해시태그를 추천하는 API 구축

이 PR은 호환성 변경을 도입하나요?

기타 정보

saJaeHyukc commented 10 months ago

최근 많이 사용한 태그 추천 API Flow 생각

우선 3시간이라는 시간을 기준점을 잡기 위해 객체들의 기준이 되는 시간이 필요했습니다. hashtag - post 사이의 pivot table에 timestamp를 추가하여 그 시간을 기준 점으로 3시간 전의 생성된 데이터들을 모두 조회하여 그 중 id 값을 기준으로 Count하여 많은 순서대로 정렬하면되겠다 생각하여 구현했습니다.

더 좋은 방법이 있다면 공유해주시면 감사하겠습니다 :)

saJaeHyukc commented 10 months ago

(기능 구현 예정)

On Fire : 내 게시물이 단기간 조회수 급상승 -> 해당 기능에 대한 설명이 부족해 비즈니스 적으로 활용하여 API를 구현했습니다.

기존 24시간 동안 일정 조회수 (100건으로 생각)을 넘겼을 때 일시적으로 단기간 급상승 게시물에 올라옵니다. 내 게시물이 단기간 조회수 급상승이라는 서비스(광고 유료 서비스로 구입시간으로 부터 24시간 동안만 )를 사용했을시 동일하게 단기간 급상승 게시물로 인식하여 올라옵니다.

simseulnyang commented 10 months ago

코드 확인했습니다! 재혁님께서 선택하신 방법이 좋다고 생각합니다. 저였으면 HashTag 테이블 하나만 이용하려고 하다 보니 코드 자체가 엄청 복잡해지고 구현 자체도 힘들었을 것 같아요😢 이번에도 또 하나 배웠네요 ㅎㅎ 감사합니다!

saJaeHyukc commented 10 months ago

고생하셨습니다!😁

우선 저는 '최근 많이 사용되는 해시태그'에 대해서 ' 게시물 조회 시 많이 검색 혹은 포함되는 해시태그'라고 생각하였습니다. @saJaeHyukc 님은 '게시물 생성시 많이 사용된 해시태그'라고 생각하신 것 같은데 이부분은 충분히 그렇게도 해석가능할 것 같습니다!

우선 HashTag 모델의 name이 unique가 아니어서 같은 이름의 해시태그라도 카운팅이 다르게 될 수 있을 것 같습니다. 또한, 기준 3시간 기준 시 데이터베이스에 입력하여 쿼리를 하는 것은 연산이 버거울 수도 있지 않을까 생각됩니다.

현재는 없지만 Cache를 통해서 해결할 수 있지 않을까 생각됩니다. (Redis)

  1. 3시간 이내 카운팅 기록 방법 : HashTag 이름을 Key로 하여 3시간 전 분단위 별로 해시태그 이름 사용 건에 대한 카운팅을 합니다.
  2. Cache에 존재하는 HashTag를 대상으로 Ordering을 통해 총 카운트가 높은 HashTag를 얻습니다. 이러한 방법으로 접근하여 구성할 수 있지 않을까 생각됩니다!

좋은 접근인것 같습니다 :) 만약 레디스를 사용할 수 있다면 해시태그가 생성될 때마다 Redis에 저장하고 하면 간단하게 카운팅할 수 있겠네요 ! 캐시 사용을 해당 API 내용을 저장하고 그 내용을 조회할 수 있도록 하는 방법만 생각했는데 위의 방식도 사용할 수 있을 것 같아요 피드백 해주셔서 감사합니다.

saJaeHyukc commented 10 months ago

코드 확인했습니다! 재혁님께서 선택하신 방법이 좋다고 생각합니다. 저였으면 HashTag 테이블 하나만 이용하려고 하다 보니 코드 자체가 엄청 복잡해지고 구현 자체도 힘들었을 것 같아요😢 이번에도 또 하나 배웠네요 ㅎㅎ 감사합니다!

감사합니다 :)