---
type: template
domain: product
role: Tech Lead·아키텍처
status: active
last-reviewed: 2026-07-27
---

# 비기능 요구·실패 설계

> NFR을 임계값으로 만들고 각 외부 의존·비가역 행동의 감지·복구·사람 개입을 설계한다. NFR 임계값은 **계약·요구사항정의서·SLA에서 도출하고 착수 전 발주사와 합의된 것만 검수 기준**이 된다 — "빠르게"는 검수할 수 없고, 사후에 들이대는 수치는 분쟁이 된다 ([[요구사항과 완료 조건]]).

## NFR 예산

| NFR ID | 범주 | 목표·임계값 | 조건·표본 | 측정·알림 | 실패 시 행동 | 계약 근거 | Owner |
|---|---|---|---|---|---|---|---|
| `{NFR-PERF}` | 성능 | `{p95/LCP 등}` | `{실운영 물량·발주사 환경}` | `{도구}` | `{축소·롤백}` | `{SRS·SLA 조항}` | `{역할}` |
| `{NFR-AVL}` | 가용성 | `{SLO — 유지보수 SLA와 정합}` | `{기간}` | `{도구}` | `{대응}` | `{값}` | `{역할}` |
| `{NFR-SEC}` | 보안·개인정보 | `{0건·발주사 보안 정책}` | `{범위}` | `{스캔·감사}` | `{차단}` | `{정책·규정}` | `{역할}` |
| `{NFR-COST}` | 비용 | `{건당·일 상한 — 운영비 부담 주체 확인}` | `{물량}` | `{원장·알림}` | `{circuit breaker}` | `{계약}` | `{역할}` |
| `{NFR-OBS}` | 관측 | `{로그·metric·trace}` | `{흐름}` | `{대시보드}` | `{조사}` | `{운영 이관 요건}` | `{역할}` |

> 임계값을 모르겠으면 발주사 현행 시스템 값·실운영 물량을 측정해 기준선으로 삼고, 그 수치를 발주사와 합의해 기록한다. 계약에 없는 성능 상향 요청은 CR 회부.

## 실패 모드

| Failure ID | 실패 지점·주입 | 감지 | timeout·retry 예산 | 사용자 결과 | 시스템 복구·폴백 | 사람 개입 | 테스트 |
|---|---|---|---|---|---|---|---|
| `FAIL-01` | `{발주사 연동 시스템 5xx·malformed}` | `{signal}` | `{초·횟수}` | `{오류·재시도}` | `{queue/fallback}` | `{조건·Owner — 발주사 창구 포함}` | `{TC}` |

## 중복·순서·부분 실패

| 상황 | 원하는 불변식 | 설계 | 보상·재처리 | 검증 |
|---|---|---|---|---|
| 같은 요청 2회 | `{중복 효과 없음}` | `{idempotency key}` | `{절차}` | `{테스트}` |
| 순서 뒤바뀜 | `{버전·순서 규칙}` | `{sequence/version}` | `{절차}` | `{테스트}` |
| 다단계 중간 실패 | `{정합 상태}` | `{saga/outbox/transaction}` | `{보상}` | `{테스트}` |
| 재기동·재처리 | `{데이터 손실 없음}` | `{checkpoint}` | `{절차}` | `{테스트}` |

## 비가역 행동·승인

| 행동 | 피해·범위 | 사전 검증 | 사람 승인 | 실행 증거 | 취소·보상 | 긴급 중단 |
|---|---|---|---|---|---|---|
| `{발송·결제·삭제·운영 배포}` | `{영향}` | `{dry-run·preview}` | `{누가·언제 — 운영 반영은 발주사 승인 절차 준수}` | `{감사 로그}` | `{방법}` | `{kill switch}` |

## 저하·복구 운영

| 조건 | Degraded mode | 기능 제한 | 데이터 보호 | 알림 | 정상 복귀 기준 |
|---|---|---|---|---|---|
| `{연동 시스템·provider 장애}` | `{read-only/cache/queue}` | `{항목}` | `{규칙}` | `{대상 — 발주사 운영 창구 포함}` | `{수치·기간}` |

> 저하·복구 절차는 운영(관리자) 매뉴얼·인수인계서에 그대로 실린다 — 하자보수 기간에 "장애 = 무조건 수행사 호출"이 되지 않으려면 발주사 운영자가 스스로 실행할 수 있는 수준으로 쓴다.

## 관측 최소 세트

| 신호 | 단위·차원 | 정상 범위 | 경고·차단 | 대시보드·런북 | PII 처리 |
|---|---|---|---|---|---|
| 에러율 | `{값}` | `{값}` | `{값}` | `{링크}` | `{마스킹}` |
| 지연 p95 | | | | | |
| 처리량·backlog | | | | | |
| 비용/건·일 비용 | | | | | |

## 검증·승인

- 실패 주입·복구 테스트: `{명령·결과}` — 테스트결과서 입력
- 롤백·재처리 연습: `{절차·날짜}`
- 미수행: `{없음 또는 이유·위험·발주사 합의 여부}`
- NFR 합의 근거: `{발주사 합의 회의·일자 — 착수 전 합의만 유효}`
- Security / Operations / QA 승인: `{판정·링크}`
