언어 가드 설정 스토어 (draft/save) — 코드레벨 동작 흐름 P2코드레벨

마지막 업데이트 2026-07-22

작성일: 2026-06-14 대상: 개발자 — 전역 언어 가드 설정 상태 파악 핵심 파일: stores/use-language-guard-settings-store.ts

개요 · 범위

영어 발화 감지(STT/오디오/transcript)·MFCC 패턴·끼어들기 허용시간·아바타 RMS·오탐 체크 등 전역 설정(GLOBAL 1건)을 관리하는 Zustand 스토어. 설정 UI는 draft 버퍼만 조작하고 save() 전까지 실제 동작에 반영되지 않는 draft/applied 패턴이 핵심.

설정 섹션 language-guard-settings.types.ts

섹션내용
stt (SttGuardSettings)전사 텍스트 영어 감지(windowSize/minChars/englishThreshold/cooldown)
audio (AudioGuardSettings)오디오 기반 비한국어 감지(임계·cooldown)
transcriptEnglishDetection키워드 기반 영어 감지(enabled+keywords)
mfccPattern (MfccPatternSettings)MFCC 패턴 룰(steps: tldx/phrase/sim, stopSpeech)
earlyInterrupt발화 초반 끼어들기 허용시간(allowedMs 100~10000)
avatarRms (AvatarRmsSettings)아바타 RMS 립싱크 전역 파라미터(#9, on/off는 아바타별)
mfccFpCheck (FalsePositiveCheckSettings)MFCC 오탐 체크 LLM 에이전트(provider/model/prompt/examples)

draft / applied 패턴

applied(최상위 state: stt/audio/mfccPattern/...) ← 실제 동작에 쓰이는 값 draft(편집 버퍼) ← 설정 UI만 조작 isDirty = draft !== applied save(): POST /api/language-guard-settings(draft) → 성공 시 draft를 applied로 복사 load(): GET → applied 세팅, draft는 dirty가 아닐 때만 새 값으로 리셋
왜 draft/applied인가: 설정 튜닝 중간값이 즉시 운영 동작에 반영되면 위험. 명시적 save로만 적용하고, dirty 추적으로 미저장 변경을 보호한다.

적용값 소비

함정 · 주의

파일 · 라인 레퍼런스

파일/심볼역할
use-language-guard-settings-store.ts (save L390, load L431, appliedFrom L247)스토어 본체
types/db/language-guard-settings.types.ts설정 섹션 타입
api/language-guard-settings/route.tsGET/POST 영속
components/pages/chat-preset.tsx, components/sections/language-guard-save-bar.tsx설정 UI

관련 문서