91. 품질 속성 시나리오 (Quality Attribute Scenario) - 모호한 요구의 구체화

⚠️ 이 문서는 시스템 설계 시 고객이 "서버가 좀 빨랐으면 좋겠고, 해킹에 안전하게 만들어주세요"라고 던지는 뜬구름 잡는 문과식 헛소리(비기능적 요구사항)를 듣고 아키텍트가 멘붕에 빠지는 것을 막기 위해, 이 모호한 요구를 6가지 육하원칙 뼈대(자극원, 자극, 환경, 대상, 응답, 응답 척도)로 강제로 갈기갈기 찢어 넣어서 "초당 1만 명이 결제를 누를 때 0.5초 이내에 99% 응답해야 한다"라는 냉혹하고 100% 측정 가능한 이과식 '수학적 테스팅 계약서(시나리오)'로 둔갑시키는 궁극의 시스템 설계 커뮤니케이션 툴을 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: 아키텍처(뼈대)를 쥐고 흔드는 3대 핵심 속성(성능, 가용성, 보안성)이 도대체 어느 정도 수준까지 버텨야 합격인지를 명확한 숫자로 못 박는 '검수용 체크리스트' 양식이다.
  2. 가치: "빠르다", "안전하다"라는 주관적 형용사를 쓰레기통에 버리고, 개발자와 사장님이 서로 오해 없이 "이 숫자를 넘으면 프로젝트 잔금을 준다"고 합의할 수 있는 피 튀기는 법적 방어막(SLA) 역할을 해낸다.
  3. 기술 체계: 단순히 요구사항을 한 줄로 적지 않는다. 1. 누가 찌르는가(자극원), 2. 무슨 짓을 하는가(자극), 3. 언제 찌르는가(환경), 4. 어디를 찌르는가(대상), 5. 시스템은 어떻게 방어하는가(응답), 6. 그 방어 속도와 확률은 몇 점인가(응답 척도)라는 6단계 공식을 기계적으로 채워 넣는다.

Ⅰ. 문과식 요구사항의 붕괴: "좀 빠르게 해주세요"의 저주

아키텍트에게 형용사는 독이다. 오직 명사와 숫자만이 건물을 짓게 한다.

  1. 비기능 요구사항(Quality Attributes)의 모호성:
    • 사장님: "새로 만드는 우리 쇼핑몰, 보안은 철통같이, 속도는 미친 듯이 빠르게, 서버는 안 죽게 잘 만들어봐!"
    • 아키텍트의 멘붕: '빠르다'의 기준이 1초인가 0.1초인가? '안 죽는다'의 기준이 1년에 5분 멈추는 건 봐주는 건가, 단 1초도 안 되는 건가?
    • 이 기준을 명확히 잡지 않고 대충 아키텍처 도면(DB 1대)을 그렸다가 나중에 사장님이 "왜 1만 명 들어오니까 느려져!"라고 화를 내면 개발사(SI)는 소송을 당하고 망한다.
  2. 시나리오 (Scenario)의 도입:
    • 이 참사를 막기 위해 카네기멜론 대학의 아키텍처 연구소(SEI)가 해결책을 냈다.
    • "요구사항을 소설 쓰듯 적지 마라! 무조건 우리의 '6칸짜리 양식표(시나리오)' 빈칸에 단어를 욱여넣어서 완벽한 하나의 문장으로 조립해 와라!" 이것이 품질 속성 시나리오의 탄생이다.

📢 섹션 요약 비유: 인테리어 업자(아키텍트)에게 "방음이 잘 되게 해주세요(모호한 요구)"라고 주문하면, 업자는 얇은 스펀지 하나 대충 바르고 돈을 받습니다. 나중에 층간 소음이 나면 "이 정도면 방음 잘 된 건데?"라며 싸움이 납니다. 품질 속성 시나리오 기법은 이 주문을 "밤 12시에(환경), 윗집 남자가(자극원), 맨바닥에서 줄넘기를 100번 뛸 때(자극), 우리 집 거실 중앙(대상)에서 데시벨 측정기를 켜면 30dB 이하(응답 척도)로 유지되어야 한다(응답)"는 완벽한 방어율 수치 계약서로 뜯어고쳐서, 나중에 딴소리 못하게 못을 박는 치밀한 방어막입니다.


Ⅱ. 시나리오의 6가지 뼈대 (해부학)

누가, 언제, 어디서 때리든 내 시스템은 이 숫자로 버텨내야 한다.

  1. 자극원 (Source of Stimulus) - "누가 찔렀나?":
    • 시스템에 펀치를 날리는 놈이다. 일반 사용자(고객)일 수도 있고, 디도스(DDoS) 공격을 하는 해커일 수도 있고, 고장 난 내부 서버 기계 자체일 수도 있다.
  2. 자극 (Stimulus) - "무슨 짓을 했나?":
    • 방아쇠가 당겨진 사건(Event) 그 자체다.
    • 예: "결제 버튼을 동시에 눌렀다(성능)", "서버 랜선을 가위로 잘라버렸다(가용성 장애)", "SQL 인젝션 코드를 로그인 창에 쑤셔 넣었다(보안성)".
  3. 환경 (Environment) - "어떤 상황에서 터졌나?":
    • 평화로운 대낮인지, 폭풍이 몰아치는 밤인지 상태를 명시한다.
    • 예: "새벽 3시 정기 점검 상태(오프라인)", "평상시 정상 트래픽 상태", "명절 블랙프라이데이 트래픽 10배 폭주 상태(과부하)".
  4. 대상 (Artifact / Target) - "어디를 맞았나?":
    • 시스템 전체가 맞았는지, 특정 모듈 하나만 맞았는지 정한다.
    • 예: "쇼핑몰 시스템 전체", "웹 서버 앞단 로그인 모듈", "오라클 DB 서버 1번 기계".
  5. 응답 (Response) - "내 시스템은 어떻게 반격/방어하는가?":
    • 자극을 맞았을 때, 내 아키텍처가 어떻게 대처할 것인지 서술한다.
    • 예: 성능(Performance) $\rightarrow$ "요청을 버리지 않고 순서대로 전부 처리한다."
    • 예: 가용성(Availability) $\rightarrow$ "장애를 즉시 감지하고 백업 서버로 스위칭(Failover)한다."
  6. 응답 척도 (Response Measure) - "그 방어의 성적(수학적 기준)은?" $\star$:
    • 가장 중요한 **도장의 핵심(숫자)**이다.
    • "그래서 그 처리를 0.5초 이내에 해낼 것", "그래서 백업 서버로 스위칭하는 데 10초 이내에 복구될 것", "디도스 패킷의 **99.99%를 즉시 차단(Drop)**할 것".

