ADR-002 LLM 원인분석 = Claude API HTTP Gateway
Superseded (2026-07-06) — LLM 원인분석을 제거하고 텔레메트리 원지표(Prometheus/Loki/Tempo 조회 결과)를 알림 본문에 직접 첨부하는 방향으로 대체됨. 본 ADR의
IncidentAnalysisGateway/ClaudeClient/LlmProperties결정은 폐기한다. 아래 본문은 이력으로 보존한다.
Status
Superseded (2026-07-06) — LLM 원인분석 제거, 텔레메트리 원지표 첨부로 대체. (원: Accepted 2026-07-03, PRD Open Q2 해소)
Context
알림 발송 전 LLM이 Prometheus/Loki/Tempo 텔레메트리를 상관분석해 에러 유형·원인·해결책을 구성해야 한다(FR-4/FR-5). 코드베이스에 LLM SDK 의존성은 없고, 외부 API는 domain Gateway interface + infra 구현 + RestClient 패턴이 정착돼 있다.
Decision
domain.alerting.IncidentAnalysisGateway interface를 정의하고 infrastructure.alerting.IncidentAnalysisGatewayImpl이 Claude API를 RestClient로 호출해 구현한다. Client는 GatewayImpl에만 DI한다. 모델은 최신 Claude(예: claude-fable-5) 가정, API 키는 ALERTING_LLM_API_KEY 환경변수.
Alternatives
- LangChain/LLM SDK 프레임워크 — 단일 프롬프트 1회 호출에 프레임워크·의존성 과함.
- 로컬 LLM(ollama 등) — 8GB 제약·품질 저하. 호출이 저빈도(쿨다운으로 신호당 15분 1건)라 상용 API 비용이 미미해 이점 없음.
Rationale
- 기존 외부 API 구조(domain Gateway + infra 구현, Client는 GatewayImpl에만)와 정합.
- SDK 의존성 없이 HTTP 호출. 키는 환경변수(비커밋).
- 실패 시 도메인이
IncidentAnalysis.fallback()으로 폴백 결정(FR-8) — 게이트웨이는 예외만 던진다.
Consequences
ExternalRestClientFactory의 read timeout(5초)은 LLM에 부족 → GatewayImpl이 자체 긴 타임아웃 RestClient를 구성(공유 팩토리 미변경).- 프롬프트·모델·타임아웃은 config로 조정 가능.
- 비용·레이트리밋 관측은 ⑤ 대시보드 실패율 지표로.