발행·캐시 provenance
board_publication.publicationSeq
board_publication.publishedAt · etag
board_publication.observedAt · inService
발행 지연과 조건부 조회를 진단한다. 공개 시각은 HTTP Last-Modified로만 나간다.
Board response anatomy
현재 차량과 정류장별 미래 예보를 한 시점에 고정한 스냅샷이다.
보드는 kind로 갈린다 — 운행 중(OPERATING)이면 차량·예보·대기열을 담고,
운행 시간 밖(OUT_OF_SERVICE)이면 노선 정보와 마지막 관측 시각만 남는다.
화면에 필요한 값만 JSON에 두고 재현용 계산 정보는 서버 내부에 분리했다.
아래 장면의 요소를 선택하면 클라이언트가 실제로 받는 필드만 풀어서 보여준다.
activeVehicles[]는 지금 관측된 차량 위치와 좌석이다.stops[].nextArrival은 그 정류장 도착 시점의 예보다.stops[].queueEstimate는 실험적 대기 인원 추정이다. 추정 불가면 0명이 아니라 사유가 온다.observedAt·staleAt만 준다. 지금이 staleAt을 넘으면 낡음 경고를 띄운다.가장 중요한 연결
vehicleRef가 같은 값을 가리키므로 “어느 차량이 범계역의 다음 차량인지”를 프론트가 안전하게 연결한다. 예보가 불가한 SEAT_DATA_UNAVAILABLE·INSUFFICIENT_PROFILE에도 vehicleRef는 온다.
activeVehicles[0].refvehicle-1stops[0].nextArrival.vehicleRefvehicle-1expectedSeats · verdict7석 예상 · 여유대기열 추정은 실험 기능이다. 마지막 해소 후 경과 시간에 시간대별 유입률을 곱해 계산하고, 근거가 없으면 0명 대신 UNAVAILABLE 사유가 온다.
SERVER INTERNAL · CLIENT JSON 아님
프론트는 아래 값을 몰라도 화면을 완성한다. 백엔드와 데이터 담당자는 발행 번호(publicationSeq)로 발행 메타·예보·대기열 레코드를 연결해 원인을 추적한다.
board_publication.publicationSeq
board_publication.publishedAt · etag
board_publication.observedAt · inService
발행 지연과 조건부 조회를 진단한다. 공개 시각은 HTTP Last-Modified로만 나간다.
board_publication.modelVersion
board_publication.profileTrainedThrough
prediction_log.vehicleHash · fromSeats · horizon
같은 입력과 버전으로 예보를 재현하고 모델별 정확도를 채점한다.
board_queue.estimatedPeople · elapsedMinutes
board_queue.boundLow · boundHigh
stop_arrival_rate.rate · sampleSpans
왜 과대·과소 추정됐는지 확인한다. 유입률 λ는 따로 싣지 않고 점추정 ÷ 경과분으로 역산한다. Client에는 결과와 표시 맥락만 남는다.
상태 사전
숫자 0과 정보 없음, 차량 없음과 학습 부족을 각각 다른 상태로 구분한다. 서버가 만들 수 없는 값은 enum에 없다.
kind — 보드 두 형태activeVehicles[].seat.kindremaining: 0만 만석이고, 도착 시점의 0은 하차로 자리가 생길 수 있다.nextArrival.kindverdictqueueEstimate — UNAVAILABLE.reasonroute.status전체 예시
필요한 영역을 위에서 이해한 뒤 전체 응답을 보면 각 덩어리의 역할이 분명해진다. 운행 시간 밖이면 보드는 OUT_OF_SERVICE 한 형태로 줄어든다.