[전통적인 방법론] 폭포수(Waterfall) 모델 - 3. 2단계 – 설계 (System Design) (1. 시스템 설계 개요)

2025. 3. 12. 15:40개발/개발 방법론

1. 시스템 설계 개요

시스템 설계(System Design)는 소프트웨어 개발에서 요구사항을 기반으로 시스템의 구조와 동작을 정의하는 과정입니다.
이 단계에서는 시스템 아키텍처를 결정하고, 데이터 모델링 및 UML 다이어그램을 활용하여 상세 설계를 수행합니다.

이 문서에서는 시스템 설계 개요, 아키텍처 설계와 상세 설계의 차이, 데이터 모델링 및 UML 다이어그램에 대해 상세히 정리하겠습니다.


1️⃣ 시스템 설계 개요

시스템 설계는 요구사항 분석 단계에서 정의된 내용을 기반으로, 실제 구현이 가능하도록 설계하는 과정입니다.

📌 시스템 설계의 목표
소프트웨어의 구조와 흐름을 명확히 정의
효율적인 데이터 흐름과 저장 방식을 설계
확장성과 유지보수성을 고려한 시스템 아키텍처 구성
개발팀이 구현할 수 있도록 명확한 지침 제공

📌 시스템 설계 주요 단계

단계  설명
아키텍처 설계 (High-Level Design, HLD) 시스템의 전체 구조를 정의
상세 설계 (Low-Level Design, LLD) 개별 모듈과 데이터 흐름을 세부적으로 설계
데이터 모델링 데이터베이스 구조를 설계
UML 다이어그램 작성 시스템의 동작 및 관계를 시각적으로 표현

2️⃣ 아키텍처 설계 vs 상세 설계

시스템 설계는 크게 아키텍처 설계(High-Level Design, HLD)상세 설계(Low-Level Design, LLD)로 나뉩니다.

🔹 아키텍처 설계 (High-Level Design, HLD)

📌 개요
아키텍처 설계는 시스템의 전체적인 구조를 정의하는 과정입니다.
소프트웨어의 구성 요소, 모듈 간의 관계, 데이터 흐름, 주요 기술 스택 등을 결정합니다.

📌 주요 특징
시스템의 전반적인 구조 정의 (예: 클라이언트-서버 모델, 마이크로서비스 구조 등)
모듈 간의 인터페이스 및 데이터 흐름 정의
보안, 성능, 확장성을 고려한 설계

📌 아키텍처 설계 예시

  • 모놀리식 vs 마이크로서비스 아키텍처
  • MVC(Model-View-Controller) 패턴 적용 여부
  • API 및 데이터베이스 연동 방식

📌 예제: 전자상거래 시스템의 아키텍처 설계

1. 사용자 → 웹 애플리케이션 (React, Angular)
2. 웹 애플리케이션 → 백엔드 서버 (Spring Boot, Django, Node.js)
3. 백엔드 서버 → 데이터베이스 (MySQL, MongoDB)
4. 백엔드 서버 → 외부 결제 시스템 (Stripe, PayPal API)

🔹 상세 설계 (Low-Level Design, LLD)

📌 개요
상세 설계는 개별 모듈, 클래스, 데이터 흐름, 알고리즘 등을 정의하는 과정입니다.
아키텍처 설계에서 정의한 구조를 바탕으로 구현 가능한 코드 수준의 설계를 진행합니다.

📌 주요 특징
클래스 다이어그램, 시퀀스 다이어그램 활용
데이터베이스의 테이블 구조 및 관계 정의
API 요청/응답 설계 및 상세 비즈니스 로직 설계

📌 상세 설계 예시

  • 로그인 기능의 상세 설계
  • 주문 생성 및 결제 프로세스 설계
  • 데이터베이스 트랜잭션 관리

📌 예제: 전자상거래 시스템의 상세 설계

1. 사용자가 로그인하면 JWT 토큰을 생성
2. 장바구니에 상품을 추가하면 데이터베이스에 저장
3. 결제 시 재고 확인 후 주문 정보 저장
4. 주문 완료 후 이메일 알림 전송

3️⃣ 데이터 모델링과 UML 다이어그램

🔹 데이터 모델링

📌 개요
데이터 모델링(Data Modeling)은 소프트웨어가 다룰 데이터를 논리적, 물리적으로 설계하는 과정입니다.
주로 ERD(Entity-Relationship Diagram)를 사용하여 데이터베이스 구조를 정의합니다.

📌 주요 개념
개체(Entity) – 테이블 (예: 사용자, 제품, 주문)
속성(Attribute) – 컬럼 (예: 사용자 ID, 이메일, 가격)
관계(Relationship) – 외래키(Foreign Key) 연결 (예: 사용자-주문 관계)

📌 예제: 전자상거래 시스템의 ERD

[사용자 테이블]
- user_id (PK)
- name
- email
- password

[주문 테이블]
- order_id (PK)
- user_id (FK)
- order_date
- total_price

📌 ERD 예시

사용자 (User) --- 주문 (Order)  
1 : N 관계 (한 사용자는 여러 개의 주문을 가질 수 있음)

🔹 UML 다이어그램

UML(Unified Modeling Language) 다이어그램은 소프트웨어 시스템의 구조와 동작을 시각적으로 표현하는 도구입니다.

📌 주요 UML 다이어그램 종류

다이어그램  설명
클래스 다이어그램 클래스 간의 관계 및 구조 정의
시퀀스 다이어그램 객체 간의 상호작용 및 데이터 흐름 표현
유스케이스 다이어그램 사용자의 행위와 시스템 간의 관계
상태 다이어그램 특정 객체의 상태 변화를 표현

📌 예제 1: 전자상거래 시스템의 클래스 다이어그램

[User]
- user_id
- name
- email
- password

[Order]
- order_id
- user_id
- order_date
- total_price

관계: User (1) → (N) Order

📌 예제 2: 로그인 프로세스의 시퀀스 다이어그램

사용자 → 로그인 요청 → 웹 서버
웹 서버 → 데이터베이스 조회 → 응답 반환 (성공 또는 실패)
웹 서버 → JWT 토큰 발급 → 사용자

📌 결론

📌 시스템 설계는 소프트웨어의 구조와 흐름을 정의하는 중요한 과정으로,
📌 아키텍처 설계는 시스템 전체 구조를, 상세 설계는 모듈과 데이터 흐름을 정의합니다.
📌 데이터 모델링을 통해 데이터베이스 구조를 설계하며, UML 다이어그램을 활용하여 시스템을 시각적으로 표현할 수 있습니다.
📌 체계적인 시스템 설계는 유지보수성을 높이고, 성능 최적화 및 확장성을 고려한 개발이 가능하게 합니다. 🚀