피드로 돌아가기
"My Web Chat Wasn't a Real Channel. That Broke My Agent Pipeline"
Dev.toDev.to
Backend

Web Chat을 First-class Channel로 통합하여 상태 불일치 해결

"My Web Chat Wasn't a Real Channel. That Broke My Agent Pipeline"

CodeKing2026년 5월 22일5intermediate

Context

Web Chat을 단순 UI 페이지로 취급하여 별도의 In-memory Store를 운영함에 따른 도메인 모델 분리 발생. 이로 인해 Chat UI와 Message Service 간의 데이터 불일치로 conversation_not_found 에러 및 알림 누락 현상 초래.

Technical Solution

  • 별도 운영하던 chat-ui/conversation-store.js 인스턴스를 제거하고 시스템 전체가 공유하는 Singleton Store로 단일화
  • installChatUiHelpers 함수를 통해 공통 Store에 Web Chat 전용 헬퍼 로직을 주입하는 구조로 변경
  • Web Chat 세션 생성 시 CONVERSATION_ASSISTANT_CONTROL_MODE.ASSISTANT 설정을 강제하여 모든 채널의 Orchestration 경로를 통일
  • UI 편의를 위한 Custom State를 제거하고 Telegram, Feishu 등 타 채널과 동일한 Conversation Identity 모델 적용
  • 개별 헬퍼 메서드 테스트 대신 Assistant-mode 동작 및 Persistence 세맨틱 중심의 통합 테스트 체계 구축

- 멀티 채널 시스템 설계 시 브라우저 UI를 특수 케이스가 아닌 하나의 독립된 Channel로 모델링했는지 확인 - 동일한 도메인 데이터를 다루는 서로 다른 In-memory Store가 공존하여 Single Source of Truth 원칙을 위배하는지 검토 - 채널별 진입 경로(Entry Point)가 서로 다른 비즈니스 로직을 타지 않고 동일한 Orchestration Pipeline을 공유하는지 검증

원문 읽기