Functional Non-functional Requirement

3줄 요약

  • Functional Requirement는 시스템이 사용자에게 제공해야 하는 행동, API, 상태 전이를 정의한다.
  • Non-functional Requirement는 그 행동이 어느 정도의 latency, throughput, availability, durability, security, retention으로 동작해야 하는지 정의한다.
  • 좋은 요구사항 리뷰는 기능 목록을 API 계약, SLO, 제약, 가정, 검증 방법으로 바꿔 설계 선택의 기준을 만든다.

핵심 정리

  • 기능 요구사항은 “무엇을 할 수 있어야 하는가”를 다룬다.
  • 비기능 요구사항은 “얼마나 빠르게, 얼마나 많이, 얼마나 안정적으로, 어떤 조건에서 해야 하는가”를 다룬다.
  • 제약은 반드시 지켜야 하는 조건이고, 가정은 아직 검증되지 않은 임시 전제다.
  • API 계약은 성공 응답뿐 아니라 실패, 중복 요청, pending, 취소, 조회 가능 시점을 포함한다.
  • SLO는 설계 리뷰의 기준이며, 알림과 운영 지표로 이어져야 한다.
  • 요구사항이 모호하면 cache, queue, replica, shard 같은 선택의 옳고 그름을 판단할 수 없다.

판단 순서

  • 기능을 endpoint, caller, 입력, 출력, 상태 전이로 나눈다.
  • 기능별 성공, 실패, 중복, 취소, 재시도 시나리오를 적는다.
  • latency, throughput, availability, retention, security 요구를 숫자로 바꾼다.
  • 법규, 비용, 기술 스택, 일정처럼 바꿀 수 없는 제약을 표시한다.
  • 트래픽, 사용자 행동, 데이터 증가량처럼 불확실한 값은 가정으로 분리한다.
  • 가정을 검증할 방법과 검증 전 설계의 위험을 남긴다.

상세본 구성

  • 01. Functional Requirement 정리 상세.md는 기능 범위, API 계약, 상태 전이, 제외 범위를 다룬다.
  • 02. Non-functional Requirement 상세.md는 품질 속성을 SLO와 설계 선택으로 연결한다.
  • 03. Latency Throughput Availability 상세.md는 p95 budget, peak 처리량, 가용성 계산을 다룬다.
  • 04. Constraint Assumption 질문법 상세.md는 제약과 가정을 분리하고 검증 계획을 세우는 법을 다룬다.
  • 05. 요구사항 리뷰 템플릿 상세.md는 실제 설계 리뷰에서 빠지기 쉬운 항목을 템플릿으로 고정한다.

헷갈리는 지점

  • 기능 요구사항과 API 목록을 같은 것으로 보기 쉽다. API는 기능을 노출하는 수단일 뿐이다.
    • 핵심은 사용자 결과, 상태 전이, 실패 응답, 제외 범위를 함께 정의하는 것이다.
  • 비기능 요구사항을 “빠르게”, “안정적으로”처럼 형용사로 남기기 쉽다.
    • 핵심은 p95, QPS, error budget, 보존 기간, 복구 목표처럼 측정 가능한 기준으로 바꾸는 것이다.
  • 가정을 사실처럼 쓰기 쉽다. 설계가 깔끔해 보이기 때문이다.
    • 핵심은 가정임을 표시하고, 언제 어떤 데이터로 검증할지 정하는 것이다.

확인 질문

  • 확인 질문: Functional Requirement와 Non-functional Requirement의 차이는 무엇인가?
    • 답변: Functional은 시스템이 해야 하는 행동이고, Non-functional은 그 행동의 품질 기준과 운영 조건이다.
  • 확인 질문: 요구사항을 숫자로 바꾸는 이유는 무엇인가?
    • 답변: latency, throughput, availability 같은 기준이 있어야 cache, queue, replica, timeout 같은 선택을 평가할 수 있기 때문이다.
  • 확인 질문: 제약과 가정을 분리해야 하는 이유는 무엇인가?
    • 답변: 제약은 설계가 반드시 지켜야 하고, 가정은 검증 실패 시 설계를 바꿀 수 있어야 하기 때문이다.

참고 자료 기준