한강자리
19개 기록
기록
- 한강자리 시스템 개요 수집, API, 캐시, 위젯이 사용자의 첫 화면을 나눠 맡는 구조
- SwiftUI 앱과 WidgetKit이 같은 상태를 읽는 법 SwiftData와 App Group snapshot으로 앱 밖의 화면까지 같은 값을 이어간 구조
- FastAPI route를 얇게 둔 API 설계 HTTP route는 요청과 응답만 맡기고 화면 조립은 use case로 옮긴 방식
- Postgres와 Redis를 나눈 기준 이력과 감사 기록은 남기고, 다시 만들 수 있는 응답은 cache로 둔 판단
- API 밖에서 도는 worker와 CronJob 수집, 예측, 푸시, 기준 데이터 동기화를 사용자 요청과 다른 생명주기로 처리했다
- 데이터 없음과 수집 실패를 구분하는 파서 공식 출처 등급, schema drift, ingestion run으로 빈 화면의 이유를 남겼다
- 예측값을 현재값처럼 말하지 않는 법 forecast worker, confidence, backtest로 도착 전 판단값의 불확실성을 표시했다
- 푸시 알림을 보내기 전에 줄이는 구조 구독 설정, 조용한 시간, 최신성, 감사 기록으로 발송 후보를 걸렀다
- 배포를 기억이 아니라 기록으로 남기는 법 테스트, 이미지, GitOps 상태, migration 순서를 반복 가능한 릴리즈 경로로 맞췄다
- 오래된 데이터가 보일 때 확인할 순서 엣지, API, worker, cache, DB를 나눠 지연 원인을 좁힌 기준
- WidgetKit을 위한 snapshot 저장 구조 앱 밖에서 실행되는 위젯이 마지막 표시값과 갱신 상태를 안전하게 읽게 했다
- home-summary API로 첫 화면을 묶기 주차, 나들이, 예측, 출처 상태를 한 응답에 담아 앱과 위젯의 첫 값을 맞췄다
- source catalog와 ingestion run 수집 계획과 실행 결과를 나눠 출처별 최신성과 실패를 설명했다
- Redis hot cache와 stale fallback 빠른 응답과 마지막 성공값을 분리해 오래된 값을 최신처럼 보이지 않게 했다
- 주차 예측에 confidence를 붙인 이유 p10, p50, p90, risk, backtest로 예측을 하나의 정답처럼 보이지 않게 했다
- 푸시 outbox와 suppression audit 보낸 알림과 보내지 않은 알림의 이유를 같은 기록으로 남겼다
- 공공데이터 번역 cache와 원문 보존 UI 문구, 검수 번역, 기계 번역, 한국어 fallback을 분리했다
- 위치 좌표를 서버로 보내지 않는 telemetry 로그인 없는 앱에서 작동 상태만 보고, 수집하지 않을 데이터를 먼저 정했다
- 미니PC 서버를 실제 서비스처럼 운영하기 사용자 요청 경로, GitOps 상태, 관측, 백업을 나눠 다룬 회고