본문으로 건너뛰기
JAEWON CHANG시스템 작업 기록
언어

제원

서비스
Zoom 기반 영어회화 세션
기간
2025 – 2026
수신
Zoom RTMS — Webhook + WebSocket
전달
SSE — 서버에서 사용자 화면으로
역할
실시간 데이터 파이프라인 · 세션 상태 설계 · LLM 연동 및 응답 검증

배경

사용자는 실제 사람과 영어로 대화하는 중이다. 막혔을 때 다른 창을 열어 상황을 처음부터 설명하고 질문하면, 그 사이에 대화는 이미 지나가 있다.

도움이 유용하려면 AI가 지금 무슨 대화가 오갔는지 이미 알고 있어야 한다.

수행

  1. Zoom RTMS를 연동했다. 웹훅과 WebSocket으로 참가자의 실시간 발화 정보를 서버로 받는다.

  2. 참가자별 발화를 수집해 누가 무엇을 말했는지 구분하고, 세션 단위 상태로 집계했다. AI 요청이 들어온 시점까지의 대화를 서버가 알고 있는 구조다.

  3. 서버의 상태와 필요한 데이터는 SSE로 사용자 화면에 전달했다. 수신 경로(WebSocket)와 전달 경로(SSE)는 서로 다른 방향의 다른 문제다.

  4. AI 요청이 오면 현재 세션의 전사와 맥락을 조합해 프롬프트 컨텍스트를 만들고 LLM API를 호출한다.

  5. LLM의 자유 텍스트를 그대로 신뢰하지 않았다. JSON Schema로 응답 형식을 검증해, 필수 필드가 없거나 예상과 다른 형식이면 서비스 레이어에서 걸러지도록 했다. LLM은 특별한 존재가 아니라 검증이 필요한 외부 시스템이다.

  6. 사용자의 최근 영어 교정 이력을 컨텍스트에 함께 넣었다. 과거에 반복한 오류를 이번 세션에서도 반복하면 그 패턴을 인지할 수 있다.

  7. 생성이 필요한 정보와 시스템이 보장해야 할 사실 데이터를 분리했다. 자연어 이해와 문법·표현 분석, 교정 판단은 LLM이 맡고, 실제 날짜와 과거 발화 원문, 사용자 기록, 확정된 교정 정보는 DB에서 다시 결합한다. 이 분리로 환각 가능성을 줄였다.

시스템

발화 수신에서 검증된 응답까지Zoom sessionZoom RTMSWebhook + WebSocketinboundSession stateper participantPrompt context+ correction historyLLM APIJSON Schema checkSSEoutboundUser screen
그림 spker realtime

수신은 WebSocket, 전달은 SSE. 사이에 스키마 검증이 있다.

Zoom 세션의 발화가 RTMS를 거쳐 웹훅과 WebSocket으로 서버에 도착하고, 참가자별 세션 상태로 집계된다. 요청이 오면 전사와 교정 이력을 합쳐 프롬프트를 만들고 LLM을 호출한 뒤, JSON Schema로 응답을 검증하고 SSE로 사용자 화면에 전달한다.

역할 경계

  • 이 항목에는 공개할 수 있는 측정 수치가 없다. 성능이나 정확도를 숫자로 주장하지 않는다.
  • 모델 학습이나 파인튜닝은 하지 않았다. 사용한 것은 LLM API다.
  • 환각을 제거했다고 말하지 않는다. 사실 데이터를 DB에서 다시 결합해 가능성을 줄인 것이다.