자동 장애 탐지 초안 양식 추가

- apistatus-draft.yml 파일 및 관련 로직 추가
- SnakeYAML 의존성 추가 및 안전한 yml 파싱 구현
- 자동 탐지 공지 제목·본문·타임라인 문구 분리 및 설정 관리
This commit is contained in:
Rinjae
2026-08-05 10:44:31 +09:00
parent 3bf8370d0c
commit 27fa79ddd9
5 changed files with 408 additions and 36 deletions
+53
View File
@@ -0,0 +1,53 @@
# ============================================================
# API Status 자동 탐지 초안 양식
#
# ApiStatusDetectionService 가 자동 생성하는 공지 제목/본문/타임라인 문구를 여기서 관리한다.
# 환경별로 갈리는 값이 아니므로 (/WEB-INF/properties 와 달리) 단일 파일이다.
#
# - 치환자는 {name} 형식. 정의되지 않은 키는 치환되지 않고 그대로 남는다.
# - 이 파일이 없거나 파싱에 실패하면 코드에 박힌 기본 문구로 동작한다 (초안 생성은 멈추지 않는다).
# - 게시되지 않은 GW 인터페이스는 이름·ID 를 노출하지 않고 gw-label 로 묶어 표기한다.
# ============================================================
draft:
# 개발자포탈에 게시되지 않은 GW 인터페이스 묶음 라벨 {count}=건수
gw-label: "GW 인터페이스 {count}건"
# ---- 공지 제목 ----
# {first}=첫 게시 API 명, {rest}=나머지 건수, {keyword}=장애|응답지연, {gw}=gw-label 적용 결과
title:
single: "[자동감지] {first} API {keyword}"
multi: "[자동감지] {first} 외 {rest}종 API {keyword}"
# 게시된 API 가 하나도 없을 때 (인터페이스 명을 쓰지 않는다)
hidden-only: "[자동감지] {gw} {keyword}"
# ---- 공지 본문 (HTML) ----
body:
# {summary}=탐지 사유(에러율 임계 초과 등)
lead-publish: "<p>{summary} 로 자동 감지된 장애입니다. 상세 내용은 확인 후 갱신될 수 있습니다.</p>"
lead-draft: "<p>{summary} 로 자동 감지된 장애입니다. 관리자 검수 후 정식 게시됩니다.</p>"
affected-heading: "영향 API"
# 게시 상태로 나가는 본문에 "작성 필요" 가 그대로 보이면 안 되므로 문구를 나눈다
filled-text: "확인 중입니다."
draft-text: "[작성 필요] {hint}"
# 관리자가 검수하며 채울 항목
sections:
- title: "발생 원인"
hint: "예) 백엔드 DB 커넥션 풀 고갈로 응답 지연 발생"
- title: "영향 범위"
hint: "예) 조회 API 전 구간 응답 실패, 등록/수정은 정상"
- title: "조치 내용"
hint: "예) 커넥션 풀 증설 및 장애 인스턴스 격리 완료"
- title: "예상 복구 시간"
hint: "예) 복구 완료 시 실제 시각으로 갱신"
# ---- 타임라인 ----
# {event}=ERROR_START 등, {summary}=탐지 사유
# {affected}=영향 API 요약 ("계좌조회, 이체 · GW 인터페이스 2건")
timeline:
detected: "{summary} 자동 감지 ({event})\n영향 API: {affected}"
api-added: "영향 API 추가 감지 ({event})\n{affected}"
redetected: "재탐지 신호 수신 ({event})"
escalated: "지연에서 장애로 격상 ({event})"
recovered-all: "전체 복구 확인 ({event})\n{affected}"
recovered-part: "일부 복구 확인 ({event})\n{affected}"