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

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

Open
wants to merge 4 commits into
base: develop
Choose a base branch
from

Conversation

JaeHyuckSa
Copy link
Contributor

PR 체크리스트

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

  • 커밋 메시지가 우리의 가이드라인을 따르고 있는지 확인하세요
  • 변경 사항에 대한 테스트가 추가되었는지 확인하세요 (버그 수정 / 기능 추가)
  • 문서가 추가되거나 업데이트되었는지 확인하세요 (버그 수정 / 기능 추가)

PR 유형

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

  • 버그 수정
  • 새로운 기능 추가
  • 코드 스타일 업데이트 (서식, 로컬 변수)
  • 리팩터링 (기능 변경 없음, API 변경 없음)
  • 빌드 관련 변경
  • CI 관련 변경
  • 문서 내용 변경
  • 애플리케이션 / 인프라 변경
  • [] 기타... 설명:

현재 동작은 무엇인가요?

#14
이슈 번호: N/A

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

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

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

  • 아니요
    hashtag 와 post 사이의 pivot table을 커스텀하여 created_at을 추가했습니다.

기타 정보

- 특정 시간 동안 가장 많은 해시태그를 추천해주기 위해서 pivot table로 연결되어있는 posts_hashtags 테이블에 created_at 필드를 추가
Related to #14 #4
- 테스트 성공
- 테스트 실패(인증)
Related to #14
@JaeHyuckSa JaeHyuckSa self-assigned this Oct 28, 2023
@JaeHyuckSa JaeHyuckSa linked an issue Oct 28, 2023 that may be closed by this pull request
@JaeHyuckSa JaeHyuckSa changed the title Feature/issue 014 최근 3시간 동안 가장 많이 사용된 해시태그 추천하는 API Oct 28, 2023
@JaeHyuckSa
Copy link
Contributor Author

JaeHyuckSa commented Oct 28, 2023

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

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

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

@JaeHyuckSa JaeHyuckSa changed the title 최근 3시간 동안 가장 많이 사용된 해시태그 추천하는 API 추가기능 API (최근 많이 사용한 태그 추천, 내 게시물 단기간 조회수 급상승) Oct 28, 2023
@JaeHyuckSa
Copy link
Contributor Author

JaeHyuckSa commented Oct 28, 2023

(기능 구현 예정)

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

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

@simseulnyang
Copy link
Collaborator

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

Copy link
Collaborator

@Chestnut90 Chestnut90 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다!😁

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

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

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

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

posts/models.py Show resolved Hide resolved
posts/models.py Show resolved Hide resolved
posts/models.py Show resolved Hide resolved
@JaeHyuckSa
Copy link
Contributor Author

JaeHyuckSa commented Oct 30, 2023

고생하셨습니다!😁

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

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

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

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

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

@JaeHyuckSa
Copy link
Contributor Author

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

감사합니다 :)

@Chestnut90 Chestnut90 self-requested a review October 31, 2023 02:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

feature: 추가 기능
4 participants