표시보다 어려운 것은 중복·복구·계약 불일치였습니다.
변경 신호형 지도는 데이터를 그리는 것만으로 끝나지 않습니다. 같은 사건의 중복 적재, 연결 단절 사이의 누락, 서버와 클라이언트 타입의 불일치가 사용 경험을 먼저 무너뜨릴 수 있습니다.
USGS 최근 24시간 지진 피드를 수집·정규화하고, REST 스냅샷과 변경 사건만 알리는 WebSocket 신호로 3D·2D 지도에 연결한 풀스택 프로토타입입니다.
변경 신호형 지도는 데이터를 그리는 것만으로 끝나지 않습니다. 같은 사건의 중복 적재, 연결 단절 사이의 누락, 서버와 클라이언트 타입의 불일치가 사용 경험을 먼저 무너뜨릴 수 있습니다.
source와 external_id 기반 upsert, sequence 이후 REST catch-up, FastAPI → OpenAPI → TypeScript 자동 검증을 하나의 수직 슬라이스 안에서 연결했습니다.
위 수치는 로컬 및 공개 CI 검증 결과입니다. 실제 사용자 트래픽, 프로덕션 가용성이나 운영 성능을 의미하지 않습니다.
Cycle 02의 로컬 측정에서 응답 스냅샷이 약 45KB여서 API 복잡도를 먼저 늘리지 않았다. 시간·규모·깊이 상태는 URL에 보존해 공유와 새로고침을 같은 경계로 처리했다.
승격 기준 · gzip 250KB 또는 계산 p95 50ms 초과WebSocket에는 사건 본문 대신 ID·operation·sequence·updated_at 변경 메타데이터만 전달한다. 연결이 끊기면 마지막 sequence 이후의 변경을 REST로 복구한다.
REST snapshot + compact WebSocket signalFastAPI를 REST 계약의 유일한 원본으로 두고 OpenAPI 스냅샷과 TypeScript 타입을 생성한다. 어느 한쪽만 바뀌면 로컬과 CI가 실패한다.
5 paths · 11 schemas · 446 generated LOCuv.lock에 직접·전이 의존성과 해시를 고정했다. Python 3.12와 3.13에서 같은 계약과 테스트를 실행하고 컨테이너도 같은 lock을 소비한다.
uv 0.12.0 · Python 3.12 / 3.13최근 24시간 지진 탐색이라는 가장 얇은 수직 슬라이스로 사용자 동선을 먼저 확인했다.
중복 수집, 재연결 누락, 계약 불일치를 화면보다 먼저 닫아야 할 실패 경로로 정했다.
수집·타입 생성·잠금 설치·테스트·CI 검증을 반복 가능한 명령과 파이프라인으로 만들었다.
실제 결함과 보류 범위를 숨기지 않고 수정 결과, 실행 링크, 다음 판단 기준과 함께 기록했다.