이전에 우리는 사용자의 관점에서 시스템의 기능을 이야기 형식으로 풀어내는
유스케이스 서술서
작성법에 대해 배웠습니다.
하지만 여러 개의 유스케이스들이 모여 시스템 전체의 기능 범위를 이루게 될 때, 이들을 한눈에 파악하고 서로의 관계를 이해하기란 쉽지 않습니다.
오늘은 이렇게 개별 유스케이스들을 모아 시스템이 제공하는 전체 기능의
큰 그림
을 보여주는 시각적 도구, 바로
UML 유스케이스 다이어그램(Use Case Diagram)
에 대해 자세히 알아보겠습니다.
유스케이스 다이어그램은 시스템이 제공해야 하는
기능적 요구사항
을 사용자의 관점에서 시각적으로 표현하는 UML 다이어그램 중 하나입니다.
시스템과 상호작용하는 외부 요소인
액터(Actor)
, 시스템이 제공하는 기능인
유스케이스(Use Case)
, 그리고 이들 간의 관계를 단순하고 직관적인 기호를 사용하여 나타냅니다.

유스케이스 다이어그램
시스템 범위 정의
시스템이 무엇을 하고 무엇을 하지 않는지, 즉 시스템의 경계를 명확하게 보여줍니다.
기능적 요구사항 식별 및 전달
시스템이 제공해야 할 주요 기능들을 한눈에 파악하고, 이를 다양한 이해관계자(고객, 개발자, 테스터 등)와 효과적으로 공유합니다.
사용자 관점 강조
시스템을 사용하는 액터의 입장에서 어떤 가치를 얻을 수 있는지에 초점을 맞춥니다.
시스템 컨텍스트 이해
시스템이 어떤 외부 요소들과 상호작용하는지 보여줌으로써 시스템의 전체적인 맥락을 이해하는 데 도움을 줍니다.
요구사항 분석 및 설계의 기초 제공
유스케이스 다이어그램은 상세 유스케이스 명세서 작성, 클래스 다이어그램 설계, 테스트 케이스 도출 등의 기초 자료로 활용됩니다.
유스케이스 다이어그램은 시스템의 복잡한 내부 로직보다는, 외부에서 바라본 시스템의 기능적 모습에 집중합니다.
유스케이스 다이어그램은 몇 가지 간단한 표준 기호로 구성되어 있어 배우고 사용하기 쉽습니다.
액터는 시스템
외부
에 있으면서 시스템과 상호작용하는 사람, 다른 시스템, 또는 장치 등을 의미합니다.
이전에 유스케이스 서술서에서 다루었던 바로 그 액터입니다.
표현
보통 막대기 사람(Stick Figure) 모양의 아이콘으로 표현됩니다.
이름
액터 아이콘 아래 또는 옆에 액터의 역할을 나타내는 이름을 명시합니다. (예: 회원
, 관리자
, 외부 결제 시스템
)
일반화 관계 (Generalization)
액터 간에도 상속 관계를 표현할 수 있습니다. 예를 들어, 일반 회원
과 VIP 회원
은 모두 회원
이라는 더 일반적인 액터로부터 역할을 물려받을 수 있습니다. (빈 삼각형 화살표 사용)

액터
유스케이스는 시스템이 특정 액터에게 제공하는 하나의 완전하고 의미 있는 기능을 나타냅니다.
액터가 시스템을 통해 달성하고자 하는 목표를 반영합니다.
표현
타원(Ellipse)으로 표현되며, 타원 안에 유스케이스의 이름을 간결한 동사구 형태로 기술합니다. (예: 도서 검색
, 장바구니 담기
, 결제 처리
)
위치
주로 시스템 경계 내부에 위치합니다.

유스케이스 (로그인, 상품 조회, 주문하기)
✅
3. 시스템 경계 (System Boundary) 🔗
시스템 경계는 개발하려는 시스템의 범위와 그 외부를 구분하는 선입니다.
일반적으로 큰 사각형으로 표현되며, 사각형의 상단이나 내부에 시스템의 이름을 명시합니다.
역할
:
- 시스템 내부에 포함되는 유스케이스들과 시스템 외부에 존재하는 액터들을 시각적으로 구분합니다.
- 프로젝트의 범위를 명확히 하는 데 도움을 줍니다.
표현
모든 유스케이스를 감싸는 형태의 사각형으로 그려집니다. 액터는 이 경계선 바깥에 위치합니다.
✅
4. 관계 (Relationships) 🔗
액터와 유스케이스, 그리고 유스케이스와 유스케이스 사이에는 다양한 관계가 존재할 수 있습니다.
➡️
액터와 유스케이스 간의 관계 (Association) 🔗
의미
액터가 특정 유스케이스를 사용(참여)함을 나타냅니다.
표현
액터와 유스케이스 사이에 실선(Solid Line)으로 연결합니다. 화살표는 선택 사항이며, 만약 사용한다면 정보의 흐름이나 유스케이스를 시작시키는 주체를 나타낼 수 있지만, 보통은 방향성 없는 실선으로 표현합니다.
유스케이스들은 서로 독립적일 수도 있지만, 때로는 다른 유스케이스의 기능을 포함하거나, 특정 조건에서 다른 유스케이스의 기능을 확장하는 관계를 맺기도 합니다.
이를 표현하기 위해
포함(Include)
관계와
확장(Extend)
관계가 사용됩니다.
포함 관계 <<include>>
(Include Relationship) 🔗
하나의 유스케이스가 실행될 때,
반드시
다른 유스케이스의 기능이 함께 수행되어야 하는 경우를 나타냅니다.
여러 유스케이스에서 공통적으로 사용되는 기능을 별도의 유스케이스로 분리하고, 이를 필요한 곳에서 포함시켜 재사용성을 높일 수 있습니다.
표현
:
- 기본 유스케이스(Base Use Case)에서 포함되는 유스케이스(Included Use Case)로 향하는 점선 화살표를 그립니다.
- 화살표 위에
<<include>>
라는 스테레오타입(Stereotype)을 표시합니다.
예시
:
- "글쓰기", "댓글쓰기", "프로필 수정" 유스케이스는 모두 "사용자 인증" 유스케이스를 포함할 수 있습니다. (글을 쓰거나 프로필을 수정하려면 반드시 로그인이 되어 있어야 하므로)
- "온라인 결제", "계좌 이체" 유스케이스는 "결제 수단 확인" 유스케이스를 포함할 수 있습니다.

