2026/01/07 합동프로젝트 - 1

김기훈·2026년 1월 7일

TIL

목록 보기
105/191

오늘 학습 내용 ✅



테이블 명세서


ai 사용 최적화

  • 모델에 프론트엔드가 사용하기 위한 특정 컬럼을 추가하여 API 호출을 줄인다.

status와 error_message가 없으면 생기는 문제

  • DB에 상태 저장을 하지 않는 경우

    • AI가 리뷰에 욕설이 많아서 요약 못 하는 경우
  • DB에 상태 저장을 안 한다면?

    • A 유저가 접속 -> AI 요청 -> AI: "욕설을 감지하여 거부"
    • B 유저가 접속 -> DB에 요약본이 없을 경우 -> AI 요청 -> AI: "욕설을 감지하여 거부"
      • 결과적으로 API 비용이 발생함
  • 결과

    • 페이지가 새로고침 될 때마다 계속 유료 API를 호출, 돈은 돈대로 나가고 결과는 계속 실패함
  • DB에 status='BLOCKED'라고 저장한다면

      1. A 유저 접속 -> AI 요청 -> AI 거부 -> DB에 'BLOCKED' 저장
      1. B 유저 접속 -> DB 확인 -> status 확인 -> API 호출 없이 바로 에러 메시지 노출
  • 결과

    • API 호출이 없기 때문에 API 비용이 발생하지 않음

FE 사용 방법

  • status

    • COMPLETED
      • DB에 저장된 game_riview_summaries테이블의 text를 보여줌
    • PROCESSING
      • 스켈레톤 UI 또는 "AI가 읽고 있어요..." 애니메이션 노출
    • BLOCKED
      • 자동 재요약 시도 X
      • error_message("부적절한 내용...")를 붉은 박스로 보여줌
    • FAILED
      • 일시적 오류이므로, 사용자가 누를 수 있는 [새로고침] 버튼을 보여줌
  [status & error_message?]
 
  1. status = 'BLOCKED' (부적절 콘텐츠)
  - 중요: 이 상태일 경우, 프론트엔드는 절대 재요약 API를 자동 호출하면 안 됨.
  - 이유: 호출해봤자 AI가 또 거부하므로 비용만 낭비됨. 즉시 저장된 에러 메시지 노출.
 
  2. status = 'FAILED' (타임아웃, 네트워크 오류)
  - 프론트엔드는 사용자에게 [재시도 버튼]을 노출하여 수동으로 다시 요청하게 유도.

ai 테이블이 필요한 이유

  • AI 모델 자체를 위한 테이블은 필요 없지만, AI가 만든 결과물을 저장할 테이블은 반드시 필요
    • 한 번 생성된 요약본을 DB에 저장(캐싱)해두고
    • 다음 접속 시에는 DB에서 바로 꺼내 보여주는 전략을 사용하기 위해서 테이블 추가
 [Table: GAME_REVIEW_SUMMARIES]
 
 1. text (요약 내용)
 - Gemini API의 응답 결과(Response)를 그대로 저장
 - 프론트엔드에서 불렛 포인트 처리를 하기 위해 원문 텍스트를 유지
 
 2. status (처리 상태) - REQ-AI-005, 009 대응
 - 'COMPLETED': 정상 요약 완료. 화면에 노출.
 - 'BLOCKED': 욕설/비방 등으로 인해 AI가 거부함. 화면에 "요약 불가" 메시지 노출.
 - 'FAILED': 타임아웃/네트워크 오류. 재시도 버튼 노출 대상.
 - 'PROCESSING': 스켈레톤 UI 또는 "AI가 읽고 있어요..." 애니메이션 노출
 
 3. count (기준 리뷰 수) & created_at (생성일시)
 - 재요약 로직을 위한 판단 기준
   - ex. [ 현재 게임의 총 리뷰 수 != count] 
   - ex. [ created_at이 24시간 후 ] -> 다시 Gemini API 호출 후 Update
   - 위의 조건 충족X -> DB에 있는 text 반환 (비용/속도 절약)

ERD 작성


API 명세

  • 댓글 투표 테이블 (comment_votes)
    • 중복 투표 방지를 위해 별도 테이블로 분리, vote_type 컬럼을 두어 'LIKE', 'DISLIKE'를 관리
  • 댓글 투표 API
    • 투표 생성(POST)과 취소(DELETE)를 구분
    • 프론트엔드의 UX를 고려하기 위해서 취소 시에는 변경된 총 좋아요 수를 반환
  • AI 요약 API
    • 타임아웃(15초) 규정을 명세서에 추가
    • 사용자가 보고 있는 페이지의 리뷰만 요약하기 위해 Query Parameter로 page 정보를 받도록 설계
    • ex. POST /api/v1/communitys/{game_id}/reviews/summary?page=1


새롭게 알게된 내용 ✅

  • 플로우차트란?

    • 일의 순서를 알기 쉽게 그림으로 그린 지도
    • 어떤 문제 해결이나 업무 처리가 진행되는 과정을 약속된 기호(도형)와 화살표로 연결해 놓은 그림
    • 네모: 해야 할 행동이나 처리
    • 마름모: 판단이나 질문
    • 화살표: 일의 진행 방향

오늘 발생한 문제(발생 했다면) ✅

profile
안녕하세요.

0개의 댓글