Board response anatomy

Board는 “지금부터 탈 때까지”를 한 장에 담습니다.

현재 차량, 현재 대기열, 정류장별 미래 예보를 한 시점에 고정한 스냅샷입니다. 화면에 필요한 값만 JSON에 두고 재현용 계산 정보는 서버 내부에 분리했습니다. 아래 장면의 요소를 선택하면 클라이언트가 실제로 받는 필드만 풀어서 보여줍니다.

현재 사실vehicles[]는 지금 관측된 차량 위치와 좌석입니다.
정류장별 미래stops[].nextArrival은 그 정류장에 도착할 때의 예보입니다.
정류장의 현재 줄stops[].queueEstimate는 차량 관측으로 계산한 실험적 대기열 추정입니다.
화면의 신뢰 표시freshnessexperimental이 낡음·실험 기능 여부를 설명합니다.
안양역 방면 →
실선 장면 현재 관측 점선 연결 차량과 정류장 예보의 참조 주황 강조 현재 선택한 응답 영역

가장 중요한 연결

현재 차량 한 대가 정류장 예보로 이어지는 법

vehicleRef가 같은 값을 가리키기 때문에 “어느 차량이 범계역의 다음 차량인지”를 프론트가 안전하게 연결할 수 있습니다.

현재 차량 배열vehicles[0].refvehicle-1
범계역 다음 차량stops[0].nextArrival.vehicleRefvehicle-1
사용자가 보는 결론expectedSeats · verdict7석 예상 · 여유

대기열은 서버 내부 입력으로 계산한 뒤 표시 결과만 Board에 넣습니다.

서버 내부 관측vehicle_observations마지막 해소 시각 추론
서버 내부 계산queue_estimates · profile유입률 × 경과 시간
Client Board 출력queueEstimate.display약 8~19명 · 10분 · 실험

SERVER INTERNAL · CLIENT JSON 아님

응답에서 뺀 값은 버린 게 아니라, 재현 가능한 내부 기록으로 옮겼습니다.

프론트는 아래 값을 몰라도 화면을 완성할 수 있습니다. 백엔드와 데이터 담당자는 Board ID로 발행본·예보·대기열 레코드를 연결해 원인을 추적합니다.

발행·캐시 provenance

published_boards.boardId published_boards.publishedAt · etag published_boards.expectedNextObservationAt

발행 지연, 조건부 조회, 수집 스케줄을 진단합니다. 공개 시각은 HTTP Last-Modified로만 나갑니다.

모델·학습 provenance

processing_runs.processorVersion predictions.algorithmVersion profile_snapshots.inputTo

같은 입력과 버전으로 예보를 재현하고 모델별 정확도를 채점합니다.

대기열 계산 provenance

queue_estimates.calculatedAt · clearingAt queue_estimates.arrivalRatePerMinute · clearingBasis queue_estimates.boardedSince · algorithmVersion · profileVersion

왜 과대·과소 추정됐는지 확인합니다. Client에는 결과와 표시 맥락만 남습니다.

Data Pipeline에서 내부 필드 전체 보기 →

상태 사전

영어 상태값은 화면에서 이렇게 해석합니다.

숫자 0과 정보 없음, 차량 없음과 학습 부족을 각각 다른 상태로 유지하는 것이 핵심입니다.

vehicles[].seat.kind

EXACT
정확한 잔여 좌석 수가 있음. remaining: 0은 만석.
CROWDEDNESS_ONLY
정확한 숫자 없이 여유·보통·혼잡만 알 수 있음.
UNKNOWN
좌석 정보 자체가 없음. 절대 0으로 바꾸지 않음.

nextArrival.kind

FORECAST
다음 차량과 도착 좌석 예보가 만들어짐.
NO_APPROACHING_VEHICLE
현재 이 정류장으로 접근하는 차량이 없음.
SEAT_DATA_UNAVAILABLE
차량은 있지만 좌석 원본이 없어 계산 불가.
INSUFFICIENT_PROFILE
좌석은 있어도 정류장 사이 승하차 학습 표본이 부족함.

verdict

ROOMY
여유. 여기서 기다려도 됨.
TIGHT
빠듯함. 줄 앞쪽에서 기다릴 필요가 있음.
UNLIKELY
탑승 가능성이 낮아 다른 선택을 고려.

freshness.state

FRESH
기대 수집 주기 안의 최신 관측.
STALE
마지막 보드는 있지만 예상보다 오래됨. 경고와 함께 표시.
OUT_OF_SERVICE
현재 운행 시간 밖. 정류장 구조는 유지.
UNKNOWN
신선도를 판단할 관측이나 기준이 없음.

queueEstimate.kind

ESTIMATE
차량 관측·마지막 해소 시각·시간대별 유입률로 현재 줄을 실험적으로 계산함.
UNAVAILABLE
지원 시간대 밖, 미지원 정류장, 해소 근거 부족 등으로 계산하지 않음. 0명이 아님.
RANGE
점추정 ±35%의 임시 표시 폭. 통계적 신뢰구간이 아님.
APPROXIMATE_MINIMUM
해소를 확인하지 못한 구간의 “약 N명 이상”. 보장된 하한은 아님.

전체 예시

이 장면을 한 번에 보내는 Board JSON

필요한 영역을 위에서 이해한 뒤 전체 응답을 보면, 각 덩어리의 역할이 분명해집니다.

전체 응답 펼쳐 보기