한강자리
21개 기록
기록
- 한강자리 시스템 개요 외부 데이터 수집부터 API, iOS 앱과 위젯까지 한강자리의 전체 데이터 흐름
- SwiftUI 앱과 WidgetKit의 공유 상태 SwiftUI 앱, WidgetKit, 캐시와 딥링크가 같은 공원 상태를 이어받는 구조
- FastAPI route를 얇게 둔 API 설계 화면용 응답 조립과 저장소 접근을 분리해 FastAPI route를 얇게 유지한 구조
- 기록은 Postgres에, 재생성 가능한 값은 Redis에 근거와 이력은 Postgres에 남기고 재생성 가능한 조회값만 Redis에 둔 기준
- API 밖에서 도는 worker와 CronJob 수집, 예측과 푸시 작업을 요청 경로에서 분리하고 중복 실행을 막은 방법
- 데이터 없음과 수집 실패를 구분하는 파서 공공데이터의 빈 응답과 파싱 실패를 구분하고 출처별 수집 정책을 관리한 방법
- 주차 예측에 confidence와 최신성을 함께 둔 이유 주차 현재값과 예측값을 구분하고 confidence와 최신성을 함께 표시한 이유
- APNs 전송 전에 알림 후보를 거르는 방법 알림 후보, 미발송 규칙, outbox와 APNs 결과를 분리해 추적한 푸시 구조
- 기록으로 남기는 배포 검사 결과와 배포 대상을 기록으로 남겨 같은 릴리스를 반복할 수 있게 만든 과정
- 오래된 데이터가 보일 때 확인할 순서 오래된 데이터가 보일 때 요청, API, worker와 출처를 차례로 확인하는 운영 절차
- WidgetKit을 위한 snapshot 저장 구조 앱이 만든 표시값을 App Group snapshot에 저장해 WidgetKit이 먼저 읽게 한 구조
- 첫 화면 값을 한 응답으로 묶기: home-summary 첫 화면의 주차, 나들이, 예측과 출처 상태를 한 번에 내려주는 API 계약
- source catalog와 ingestion run 출처별 수집 주기와 실행 결과를 기록해 데이터 없음과 수집 실패를 구분한 구조
- Redis cache에 응답 최신성을 남기는 방법 Redis hot cache, 마지막 성공 cache와 DB fallback으로 응답 최신성을 드러낸 방법
- 주차 예측의 confidence와 backtest 주차 baseline, 예측 범위, confidence와 backtest를 나눠 예측 근거를 표시한 방법
- 푸시 outbox와 suppression audit 원천 변화부터 미발송 판단, outbox claim과 APNs 결과까지 남기는 알림 감사 기록
- 공공데이터 번역 cache와 원문 보존 공공데이터 원문을 보존하면서 검수 번역과 생성 번역 cache를 순서대로 적용한 구조
- 위치 좌표를 단말에 두는 telemetry 위치 좌표를 단말에 남기고 가명 처리한 품질 신호만 제한적으로 전송한 telemetry 설계
- 미니PC 서버의 장애 확인 순서와 복구 기준 미니PC 서버에서 사용자 요청 경로를 추적하고 백업을 복구로 검증한 운영 기록
- 작은 iPhone을 위한 iOS 시각 QA 작은 iPhone에서 문장, 정보 밀도와 위계를 확인하도록 만든 iOS 릴리스 게이트
- App Attest로 검증한 것과 남은 공격 범위 App Attest, 단기 토큰과 request proof가 검증하는 범위와 남은 공격 경계