modulersYJ / ganoverflow-front

2 stars 2 forks source link

카테고리 구체화 or 구조개편 / 태그 도입 제안합니다잉 #118

Closed ABizCho closed 1 year ago

ABizCho commented 1 year ago

@hongregii 카테고리 구체화 or 구조개편 / 태그 도입 제안합니다잉

카테고리 구체화

카테고리를 가능한 한 구체화해서 사람들의 공통관심사를 묶어 간편한 검색 혹은 필터링 등을 할 수 있지 않을까 고민해봄 BUT , 카테고리를 사전에 폭넓게 설정해두기엔 사람들이 너무 많은 카테고리때문에 오히려 안쓰거나 반감가질 수 있음

그렇다고 계층관계를 고민하여 카테고리를 2레벨(ex. 프로그래밍 - 리액트)로 빡빡하게 사전 설정해두는것도 비슷한 역효과 예상함. 애초에 프로그래밍처럼 계층을 확실히 가진 도메인이 아니면 사람들이 어떤 카테고리를 원할지 예상조차 안감

따라서 , 일단 카테고리는 굵게굵게 (프로그래밍, 오피스생산성, 작문, 번역 등) 사전 설정해두고 챗포스트에 태그 필드를 도입하면 어떨까 싶습니다.

태그는 챗포스트 등록 시 사용자들이 매번 직접 *N개의 태그를 자유롭게 지어서-할당하도록 하되, 서버에서는 파생테이블로 태그에 대한 파생데이터를 집계 해두다가 사용자가 어떤 태그의 앞글자 몇개를 입력 시 문자열 비교 필터링을 통해 태그: N개라고 드랍다운으로 추천해주어 많이 쓰이는 태그네이밍을 제안하여 어느정도 카테고리처럼 묶일 수 있게 제안 (집계 & GET 효율성이 문제일듯 어케할지 고민 필요)

(ex. 전체 챗포스트에 대해 React.js라는 태그는 80개, react 라는 태그는 5개 쓰인 경우, 사용자가 reac을 쓰면 드랍다운으로 React: 80, react: 5 를 보여주어 React라는 태그군집에 묶이도록 유도 )

포스트 등록할 때 태그 설정 & 카테고리 미할당 시 GPT가 자동으로 판별, 할당해주게 하는 등의 방법으로 카테고리-태그 느슨한 계층관계를 형성하면 간편하기도 하고 활용점이 다양해질듯

ABizCho commented 1 year ago

GPT 제안

태그를 집계하고 필터링을 위한 제안을 하려면 여러가지 접근 방법이 있습니다. 아래에 몇 가지 전략을 소개합니다.

데이터베이스 캐싱

  1. 정기적으로 집계: 백엔드에서 스케쥴링 작업(Cron Job 등)을 이용해 일정 시간 간격으로 태그를 집계할 수 있습니다. 이 집계된 정보는 별도의 데이터베이스 테이블이나 캐시(Redis 등)에 저장될 수 있습니다.
  2. 실시간 집계와 캐싱의 혼합: 실시간으로 포스트가 추가되거나 수정될 때 태그 정보를 갱신하되, 이를 캐시에 저장하여 빠르게 검색 가능하게 할 수 있습니다.

API 설계

  1. Debounce 적용: 사용자가 태그를 입력할 때마다 서버에 쿼리를 날리지 않고, 일정 시간동안 입력이 없을 때 한번만 쿼리를 보내는 방식(debounce)으로 구현할 수 있습니다.
  2. 드롭다운 제안: 사용자가 태그 입력을 시작하면, 백엔드에서 이를 감지해 존재하는 태그와 그 갯수를 드롭다운으로 보여줍니다.

데이터 전송

  1. 페이징 or 레이지 로딩: 태그가 굉장히 많을 경우, 모든 태그를 한 번에 보내는 것은 비효율적입니다. 페이징이나 레이지 로딩을 사용하여 필요한 데이터만 전송할 수 있습니다.
  2. 웹소켓: 실시간으로 태그 데이터가 변경되어야 하는 경우 웹소켓을 이용할 수 있습니다.

추가 팁

  1. 태그 정규화: 대소문자, 공백, 특수문자 등을 정규화하여 사용자가 '태그', ' 태그 ', '태그!' 등을 입력했을 때 같은 태그로 인식하도록 할 수 있습니다.

  2. 프론트엔드 캐싱: 자주 사용되는 태그 정보는 클라이언트 측에서 캐싱을 하여 빠른 UX를 제공할 수 있습니다.

  3. 통계 및 랭킹: 사용자가 많이 사용하는 태그를 통계내어, 이를 특별하게 보여주거나 추천할 수 있습니다.

  4. 확장성 고려: 미래에 태그 정보가 아주 많아질 경우를 대비하여, 분산 데이터베이스나 캐싱 전략 등을 미리 고려할 수 있습니다.

이러한 방식들을 조합하여 태그 제안 및 검색 기능을 구현할 수 있습니다. 실제 적용시에는 서비스의 특성, 트래픽, 사용자 동작 등을 고려하여 최적의 전략을 선택해야 합니다.

ABizCho commented 1 year ago

완료