본문으로 건너뛰기
개인 월~토 06:00~20:00 매시 크롤링 · Blue-Green 무중단 배포 · SQLite 단일 서버

대신물류 배차현황 챗봇

2026-01-01 — present

대신물류 배차현황 데이터를 Cheerio로 크롤링하고 카카오톡 챗봇 스킬서버와 Next.js 모바일웹으로 조회할 수 있는 서비스 — Clean Architecture + TSyringe DI, Express 5, Prisma SQLite, Traefik Blue-Green 무중단 배포

대신물류 배차현황 챗봇 project cover image

시스템 아키텍처

대신물류 배차현황 챗봇 architecture diagram

문제 해결 과정

1

물류 회사 배차현황을 웹사이트에서 수동 확인해야 하는 운영 비효율

해결 과정

Cheerio + Axios로 EUC-KR 인코딩 배차 데이터 크롤링, node-cron으로 월~토 06:00~20:00 매시 자동 동기화

결과

수동 조회 → 일 15회 자동 크롤링, 실시간 데이터 제공

2

현장 직원이 PC 없이 모바일로 배차 정보를 조회할 수단 부재

해결 과정

카카오 i 오픈빌더 스킬서버 프로토콜 직접 구현 + Next.js 반응형 모바일 웹 + Recharts 통계 대시보드 병행 제공

결과

카카오톡 챗봇 + 모바일 웹 이중 채널로 현장 즉시 조회 가능

3

크롤러/카카오 API/DB 등 외부 의존성 변경 시 비즈니스 로직까지 수정 필요

해결 과정

Clean Architecture로 도메인/애플리케이션/인프라 계층 분리, TSyringe DI 토큰으로 인터페이스 바인딩, Value Object 패턴으로 도메인 규칙 타입 수준 강제

결과

외부 의존성 교체 시 인프라 계층만 수정, 비즈니스 로직 무변경

4

수동 재시작 방식의 배포로 서비스 다운타임 발생

해결 과정

Traefik 파일 프로바이더 기반 Blue-Green 배포 설계, deploy.sh로 빌드 → 헬스체크 → YAML 재작성 → 트래픽 전환 자동화

결과

배포 다운타임 0초 달성, Docker 소켓 노출 없이 보안성 확보

프로젝트 설명

물류 회사의 배차현황 데이터를 자동 수집하여 카카오톡 챗봇과 모바일 웹으로 실시간 조회할 수 있는 서비스이다. 백엔드는 Clean Architecture와 TSyringe 기반 의존성 주입으로 도메인·애플리케이션·인프라 계층을 분리하고, Cheerio + Axios로 배차 데이터를 크롤링하여 Prisma SQLite에 저장한다. node-cron으로 월~토 오전 6시부터 오후 8시까지 매시 정각에 자동 동기화하며, 카카오 i 오픈빌더 스킬서버로 노선코드·차량번호·도착지 검색과 일별 통계 조회를 제공한다. 프론트엔드는 Next.js 모바일웹으로 TanStack Query 기반 데이터 조회와 Recharts 통계 시각화를 구현했다. Docker 환경에서 Traefik 리버스 프록시를 활용한 Blue-Green 무중단 배포 구조를 설계하고, 자동 배포 스크립트로 빌드→헬스체크→트래픽 전환→롤백까지 자동화했다.

주요 내용

  • Clean Architecture + TSyringe DI로 계층 분리 설계
  • Cheerio 크롤링 + node-cron 자동 동기화 (월~토 매시)
  • 카카오톡 챗봇 스킬서버 연동 (노선·차량·도착지 검색)
  • Traefik Blue-Green 무중단 배포 + 자동 배포 스크립트
  • Next.js 모바일웹 + Recharts 통계 대시보드

성과 지표

성과 지표 이전 이후
크롤링 주기 수동 조회 일 15회 자동 (자동화)
배포 다운타임 수동 재시작 0초 (Blue-Green)

기술 선택 근거

  • Clean Architecture + TSyringe DI: 크롤러·카카오 API·DB 등 외부 의존성 교체 가능성을 고려한 계층 분리, DI 토큰으로 인터페이스 바인딩
  • SQLite 선택: 단일 서버·읽기 위주 워크로드에서 PostgreSQL 대비 운영 오버헤드 제거, 파일 기반 볼륨 마운트로 Docker 이식성 확보
  • Traefik 파일 프로바이더: Docker 소켓 노출 없이 YAML 재작성으로 트래픽 전환, 보안성과 롤백 단순화 동시 달성

깨달은 점

  • Clean Architecture의 도메인·애플리케이션·인프라 계층 분리와 TSyringe DI 컨테이너를 적용하며, 비즈니스 로직과 외부 의존성(크롤러, DB, 카카오 API)의 결합도를 제거하는 설계를 학습
  • 카카오 i 오픈빌더 스킬서버 프로토콜을 직접 구현하며 챗봇 플랫폼의 요청·응답 규격과 시나리오 블록 연동 방식을 이해
  • Traefik 리버스 프록시 기반 Blue-Green 배포 구조를 설계하고 자동 배포 스크립트를 구축하며, 무중단 배포의 트래픽 전환·헬스체크·롤백 전략을 경험
  • Value Object 패턴(LineCode, SearchDate)으로 도메인 규칙을 타입 수준에서 강제하며, 원시 타입 남용을 방지하는 도메인 모델링 기법을 학습

기술 스택

TypeScript Express Next.js React Prisma SQLite Cheerio TSyringe TanStack Query Recharts Docker Traefik Tailwind CSS Vitest

관련 링크

  • live
  • github-fe