buildrisk-radar

설계 결정 기록 (ADR)

ADR 결정 상태
001 모듈형 모놀리스 (단일 Spring Boot, 패키지 경계) 채택
002 모든 수집·계산을 Spring Batch Job 으로 채택
003 재무 원천(fs_raw) 불변 + 표준화 재생성 채택
004 계정 매핑: account_id 우선, 계정명 보조 채택
005 내부 기준 시군구 코드 + 출처별 매핑표 채택
006 규칙 = Java 코드 + DB 파라미터(버전) 채택
007 경보 멱등키 (rule_code, rule_version, target_key, as_of) 채택
008 재시작 지점을 ExecutionContext 오프셋이 아닌 DB 상태에서 도출 채택 (구현 중 추가)
009 Spring Boot 4.1 · JdbcClient (JPA 미사용) 채택 (U-5, 구현 중 변경)
010 경계: V-World 우선, 없으면 SGIS 경계로 대체 채택 (U-3 대응)
011 Kafka/CDC · ClickHouse · Kubernetes 미도입 채택
012 API · worker 분리, DB 실행 요청 큐 (SKIP LOCKED · 부분 유니크 · advisory lock · worker 등록부 · 정상 종료) — 결과 기록 재시도 · 정리 주기의 마무리, 수동 정리는 멈춘 실행만 채택
013 세션 + CSRF · 역할 · 서비스 토큰 · 로그인 잠금 · 레이트리밋 · 감사 로그 · 단일 진입점 — 경로 판단은 인가와 같은 매처, IPv6 /64, 익명 가림은 허용 목록 채택
014 DB 최소 권한 — 마이그레이션 계정과 DML 전용 런타임 계정, 감사 로그 추가 전용 — 런타임 비밀번호는 SCRAM 검증값으로 채택
015 아파트 매매 실거래 — 거래량 · 해제율 · ㎡당 중위가, 월 파티션, R-R03 채택
016 공시 원문 구조화 — 수주 지역 · 채무보증 · PF, 원문 보관 + 파서 버전, R-C05 · R-X01 채택
017 경보 백테스트 — point-in-time 사건 연구, 수정주가 아님 대응 채택
018 관리 포트 분리 · Prometheus 지표 · ECS 로그 · Grafana 채택
019 추가 공공 API 중 쓴 것과 쓰지 않은 것 채택
020 지도 — 경계(버전 URL · immutable, 프로세스 안 gzip 바이트)와 지표 값 분리 채택
021 컨테이너 메모리 예산 · JVM 힙 60% · G1 명시 (부하 중 OOM 킬에서 발견) 채택
022 조회 캐시를 목록까지, 무효화는 모든 Job 이 끝나는 한 곳에서 — 대상 기업만 저장, 규칙 변경도 무효화, 같은 키 계산 하나로 채택
023 경보 성적표 — 실제 부실 사건 대비 정밀도 · 재현율 · 선행 기간 (규칙을 전체 기간에 point-in-time 재평가) 채택
024 PF 우발채무 — 정기보고서 부동산 PF 종합요약표 구조화(구간 스트리밍 · 두 가지 대조), R-C06 채택
025 알림 — 경보와 같은 트랜잭션의 outbox, 알림함 · 서명된 웹훅(SSRF 방어 · 저장 암호화 · 재시도) 채택
026 사업장 카드 — 지오코딩 없이 공시 주소의 법정동 · 지번을 실거래와 정확히 대조, 동 단위 시장 채택
027 근거 계보(경보 → 원천 재무제표 줄 · 매핑 규칙 · 실행) · CSV 내려받기(수식 주입 방어) · v1 호환 정책 — v1 안의 두 변경(D1 수동 정리 409 · D2 riskShare 필드 추가) 기록 채택
028 Next.js 16 으로(15 지원 종료) — 운영 빌드는 webpack(첫 로드 JS 104 KB, Turbopack 은 116 KB) 채택
029 백엔드를 기능 모듈 10개 × 계층(api · app · domain · data)으로 — 의존 방향 · domain 순수성 · 쓰기 SQL 위치를 테스트로 고정, 경보 전이는 순수 규칙 — 바깥 계층은 ops.* 에만 씀 채택
030 프론트엔드를 화면 · Hook · 순수 함수 · 기능별 API 모듈로 — 경계는 ESLint, 조회 응답은 경로에 묶음, 효과 안 setState 없음 — 상대 경로 · window/globalThis.fetch 우회도 막음 채택
031 AWS 데모 배포 — RDS(비-superuser 소유자, afterMigrate 는 비밀번호만 맞춤) · edge realip(앞단 Caddy) · 조회 전용 공개(화면도 로그인 안내 숨김 — 런타임 설정) · 덤프 복원 — 쿠키 Secure 를 고정하지 않은 이유 · 테스트 DB 를 PG 18.6 으로 채택