대신물류 배차 운영 원장
기획·FE·BE·배포·운영 단독
2026-01-01 — present
외부 배차 정보를 오늘 날짜로 수집해 노선·차량 검색과 통계를 제공하고, 수집 중복과 브라우저 데이터 경계를 분리한 운영 원장
검증된 결과
오늘 데이터 수집
오늘 날짜 · 월~토 06:00–20:00 · 정각 15개 slot
오전·지연 공개 재수집
이전: 14시 이전 전일 선택
replica 중복
singleton 15개 slot
singleton 복구
이전: replica별 15개 slot
브라우저 데이터 경계
차량정보 공개 · 내부 ID·credential URL 제외
고정 public route DTO
이전: 원천·내부 필드 구분 불명확
← 좌우로 스크롤해 시나리오 보기 →
문제 해결 과정
Why — 오전에도 원천에 오늘 데이터가 있었지만 14시 이전에는 전일을 선택하는 규칙 때문에 누락됐다
How — 기본 수집일을 오늘 날짜로 고정하고 singleton KST scheduler가 월~토 06:00–20:00의 정각 15개 cron slot에서 재조회하도록 변경했다
Result — 오전 데이터와 늦게 공개된 변경분을 정적 날짜·건수 문구 없이 후속 실행에서 반영할 수 있도록 변경
← 좌우로 스크롤해 시나리오 보기 →
Why — web replica마다 scheduler가 시작되어 동일 수집이 중복 실행됐다
How — 수집 책임을 web process 밖의 singleton KST scheduler 하나로 분리했다
Result — replica별 15개 cron slot 구성에서 singleton의 15개 slot으로 축소(프로세스 시작 시 1회 동기화 제외)
← 좌우로 스크롤해 시나리오 보기 →
Why — 운영 화면에 필요한 원천 필드는 제공하면서 내부·credential 필드는 차단해야 했다
How — method/path allowlist, 필수 필드 검증, 고정 출력 projection과 원천 URL contract로 운영 화면 필드만 통과시키고 내부 ID·알 수 없는 필드·credential-bearing tracking URL을 제외했다
Result — 고정 출력 projection과 원천 URL allowlist를 redirect·payload·배포 회귀 경계와 함께 검증
← 좌우로 스크롤해 시나리오 보기 →
시스템 아키텍처와 운영 경계
수집은 오늘 날짜를 각 정각에 독립 재조회해 crawler와 SQLite로 전달합니다. 조회는 Next.js proxy의 public route DTO branch에서 공개 필드만 투영한 뒤 Traefik과 Express active slot을 거칩니다. 인증 경로는 별도로 전달하고, 비활성 slot은 health check 통과 뒤 전환합니다.
← 좌우로 스크롤해 수집·조회·배포 흐름 전체 보기 →
운영 한계
Claim → 공개 근거
저장소 홈이 아니라 각 주장과 직접 연결되는 코드·테스트·CI를 제공합니다.
오늘 날짜 기본값
오전에도 오늘 날짜를 선택하는가?
KST singleton schedule
언제, 어느 timezone에서 실행되는가?
public route DTO 경계
무엇을 허용·차단하는가?
BE clean CI run
BE 저장소의 clean CI가 성공했는가?