// education

유스케이스와 UML

요구사항을 사용자의 말로 다시 쓰기

9장과 10장에서 책마루의 데이터 구조와 클래스를 설계했다. 하지만 이 작업은 대부분 개발자와 분석가의 시선에서 이루어졌다 — "결제 클래스는 이런 속성과 동작을 가진다"는 식이다. 정작 이 시스템을 쓸 손님과 직원 입장에서는 "나는 이 시스템으로 무엇을 할 수 있는가"가 더 궁금하다.

유스케이스(use case) 기법은 이 질문에 답하기 위한 도구다. 시스템을 사용하는 외부 주체(액터)가 시스템에 대해 갖는 각각의 용도를 유스케이스로 식별하고, 그 상호작용을 시나리오로 풀어 쓴다. 이렇게 만든 유스케이스는 네 가지 역할을 한다.

이해관계자의 활발한 참여가 중요한 이유도 여기에 있다. 유스케이스를 분석가 혼자 상상으로 채우면 실제 사용 패턴과 어긋난 시나리오가 만들어지기 쉽고, 그 오차는 프로젝트 후반에 가서야 드러난다.

이해관계자에서 액터로

4장에서 책마루 프로젝트의 이해관계자를 사장님(스폰서), 매장 직원(현업 사용자), 손님(고객), 결제대행사·택배사(외부 이해관계자)로 정리했다. 유스케이스 다이어그램의 **액터(actor)**는 이 이해관계자 중에서도 시스템과 직접 상호작용하는 외부 주체만을 가리킨다. 모든 이해관계자가 액터가 되는 것은 아니다 — 사장님은 프로젝트의 스폰서이지만, 일상적으로 시스템을 직접 조작하는 주체는 아니므로 액터 목록에서는 빠지거나, 매장 직원과 같은 계정을 공유하는 것으로 단순화할 수 있다. 책마루처럼 작은 조직에서는 사장님도 필요하면 직원 계정으로 시스템을 쓰는 경우가 흔하다 — 굳이 "사장님" 액터를 별도로 만들 필요는 없다.

책마루 온라인 주문 시스템의 액터를 정리하면 이렇다.

액터 역할
비회원 상품 조회·검색만 가능. 주문하려면 회원가입이 필요하다
회원 비회원의 기능을 모두 포함하고, 장바구니 담기·주문·결제까지 가능
매장직원 재고 등록·수정, 주문 확인, 포장 처리, 배달 상태 갱신
결제대행사(PG사) 카드결제 승인 요청을 처리하는 외부 시스템
택배사 동네 배달 권역 밖 주문의 배송 상태를 갱신하는 외부 시스템

여기서 회원은 비회원의 기능을 전부 포함하면서 추가 기능을 갖는다 — 이 관계는 액터 사이에도 일반화로 표현할 수 있다. 유스케이스 다이어그램에서는 비회원에서 회원으로 화살표를 그어(회원이 비회원을 일반화) 이 상속 관계를 나타낸다.

책마루 유스케이스 다이어그램을 텍스트로 그려보기

실제 다이어그램은 액터를 막대 인간 기호로, 유스케이스를 타원으로 그리고 그 사이를 선으로 잇지만, 여기서는 그 구조를 문장으로 풀어 설명한다.

비회원은 "상품목록조회"와 "상품검색" 두 유스케이스와 연결된다. 회원은 비회원을 일반화하므로 이 둘을 그대로 이어받고, 추가로 "장바구니담기", "주문하기", "회원정보수정"과 연결된다. 매장직원은 "재고등록", "재고수정", "주문확인", "포장처리", "배달상태갱신"과 연결된다.

유스케이스 사이에는 두 가지 특수한 관계가 등장한다.

10장에서 만든 결제 클래스의 일반화 구조는 유스케이스에서도 그대로 반복된다. "결제하기" 유스케이스가 상위에 있고, "카드결제하기"와 "계좌이체하기"가 그 하위 유스케이스로 일반화 관계를 맺는다 — 회원이 결제 수단을 고르면 그에 맞는 하위 유스케이스가 실행되는 식이다.