<<include>> 관계
확장 관계 <<extend>>
(Extend Relationship) 🔗
하나의 유스케이스(기본 유스케이스)가 특정 조건(확장점, Extension Point)에서 다른 유스케이스(확장 유스케이스, Extending Use Case)의 기능을
선택적으로
수행할 수 있음을 나타냅니다.
기본 유스케이스는 확장 유스케이스 없이도 독립적으로 실행될 수 있지만, 특정 상황에서는 확장 유스케이스의 부가적인 기능이 추가될 수 있습니다.
표현
:
- 확장 유스케이스에서 기본 유스케이스로 향하는 점선 화살표를 그립니다.
- 화살표 위에
<<extend>>
라는 스테레오타입을 표시합니다.
- 선택적으로, 기본 유스케이스 내에 확장점(Extension Point)을 명시하고, 확장 관계가 어떤 조건에서 발생하는지 노트(Note) 등으로 설명할 수 있습니다.
예시
:
- "도서 주문" 유스케이스는 "할인 쿠폰 적용" 유스케이스에 의해 확장될 수 있습니다. (회원이 쿠폰을 가지고 있고 사용하기를 원할 경우에만 쿠폰 적용 기능이 실행됨)
- "게시글 검색" 유스케이스는 "상세 검색 조건 설정" 유스케이스에 의해 확장될 수 있습니다. (사용자가 일반 검색 외에 더 상세한 필터를 사용하고 싶을 경우)

<<extend>> 관계
포함(Include) vs. 확장(Extend) 구분 팁
필수성
포함 관계는 필수적
(항상 실행), 확장 관계는 선택적
(조건부 실행)입니다.
방향성
포함은 기본 유스케이스가 포함되는 유스케이스를 "사용하는" 느낌이므로 화살표가 포함되는 쪽으로 향하고, 확장은 확장 유스케이스가 기본 유스케이스에 "끼어드는" 느낌이므로 화살표가 기본 쪽으로 향합니다.
독립성
기본 유스케이스는 확장 유스케이스 없이도 완전하지만, 포함되는 유스케이스는 그 자체로 완전한 의미를 갖기보다는 다른 유스케이스에 의해 사용될 때 의미가 있는 경우가 많습니다.
🚀
유스케이스 다이어그램 작성 시 고려사항 및 팁 🔗
시스템 기능의 명확한 시각화
시스템이 제공하는 전체 기능 범위를 한눈에 보여줍니다.
이해관계자 간의 의사소통 촉진
비기술적인 사람도 쉽게 이해할 수 있는 형태로 시스템 기능을 전달하여 효과적인 소통을 돕습니다.
요구사항 분석의 출발점
상세 요구사항 정의, 테스트 케이스 작성, 설계 등의 기준으로 활용될 수 있습니다.
사용자 중심적 관점
항상 사용자의 입장에서 시스템을 바라보도록 유도합니다.
비기능적 요구사항 표현 불가
성능, 보안, 사용성 등과 같은 비기능적 요구사항은 직접적으로 표현하기 어렵습니다. (유스케이스 명세서에 보충)
세부 동작 흐름 표현 부족
유스케이스 내부의 상세한 로직이나 실행 순서는 보여주지 못합니다.
데이터 정보 부재
유스케이스 수행 시 사용되는 데이터에 대한 정보는 거의 나타나지 않습니다.
이러한 한계 때문에 유스케이스 다이어그램은 단독으로 사용되기보다는, 유스케이스 명세서, 활동 다이어그램, 시퀀스 다이어그램, 클래스 다이어그램 등 다른 모델링 기법들과 함께 사용될 때 그 효과가 극대화됩니다.
오늘은 시스템이 제공하는 기능과 사용자와의 상호작용을 한눈에 보여주는 UML 유스케이스 다이어그램에 대해 자세히 알아보았습니다.
액터, 유스케이스, 시스템 경계와 같은 핵심 구성요소를 이해하고, 유스케이스 간의 중요한 관계인 포함(
<<include>>
)과 확장(
<<extend>>
) 관계를 어떻게 표현하고 활용하는지 살펴보았습니다.
다음 시간에는 소프트웨어의 품질 요건(성능, 보안, 확장성 등)을 명세하고, 시스템 제약사항의 의미를 파악하며, 비기능 요구사항을 테스트하는 전략에 대해 알아보는
추가적인 설계 요구사항
에 대해 이야기 나누겠습니다.