개념
왜 이 세 축만 비어 있는가
레슨 3의 5단계 절차를 신뢰성·유지보수성·유연성에 적용하면 대부분의 팀이 ②번(품질 요구 진술)에서 막힌다. 이유가 세 특성에 공통이다.
① 관측 창이 릴리즈보다 길다 "3개월 무장애"는 2주 시험 기간에 판정 불가
② 측정 주체가 QA가 아니다 가용성은 운영이, 복잡도는 개발이 본다
③ 판정 기준을 쓸 언어가 없다 "안정적이어야 한다"는 합격·불합격이 갈리지 않는다①②는 바꾸기 어렵다. 바꿀 수 있는 것은 ③ 이고, ③을 해결하면 ①②도 따라온다 — 판정 가능한 문장이 있으면 누가 언제 재는지가 정해진다.
판정 가능한 요구 문장의 여섯 칸
비기능 요구 문장이 시험 항목이 되려면 여섯 칸이 채워져야 한다.
| 칸 | 묻는 것 | 비면 생기는 일 |
|---|---|---|
| 주체 | 무엇이 | 범위 분쟁 |
| 조건 | 어떤 부하·환경에서 | 유리한 조건에서만 잰다 |
| 관측량 | 무엇을 세는가 | 값이 사람마다 다르다 |
| 임계값 | 얼마면 합격인가 | "측정했다"로 끝난다 |
| 측정 창 | 언제부터 언제까지 | 기간을 골라 값을 만든다 |
| 측정 방법 | 무엇으로 재는가 | 재현이 안 된다 |
측정 창과 측정 방법이 제일 자주 빈다. 이 둘이 비면 문장은 그럴듯한데 판정하려는 순간 논쟁이 된다.
용어 — 어느 판을 기준으로 쓰는가
모듈 30 레슨 2에서 확인한 대로 ISO/IEC 25010은 2023년 2판에서 특성 구성이 바뀌었다. 관련된 변화는 둘이다 — 이식성(Portability)이 유연성(Flexibility)으로 바뀌고 확장성이 신설됐으며(적응성·설치성·대체성 이름은 유지), 신뢰성의 성숙성(maturity)이 무결함성(faultlessness)으로 바뀌었다.
이 레슨은 2023판 이름을 기본으로 쓰되 2011판 이름을 괄호로 병기한다. 병기가 필요한 이유는 측정량 쪽에 있다 — ISO/IEC 25023:2016은 2011판 특성 이름 기준 이라 그 측정량을 인용하는 순간 "이식성 – 설치성" 표기와 마주친다. 문서에는 분류 기준 판과 측정량 기준 판을 각각 명시한다.
유지보수성은 이름도 구성도 그대로다 — 모듈성·재사용성·분석성·수정성·시험성 다섯이다.
신뢰성 — MTBF·MTTR 을 그대로 합격 기준으로 쓰지 않는다
신뢰성의 네 부특성은 서로 다른 질문이다.
| 부특성 | 질문 | QA 가 볼 수 있는 형태 |
|---|---|---|
| 무결함성(2011 성숙성) | 정상 운용에서 결함 없이 버티는가 | 요청 단위 오류율, 장기 실행 시험 |
| 가용성 | 필요할 때 쓸 수 있는가 | 가동률, 계획 정지 포함 여부 |
| 결함 허용성 | 결함·장애가 있어도 동작을 유지하는가 | 의존 구성요소 강제 중단 시 거동 |
| 복구성 | 실패 후 데이터·상태를 되돌리는가 | 복구 절차·백업 복원·RPO/RTO |
MTBF·MTTR 은 모듈 25 레슨 3의 25023 측정량 표와 모듈 37 레슨 1의 ITSM 지표로 이미 다뤘다. 정의를 아는 것과 합격 기준으로 쓰는 것은 다르다. 한계가 넷이다.
① 분모가 정의 나름이다 "고장"이 장애 등급 몇 등급부터인가, 부분 저하는 세는가
→ MTTR 시작점이 '발생'인지 '접수'인지로 값이 배 이상 달라진다 (모듈 37 레슨 1)
② 관측 창이 짧으면 무의미 2주에 고장 0건이면 MTBF 는 '∞'가 아니라 '모른다'
③ 출시 전에는 잴 데이터가 없다 운영 로그에서 나오는 후행 지표다
④ 평균이 분포를 가린다 대부분 5분인데 한 건이 8시간이면 평균은 괜찮아 보인다
→ p95·최대값을 함께 본다출시 전 시험에서는 MTBF 대신 관측 창 안에서 판정되는 대리 지표 를 쓴다.
| 쓰고 싶은 것 | 시험 기간 안에서 쓸 수 있는 형태 |
|---|---|
| MTBF 500시간 | 72시간 연속 부하 실행 중 처리 실패율 ≤ 0.01%, 메모리 사용량 증가 추세 없음 |
| 가용성 99.9% | 월 오류 예산 43분 기준. 시험 중 단일 구성요소 중단 시 영향 시간 ≤ 30초 |
| MTTR 30분 | 복구 절차 리허설 3회, 각 회차 복구 완료까지 ≤ 30분, 절차서만 보고 수행 가능 |
가운데 행이 중요한 전환이다. 가용성 목표는 그대로는 못 재지만 "단일 구성요소가 죽었을 때 영향 시간"으로 바꾸면 잴 수 있다. 장기 지표를 단발 사건의 거동으로 번역하는 것이 신뢰성 분석의 핵심이다.
복구성 시험 사다리 — 장애 주입 없이도 오늘 시작할 수 있다
"카오스 엔지니어링 도구가 없어서 복구성 시험을 못 한다"는 말이 나오는데, 사다리의 아래 세 칸은 도구도 권한도 필요 없다.
5단 운영 환경 무작위 장애 주입 권한·문화·관측이 모두 갖춰진 뒤
4단 스테이징에서 의존 구성요소 격리 네트워크 차단·프로세스 강제 종료
3단 단일 프로세스 재시작 후 거동 확인 재기동 중 요청은 어떻게 되는가
2단 백업에서 복원 리허설 실제로 복원해 본다. 시간을 잰다
1단 복구 절차 문서 검토 절차서를 읽고 실행 가능성을 따진다1단이 가장 저평가된 단계다. 복구 절차서를 리뷰 대상으로 놓고 레슨 2의 퍼스펙티브 기반 읽기를 — "야간에 혼자 당직 중인 주니어" 관점으로 — 적용하면 실행 불가능한 절차가 즉시 드러난다.
[복구 절차서에서 반복적으로 나오는 결함]
- 복원 대상 백업을 "최근 것"이라고만 쓰고 식별 방법이 없다
- 복구 중 들어오는 신규 요청을 어떻게 할지 없다
- 절차 중간에 "담당자에게 문의" 가 있다 (담당자가 장애 원인일 수 있다)
- 복구 완료를 무엇으로 판정하는지 없다 (레슨 1의 오라클 공백이다)
- 부분 복구 후 정합성 확인 단계와 롤백 실패 시 절차가 없다2단은 가장 자주 건너뛰고 가장 자주 실패하는 단계 다. 백업이 돌고 있다는 것과 복원된다는 것은 다른 사실이다. 리허설 한 번이 백업이 읽히는가·절차가 맞는가·RPO/RTO 가 지켜지는가를 함께 확인한다.
RPO(복구 시점 목표)·RTO(복구 시간 목표)는 여섯 칸 틀에 바로 들어간다.
나쁨: "장애 시 신속히 복구한다"
좋음: "주문 DB 는(주체) 스토리지 전체 손실 상황에서(조건) 마지막 정상 커밋 기준
15분 이내 데이터까지 복원되고(RPO), 복구 선언까지 60분 이내여야 한다(RTO).
분기 1회 복원 리허설로 확인하고(측정 창·방법), 복구 완료 판정은
대사 스크립트 전건 일치로 한다(오라클)."유지보수성 — QA 가 요구사항으로 만들 수 있는 부분은 따로 있다
다섯 부특성 중 모듈성·재사용성은 설계 품질이라 QA가 요구 문장으로 쓰기 어렵다. 코드 복잡도·중복률을 들고 가면 "그건 개발 내부 지표"라는 반응이 돌아오고, 그 반응이 틀리지 않다. QA 가 정당하게 요구할 수 있는 것은 분석성과 시험성 이다 — 둘 다 "우리가 일하려면 필요한 것"이라 근거가 명확하다.
| 부특성 | QA 가 요구할 수 있는 형태 | 근거 |
|---|---|---|
| 분석성 | 상관 ID 전파, 원인 식별 가능한 로그, 상태 조회 | 결함 재현 시간 |
| 시험성 | 상태 주입·시간 제어·의존 대체·결정론적 동작 | 케이스 설계 가능 여부 |
| 수정성 | 변경 영향 범위를 식별할 수단(추적성) | 회귀 범위 산정 |
시험성 요구는 구체적으로 쓸수록 힘이 있다. "테스트하기 쉽게 만들어 주세요"는 요구가 아니다. 요구 문장으로 바로 옮길 수 있는 목록은 이렇다.
[상태 제어] 임의의 주문 상태를 API 한 번으로 만들 수 있다 (UI 10단계 없이)
테스트 계정 데이터를 초기 상태로 되돌릴 수 있다
[시간 제어] 시험 환경에서 시각을 이동시키고, 배치를 수동 기동할 수 있다
[의존 대체] 외부 연동을 설정으로 목 서버로 바꿀 수 있다 (레슨 3 ③층의 전제)
랜덤·ID 생성 시드를 고정할 수 있다
[관측] 요청 하나를 상관 ID 로 전 구간 추적하고, 비동기 처리의 완료를
폴링 없이 확인할 수단이 있다이 목록은 개발 착수 전에 올려야 한다. 만들어진 뒤에 요구하면 "그건 리팩터링"이 되고, 설계 시점에 올리면 "그건 요구사항"이 된다.
나쁨: "시스템은 유지보수가 용이해야 한다" / "테스트 자동화가 가능하도록 설계한다"
좋음: "주문 도메인은(주체) 통합 시험 환경에서(조건) 문서화된 관리 API 로
10개 주문 상태 각각을 3초 이내에 생성할 수 있어야 하고(관측량·임계값),
릴리즈마다 해당 API 의 상태 커버리지를 점검한다(측정 창·방법)."
나쁨: "충분한 로그를 남긴다"
좋음: "결제 실패 응답에는 모든 실패 경로에서 상관 ID 와 실패 분류 코드가
포함되어야 하며, 실패 로그 표본 40건 중 95% 이상이 로그만으로
원인 분류가 가능해야 한다(통합 시험 종료 시 판정)."유연성(2011 이식성) — 설치·업그레이드·롤백은 왜 매번 빠지는가
적응성은 그나마 다뤄진다 — 모듈 30 레슨 3에서 확인한 대로 실무의 "호환성 테스트"가 표준의 적응성이다. 비는 것은 설치성과 대체성 이고 이유가 구조적이다.
① 시험 환경은 이미 설치된 상태에서 시작한다 → 설치 자체가 시험 대상이 안 된다
② 배포가 QA 범위 밖에 있다 → 배포 실패 시나리오에 케이스가 없다
③ 롤백은 "안 일어날 일" 로 취급된다 → 계획서에 한 줄 있고 시험된 적이 없다
④ 데이터 마이그레이션에 역방향이 없다
올리는 스크립트는 있고 내리는 스크립트는 없다
→ 코드는 롤백되는데 데이터는 못 돌아간다. 이게 진짜 사고다④가 롤백 사고의 대부분을 만든다. 모듈 4 레슨 6이 대규모 전환을 다룬다면 여기는 평시 릴리즈마다 반복되는 업그레이드·롤백 이다. 경로를 매트릭스로 만들면 한 줄이 한 항목이 된다.
| 경로 | 시험 조건 | 자주 나오는 결함 |
|---|---|---|
| N-1 → N | 직전 버전에서 올린다 | 기본 경로. 대개 여기만 시험한다 |
| N-2 → N | 한 버전 건너뛴다 | 중간 버전에서만 도는 마이그레이션이 누락된다 |
| 신규 설치 | 빈 상태에서 설치 | 초기 데이터·기본 설정이 업그레이드 경로와 다르다 |
| N → N-1 (롤백) | 올렸다가 되돌린다 | 신규 스키마로 쓰인 데이터가 구버전에서 읽히지 않는다 |
| 중단된 업그레이드 | 마이그레이션 중 강제 종료 후 재시도 | 부분 적용 상태에서 재실행이 깨진다 |
| 재설치·삭제 | 삭제 후 재설치 | 잔존 설정·데이터가 남아 동작이 달라진다 |
대체성은 "같은 목적의 다른 제품·다른 버전으로 갈아탈 수 있는가"다. QA 관점의 시험 조건은 데이터 이관 가능성과 병행 운영 가능성 두 가지로 내려온다.
나쁨: "무중단 업그레이드를 지원한다"
좋음: "서비스는(주체) N-1·N-2 두 경로에서(조건) 업그레이드 중 5xx 응답률이
0.1% 를 넘지 않아야 하며(관측량·임계값), 시작부터 완료까지 전 구간을
부하 상태에서 측정한다(측정 창·방법). 롤백 시에는 롤백 완료 후
업그레이드 중 생성된 데이터가 손실 없이 조회되어야 한다."세 특성을 한 표에 모은다
레슨 3의 추적표에 세 축을 얹으면 이렇게 된다. 특성 칸에 두 판 이름을 함께 적는다.
| ID | 특성 – 부특성 | 요구 문장(여섯 칸 충족) | 시험 방법 | 합격 기준 |
|---|---|---|---|---|
| NF-01 | 신뢰성 – 복구성 | 주문 DB RPO 15분 / RTO 60분 | 분기 복원 리허설 | 대사 전건 일치, 60분 이내 |
| NF-02 | 유지보수성 – 시험성 | 주문 10개 상태를 관리 API 로 3초 내 생성 | 상태별 생성 스크립트 | 10개 전부 성공 |
| NF-03 | 유연성(이식성) – 설치성 | N-1·N-2 업그레이드 중 5xx ≤ 0.1% | 부하 중 업그레이드 | 두 경로 통과 |
| NF-04 | 유연성(이식성) – 대체성 | 롤백 후 신규 데이터 조회 가능 | 롤백 리허설 | 손실 0건 |
실무에서 왜 필요한가
세 특성이 비어 있을 때의 손해는 릴리즈 당일에 나타난다. 롤백을 해 본 적이 없어서 되돌리다 새 장애가 나는 상황, 복구는 됐는데 그 사이 유실된 데이터를 아무도 판정하지 못하는 상황, 결함을 재현할 상태를 만들 방법이 UI 15단계뿐이라 하루가 가는 상황이 모두 여기서 온다.
계약·인증 쪽 이유도 있다. 공공·SI 제안서의 비기능 요구사항표에는 이 세 축이 반드시 들어가는데 문장이 대개 "안정적으로 운영되어야 한다" 수준이고, 검수 단계에서 증명을 요구받으면 그때부터 협상이 된다. 여섯 칸이 찬 문장을 제안 단계에 만들어 두면 검수 범위가 미리 정해진다.
시험성은 성격이 다르다. 다른 부특성이 제품의 품질이라면 시험성은 앞으로의 모든 시험의 비용 을 결정한다. 자동화 전환이 번번이 실패하는 팀은 도구 문제가 아니라 상태 제어·시간 제어 수단이 없는 경우가 대부분이다.