이 관계들을 모아 유스케이스 식별자 목록으로 정리하면 다음과 같다.

식별자 액터 유스케이스
UC-C01 비회원, 회원 상품목록조회
UC-C02 비회원, 회원 상품검색
UC-C03 비회원, 회원 상품상세조회
UC-M01 회원 장바구니담기
UC-M02 회원 주문하기
UC-M03 회원 카드결제하기
UC-M04 회원 계좌이체하기
UC-S01 매장직원 재고등록
UC-S02 매장직원 주문확인
UC-S03 매장직원 포장처리

유스케이스 명세서 작성법

유스케이스 다이어그램은 "무엇이 있는가"의 목록일 뿐, "그 유스케이스가 정확히 어떻게 진행되는가"는 담지 못한다. 이 세부 흐름을 문서로 풀어낸 것이 유스케이스 명세서다. 정해진 국제 표준 양식은 없지만, 실무에서 널리 쓰이는 구성은 이렇다.

명세서를 쓸 때 가장 흔히 저지르는 실수는 "어떻게(how) 구현할 것인가"까지 적어버리는 것이다. "결제 승인번호를 저장한다"까지는 무엇을 하는지에 대한 서술이지만, "승인번호를 VARCHAR(20) 컬럼에 저장한다"는 구현 방법이다. 유스케이스 명세서는 6장에서 강조한 "무엇과 어떻게의 분리" 원칙을 그대로 따른다 — 이 단계에서는 시스템이 무엇을 하는지만 적고, 어떻게 구현할지는 설계 단계(12장 이후)로 미룬다.

두 번째로 흔한 실수는 서술의 세밀함을 잘못 조절하는 것이다. 유스케이스 시나리오는 자세할수록 무조건 좋은 게 아니라, 고객이 읽고 이해할 수 있는 수준으로 쓰는 것이 중요하다. 책마루 사장님에게 "화면 왼쪽 상단의 드롭다운 메뉴를 클릭하면"까지 적힌 명세서를 보여주면 정작 "이 기능이 우리가 원했던 게 맞는지"를 판단하기보다 화면 배치를 두고 이야기가 흘러가 버린다. 화면 요소나 배치는 15장에서 다룰 사용자 인터페이스 설계의 영역이고, 유스케이스 명세서는 그보다 한 단계 위에서 "어떤 정보를 주고받는가"에 집중해야 한다.

책마루 "포장처리" 유스케이스 명세서 예시

두 번째 예시로 매장직원이 사용하는 유스케이스를 살펴보자. 손님 관점의 "주문하기"와 달리, 이번에는 매장 내부 업무를 담당하는 액터의 시나리오다.

개요: 매장직원이 결제완료 상태의 주문을 확인하고, 상품을 포장한 뒤 배달 또는 택배 발송 준비를 완료한다.

행위자: 매장직원 (주 행위자)

선행조건: 주문이 "결제완료" 상태이며, 아직 포장 담당 직원이 배정되지 않았다.

후행조건: 주문 상태가 "포장완료"로 바뀌고, 배달방법에 따라 배달 대기 목록 또는 택배 발송 목록에 등록된다.

기본흐름

  1. 매장직원이 매장 태블릿에서 결제완료 상태의 주문 목록을 확인한다.
  2. 매장직원이 포장할 주문을 선택하면, 시스템은 해당 주문에 자신을 담당 직원으로 배정한다.
  3. 시스템이 주문에 담긴 상품 목록과 각 수량을 보여준다.
  4. 매장직원이 상품을 실제로 포장하고, 포장이 끝난 상품을 하나씩 시스템에서 확인 처리한다.
  5. 모든 상품의 포장 확인이 끝나면, 시스템은 주문 상태를 "포장완료"로 바꾼다.
  6. 배달방법이 도보 배달이면 배달 대기 목록에, 택배 발송이면 택배 발송 목록에 해당 주문을 등록한다.

