Back to Logs
ChatbotTimeslotFirebaseCORSCI/CDTroubleshooting

Chatbot & Timeslot 통합 트러블슈팅 (2026-04-22)

2026. 4. 22.3분 읽기

Chatbot & Timeslot 통합 트러블슈팅 (2026-04-22)

날짜: 2026-04-22 내용: Chatbot 및 Timeslot 프로젝트의 기능 고도화 및 운영 이슈 해결


1. Chatbot — CI/CD 및 인프라 최적화

     [문제 1] CI 배포 권한 및 구조 분리
  • 증상: Firebase CI 배포 중 IAM 권한 오류 및 배포 속도 저하.
  •    **해결**:
    
    • functionshosting 배포를 명확히 분리하여 firebase deploy --only functions, firebase deploy --only hosting으로 최적화.
    • GitHub Actions에서 필요한 IAM 역할을 세분화하여 추가.
    • firebase-tools 버전을 v15로 고정하여 호환성 문제 해결.

[문제 2] CORS 및 패키지

     의존성 이슈
  • 증상: widget.js 호출 시 CORS 차단 및 Cloud Functions에서 nodemailer 임베딩 실패.
  • 해결:
    • functions 내부에 cors 미들웨어를 직접 추가하고 pnpm 워크스페이스 구조에 맞게 모듈 경로 조정.
    • nodemailer v8(ESM)과 v6(CJS) 간의 호환성 문제를 해결하기 위해 v6로 다운그레이드하여 안정성 확보.

[기능 고도화]

  • B-side UI 개선 (아이콘 커스텀, 관리자 이메일 매핑).
  • Google OAuth 초대 시스템 및 설정 페이지 디자인 리뉴얼.
  • 위젯 CSS를 IIFE로 번들링하여 스타일 간섭 방지.

2. Timeslot — 운영 도구 및 상태 관리 최적화

[기능 추가] 배치 생성기 내

     부스별 브레이크 타임 토글
  • 상황: 모든 부스에 동일한 브레이크 타임을 적용하던 방식에서, 부스별로 개별 제어가 필요함.
  • 해결: batch generator UI에 부스별 브레이크 타임 활성화/비활성화 토글 추가 및 로직 구현.

[문제 해결] 상태 관리 및 데이터 정합성

  • 증상: 페이지 전환 시 이전 상태(setAttendeeCurrentPage)가 남아있어 데이터 오염 발생.
  • 해결: 상태 제거 후 남은 참조 코드를 전수 조사하여 제거.
  • 개선: 예약/체크인 카운트 시 Firebase의 atomic increment를 적용하여 데이터 정합성 보장.
  • UI: 타임 피커에 awayMode 배지 추가 및 존 이탈 방지 가드 구현.

교훈: 프로젝트가 커질수록 CI/CD 권한 관리와 상태 초기화 로직의 중요성이 커진다. 특히 멀티테넌트(Chatbot) 환경에서는 CORS와 ESM/CJS 호환성을 사전에 체크하는 습관이 필요하다.