Skip to content

AI 채팅 필터 적용에 따른 채팅 지연 문제

gamgyul163 edited this page Dec 3, 2024 · 1 revision

문제점

  1. 지연 발생: 클로바 스튜디오 API 요청 및 응답 시간이 채팅 전송 지연의 주요 원인.
  2. 채팅 순서 보장 불가: API 응답 시간의 불규칙성으로 인해 순서가 엉킬 수 있음.

채팅111 (1)

해결 방안

수정 1: 응답을 모아서 순서대로 처리

  • 프로세스
    1. UUID 생성 및 등록:
      • 채팅 메시지마다 고유의 UUID를 생성.
      • Redis의 chatCache에 키로 UUID를, 값으로 null을 저장.
      • Redis의 chatQueue에 메시지를 순서대로 등록.
    2. 클로바 API 호출:
      • 비동기로 클로바 API 요청.
      • 응답이 도착하면 chatCache에 결과를 업데이트.
    3. Flush 처리:
      • chatQueue의 프론트 메시지부터 순서대로 chatCache를 확인.
      • 값이 있는 메시지를 모두 처리하고 전송.
      • 값이 없는 메시지를 만나면 flush 종료.
  • 장점
    • 채팅 순서가 보장됨.
    • 클라이언트에 채팅 필터링 결과가 적용된 상태로 노출됨
  • 단점
    • 클로바 API 응답까지 기다려야 하므로 지연 문제 해결이 어려움.

제목 없는 프레젠테이션 (1) (1)

수정 2: 채팅과 필터링 결과를 분리 전송

  • 프로세스
    1. 채팅 즉시 전송:
      • 사용자가 채팅을 입력하면, 클로바 API 응답을 기다리지 않고 바로 발송.
    2. 필터링 결과 별도 전송:
      • 클로바 API 응답 도착 시, Redis를 통해 별도의 이벤트로 필터링 결과를 전달.
    3. Redis Pub/Sub 구조:
      • :chat 채널: 즉시 전송되는 채팅 메시지.
      • :filter 채널: 클로바 API 응답 결과.
  • 장점
    • 채팅은 즉시 전송되므로 사용자 경험 개선.
    • 필터링 결과는 별도로 처리되어 순서 문제가 없음.
  • 단점
    • 사용자 채팅이 필터링되지 않은 상태로 먼저 노출될 수 있음.

최종 구현

  • 신규 메시지는 수정2와 같이 처리하여 채팅이 즉시 전송되도록 하였음
  • 채팅 저장 시에는 순서 + 필터링 결과가 함께 저장되어야 하므로 수정1의 방식을 이용
👋 소개
📖 회의록
🗓️ 개발일지
🗃 설계 문서
🕵️‍♂️ 회고록
💪 멘토링 일지
🎳 트러블 슈팅
💽 발표자료
Clone this wiki locally