대안흐름

  • A1. 여러 매장직원이 동시에 일하는 경우: 2단계에서 이미 다른 직원이 배정한 주문은 목록에서 "배정됨"으로 표시되어 중복 배정을 막는다.

예외흐름

  • E1. 4단계에서 포장하려는 상품의 실제 재고가 시스템 수량과 맞지 않는 경우: 시스템은 불일치를 기록하고 매장직원이 사유(품절, 파손 등)를 선택하도록 안내한다. 이 경우 해당 주문은 사장님 확인이 필요한 상태로 표시된다.

이 명세서는 "주문하기"와 짝을 이루면서 하나의 주문이 손님의 관점(주문하기 → 결제하기)에서 시작해 직원의 관점(포장처리)으로 넘어가는 전체 흐름을 보여준다. 유스케이스를 액터별로 따로 작성하더라도, 이렇게 주문 상태(9장의 "주문상태" 속성, 10장의 상태 전환)를 기준으로 서로 이어보면 시스템 전체의 흐름이 끊기지 않는지 점검할 수 있다.

책마루 "주문하기" 유스케이스 명세서 예시

개요: 회원이 장바구니에 담긴 상품 중 일부 또는 전부를 선택해 주문을 확정한다.

행위자: 회원 (주 행위자)

선행조건: 회원으로 로그인한 상태이며, 장바구니에 상품이 한 개 이상 담겨 있다.

후행조건: 새 주문이 "결제대기" 상태로 생성되고, 결제하기 유스케이스로 이어진다.

기본흐름

  1. 시스템이 회원의 장바구니에 담긴 상품 목록과 각 상품의 수량, 가격을 보여준다.
  2. 회원이 주문할 상품을 선택한다.
  3. 회원이 배송지 정보(도보 배달 가능 지역이면 자동으로 안내)를 확인하거나 입력한다.
  4. 시스템이 선택된 상품의 재고를 확인한다.
  5. 시스템이 예상 결제 금액(상품 금액 + 배송비)을 보여준다.
  6. 회원이 주문을 확정하면, 시스템은 주문을 "결제대기" 상태로 생성하고 결제하기 유스케이스를 포함관계로 실행한다.

대안흐름

  • A1. 회원이 장바구니에서 일부 상품만 선택해 주문하는 경우: 선택되지 않은 상품은 장바구니에 그대로 남는다.

예외흐름

  • E1. 4단계에서 선택한 상품 중 재고가 부족한 상품이 있는 경우: 시스템은 해당 상품과 부족 수량을 보여주고, 회원이 수량을 조정하거나 해당 상품을 제외하고 진행하도록 안내한다.
  • E2. 3단계에서 입력한 배송지가 책마루의 배달 가능 지역 밖인 경우: 시스템은 택배 배송으로 전환하고 예상 배송비를 다시 계산해 5단계로 돌아간다.

이 명세서 하나만 봐도 여러 장에서 다룬 개념이 자연스럽게 모여드는 걸 볼 수 있다. 재고 확인은 9장의 "상품" 엔티티, 배송지 판단은 1장에서 예로 든 "배달 가능 지역 자동 확인" 요구사항, 결제하기로의 포함관계는 이번 장 앞부분에서 정의한 유스케이스 관계, 그리고 뒤이어 실행되는 결제하기 유스케이스는 10장에서 설계한 결제 클래스 구조와 맞닿아 있다.

핵심 정리

다음 장(12장, 소프트웨어 설계)에서는 지금까지 요구사항 분석 단계(6~11장)에서 만든 정보 모델·객체 모델·유스케이스를 실제로 구현 가능한 구조로 바꾸는 설계 단계로 넘어간다. 책마루 시스템을 어떤 하위 구성요소로 나누고, 각 구성요소가 어떻게 통신할지가 이제부터의 주제다.

← 이전객체지향 분석 기법 다음 →소프트웨어 설계