개인
대신물류 배차현황 챗봇
2026-01-01 — present
대신물류 배차현황 데이터를 Cheerio로 크롤링하고 카카오톡 챗봇 스킬서버와 Next.js 모바일웹으로 조회할 수 있는 서비스 — Clean Architecture + TSyringe DI, Express 5, Prisma SQLite, Traefik Blue-Green 무중단 배포
프로젝트 설명
물류 회사의 배차현황 데이터를 자동 수집하여 카카오톡 챗봇과 모바일 웹으로 실시간 조회할 수 있는 서비스이다. 백엔드는 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 통계 대시보드
담당 기능
- 자동 크롤링 — Cheerio + Axios로 배차현황 데이터 수집, node-cron으로 월~토 06:00~20:00 매시 정각 자동 동기화
- 카카오톡 챗봇 스킬서버 — 카카오 i 오픈빌더 연동, 노선코드·차량번호·도착지 검색, 일별 전체 현황 및 통계 조회
- REST API — 노선·차량·날짜별 검색 엔드포인트, 통계 조회 API, 수동 동기화 트리거
- 모바일 웹 — Next.js 기반 반응형 모바일 UI, TanStack Query 서버 상태 관리, Recharts 통계 시각화
- Blue-Green 무중단 배포 — Traefik 리버스 프록시, 자동 배포 스크립트(빌드→헬스체크→트래픽 전환→롤백)
- Clean Architecture — 도메인·애플리케이션·인프라 계층 분리, TSyringe DI 컨테이너, Value Object(LineCode, SearchDate) 패턴
깨달은 점
- 💡 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