박도영 · Web Service Developer

서비스

sitePing — 설치형 실시간 상담 서비스

웹사이트에 설치 코드를 추가하면 방문자 상담창을 제공하고, 관리자 상담함에서 문의와 답변을 실시간으로 주고받는 서비스입니다.

프로젝트 미리보기: sitePing — 설치형 실시간 상담 서비스
운영 상태
운영 중
역할
서비스 기획·관리자 UI·설치형 위젯·Firebase 서버·권한·테스트·배포
문제
사이트별 상담 데이터와 권한을 분리하면서도 상담원의 작업 흐름을 유지해야 했습니다.
해결
서버·보안 규칙에서 권한을 검증하고, 선택한 상담·초안·재시도 요청을 목록 상태와 분리했습니다.
결과
외부 사이트의 문의부터 관리자 답변·첨부·상담 이력까지 하나의 서비스로 연결했습니다.

문제

웹사이트마다 상담 화면을 반복 제작하는 대신 공통 위젯을 설치하고, 상담원은 여러 문의를 오가며 답변·배정·고객 이력을 처리할 수 있어야 했습니다. 이 과정에서 사이트별 데이터 접근과 UI 상태 유지를 함께 설계했습니다.

제약

  • 외부 웹사이트의 스타일과 상담 UI가 서로 영향을 주는 범위를 줄여야 함
  • 로그인 계정과 운영 사이트를 구분하고 멤버의 소속·역할·활성 상태를 확인해야 함
  • 전송 실패와 계정 전환 뒤에도 상담 내용의 중복 저장이나 다른 계정의 상태 반영을 막아야 함

주요 사용자

  • 상담창을 설치할 웹사이트 운영자
  • 여러 사이트의 문의를 처리하는 관리자와 상담원

핵심 결정

  • 관리자·방문자 위젯·Vanilla TypeScript loader·서버·공통 스키마를 npm workspaces로 분리하고, loader가 버튼과 iframe을 생성하도록 구성
  • Firebase UID와 siteId·멤버십을 구분하고 Cloud Functions 및 Firestore·Storage Rules에서 사이트 소속·역할·상담방 소유권을 확인
  • 외부 페이지와 iframe 통신에서 정확한 origin·메시지를 보낸 window·nonce를 검증
  • 대기 상담을 시작할 때 목록에서 빠져도 대화가 사라지지 않도록 선택한 상담 ID를 URL에 유지하고 목록 조회와 선택 상담 구독을 분리
  • 상담별 초안을 현재 탭 메모리에 보관하고 계정 전환 시 분리·초기화하며, 재전송에는 같은 메시지 ID를 사용해 트랜잭션에서 중복 저장·사용량 중복 차감을 방지
  • 첨부 업로드 권한과 용량을 서버에서 예약하고, 메시지 저장 시 실제 Storage 객체의 크기·형식·소유권을 다시 검증

구현

  • 사이트 등록·허용 도메인·버튼 색상·위치·크기·여백·설명·아이콘 설정과 설치 코드 제공
  • 실시간 상담 검색·상태·읽음·담당자 배정과 고객 메모·태그·상담 이력 구성
  • 메뉴 이동과 전송 실패에도 답변·첨부를 유지하고 재시도할 수 있는 상담별 작성 흐름 구현
  • 이미지·PDF·텍스트 첨부와 다운로드를 제공하고 작은 이미지는 원본보다 확대하지 않도록 표시
  • 대화 기록만 스크롤해 입력창을 유지하고, 모바일에서는 목록과 대화를 전환하며 관리 화면에서는 상담용 빈 사이드바를 접는 레이아웃 구성
  • 기간별 상담 상태·평균 최초 응답 시간·만족도·상담원별 배정 및 종료 건수와 문서 버전·활성 상태·키워드 근거 검색 구현

검증 방법

  • 원 프로젝트의 테스트와 운영 기록에서 상담 상태 전환·초안 유지·첨부 취소 및 재선택의 회귀 검증을 확인했습니다.
  • Firebase Emulator의 사이트 간 접근·권한 규칙 검증과 Playwright의 양방향 상담·반응형 화면 검증 기록을 남겼습니다.
  • 운영 Chrome에서 관리자·방문자 첨부를 전송하고 다운로드한 파일의 크기·SHA-256을 원본과 대조한 기록이 있습니다.
  • 2026-10-21 포트폴리오 등록 시 운영 관리자 상담함과 위젯 설정을 직접 캡처했습니다. 방문자 위젯은 같은 날의 운영 검증 캡처이며, 모든 화면은 테스트 상담 데이터를 사용합니다.

결과

  • 설치 코드 추가부터 방문자 문의·상담원 답변·첨부 다운로드·상담 이력 확인까지 연결한 서비스를 배포
  • 기획·구현·수정에 Codex를 활용하고, 생성된 결과의 기존 구조·권한 경계를 검토한 뒤 재현 테스트와 운영 확인으로 보완

현재 개발 상태

맞춤 도메인에서 관리자·방문자 위젯·설치용 loader를 제공하며 기능을 보완하고 있습니다. 관리자 이용에는 회원가입과 로그인이 필요합니다.

한계와 다음 개선

  • 상담 요약·분류·답변 추천·고객 질문 응답을 위한 UI와 서버 인터페이스·API 어댑터는 준비했으며, 외부 AI 제공자를 연결한 운영 검증은 남아 있습니다.
  • 현재 문서 검색은 키워드 기반입니다. 임베딩·벡터 검색은 구현 범위에 포함하지 않습니다.
  • 답변 초안은 현재 탭의 메뉴 이동·전송 재시도 범위에서 유지하며, 새로고침 이후의 영구 보존은 제공하지 않습니다.

기술 기록과 근거

사용 기술

  • React
  • TypeScript
  • Vite
  • TanStack Query
  • React Hook Form
  • Zod
  • Vanilla TypeScript
  • Firebase Authentication
  • Cloud Firestore
  • Cloud Functions
  • Cloud Storage
  • Firebase Hosting
  • Vitest
  • Testing Library
  • Playwright
  • Firebase Emulator
  • npm workspaces

주요 화면

sitePing 실제 관리자 상담함 — 테스트 상담의 대화·첨부·고객 정보 화면
운영 관리자 상담함 · 테스트 상담 데이터 · 2026.10.21 캡처
sitePing 실제 사이트·위젯 설정과 앱 내 미리보기 화면 — 테스트 사이트
운영 위젯 설정과 앱 내 미리보기 · 테스트 사이트 · 2026.10.21 캡처
sitePing 방문자 상담창의 메시지·첨부 다운로드 화면 — 2026-10-21 운영 검증 당시 합성 QA 데이터 캡처
방문자 상담창 · 합성 QA 데이터 · 2026.10.21 운영 검증 기록의 실제 캡처