📢 섹션 요약 비유: 복싱 선수의 맷집(품질 속성) 테스트 계약서입니다. "상대 헤비급 선수(자극원)가 1라운드 체력이 만빵일 때(환경), 나의 왼쪽 턱주가리(대상)를 어퍼컷으로 풀 파워로 때린다(자극). 그때 나는 절대 기절하지 않고 쓰러진 뒤 다시 일어날 것인데(응답), 바닥에 쓰러진 지 무조건 카운트 5초 이내(응답 척도)에 비틀거리지 않고 두 발로 일어서야만 테스트 통과다!"라는, 인간의 맷집을 6가지 과학적 항목으로 해부해 버리는 냉혹한 내구성 측정표입니다.


Ⅲ. 3대 아키텍처 품질 속성 실전 시나리오 예시

이 종이 3장만 있으면 어떤 깐깐한 감리관(Auditor)도 기립 박수를 친다.

  1. 가용성 (Availability) 시나리오 (목표: 서버가 불타도 1초 만에 살아나라):
    • 자극원: 천재지변 (또는 하드웨어 결함)
    • 자극: 1번 메인 DB 서버의 디스크가 물리적으로 박살 나며 다운됨.
    • 환경: 평일 낮 2시, 고객 트래픽이 정상적으로 쏟아지는 피크 타임.
    • 대상: 메인 DB 서버 (Oracle).
    • 응답: 시스템(L4 로드밸런서)이 죽은 걸 감지하고, 즉시 대기 중이던 2번 백업 DB 서버로 연결 방향을 꺾어 스위칭(Failover)함.
    • 응답 척도: 이 스위칭 복구 작업이 무조건 5초 이내에 완료되어 고객의 500 에러를 0으로 만들 것.
  2. 성능 (Performance) 시나리오 (목표: 1만 명이 몰려도 렉 걸리지 마라):
    • 자극원: 일반 쇼핑몰 고객들
    • 자극: 이벤트 상품 결제 버튼을 동시다발적으로 무지막지하게 클릭함.
    • 환경: 블랙프라이데이 반값 세일 이벤트 (평소 트래픽의 10배 폭주 상태).
    • 대상: 결제 처리 API 서버 및 큐(Queue) 시스템.
    • 응답: 터지지 않고 대기표(Kafka Queue)를 발행하여 들어온 순서대로 전부 정상 결제 승인을 내려줌.
    • 응답 척도: 10배 폭주 상태에서도 99%의 고객 결제 처리가 1.5초 이내에 완료될 것.
  3. 보안성 (Security) 시나리오 (목표: 해커가 칼을 들어도 피 한 방울 안 나게 하라):
    • 자극원: 악의적인 블랙햇 해커 (또는 내부 불만 직원)
    • 자극: 관리자 권한을 훔치기 위해 로그인 창에 UNION SELECT 같은 SQL 인젝션 공격 코드를 1초에 100번 쏨.
    • 환경: 시스템이 외부 인터넷에 24시간 정상 노출된 오프라인 상태.
    • 대상: 로그인 인증 웹 서버(프론트) 및 뒷단 회원 DB.
    • 응답: 앞단 웹 방화벽(WAF)과 IPS가 악성 문자열 지문을 감지하고 패킷을 허공에 폐기(Drop)하며, 관제팀에 사이렌 이메일을 발송함.
    • 응답 척도: 공격 패킷의 **100%**를 DB에 닿기 전 0.01초 내에 차단하며, DB 내 개인정보 유출(탈취)은 **0 바이트(Byte)**로 원천 방어될 것.

📢 섹션 요약 비유: 사장님이 아키텍트에게 "건물 튼튼하게 잘 지었지?" 물어봤을 때, 멍청한 아키텍트는 "네 엄청 튼튼해요"라고 웃고 넘어갑니다. 일류 아키텍트는 가방에서 3장의 시나리오 서류를 꺼내 듭니다. "첫째, 진도 8.0 지진(자극)이 와도 5초 내에 기둥이 버팁니다(가용성). 둘째, 백화점에 10만 명이 밀려와도 에스컬레이터 대기 시간이 1분을 안 넘습니다(성능). 셋째, 도둑이 다이너마이트를 터뜨려도 금고 문은 절대 뚫리지 않고 즉시 경찰에 신고가 들어갑니다(보안성)." 이 세 장의 뼈 때리는 수학적 확약서(시나리오)야말로 아키텍처의 완성도를 증명하는 유일하고도 가장 날카로운 무기입니다.