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

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

2. 시스템 아키텍처 설계

시스템 아키텍처 설계(System Architecture Design)는 소프트웨어의 구조를 정의하고, 효율적으로 동작하도록 설계하는 과정입니다.
이 단계에서는 모듈화 설계 및 계층 구조, 시스템 아키텍처 패턴(MVC, 클라이언트-서버 등)을 고려하여 설계를 수행합니다.


1️⃣ 시스템 아키텍처 설계 개요

📌 시스템 아키텍처 설계란?
✅ 소프트웨어의 구성 요소(모듈)와 관계를 정의
✅ 개발, 유지보수, 확장성을 고려한 효율적인 구조 설계
비즈니스 로직과 데이터 흐름을 체계적으로 설계하여 성능 최적화

📌 시스템 아키텍처 설계의 목표
코드의 재사용성 증대 (중복 코드 최소화)
유지보수 및 확장 용이 (기능 추가 및 수정이 쉬움)
성능 최적화 (불필요한 연산 최소화)
보안성 강화 (데이터 흐름과 접근 제어 고려)


2️⃣ 모듈화 설계 및 계층 구조

🔹 모듈화 설계(Modular Design)

📌 모듈화(Modularity)란?
소프트웨어를 독립적인 기능 단위(모듈)로 나누어 설계하는 방식
각 모듈은 재사용 가능하며, 특정 기능을 수행하도록 설계됨.

📌 모듈화의 장점
코드의 재사용성 증가 – 동일한 기능을 여러 곳에서 사용 가능
유지보수성 향상 – 특정 모듈만 수정 가능 (다른 모듈에 영향 없음)
병렬 개발 가능 – 여러 개발자가 동시에 작업할 수 있음

📌 모듈 설계 시 고려할 요소
단일 책임 원칙 (Single Responsibility Principle, SRP) – 하나의 모듈은 하나의 역할만 수행
느슨한 결합 (Loose Coupling) – 모듈 간 의존성을 최소화
높은 응집도 (High Cohesion) – 하나의 모듈 내에서 관련 기능이 밀접하게 연결

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

1. 사용자 관리 모듈 (회원가입, 로그인, 프로필 수정)
2. 상품 관리 모듈 (상품 등록, 수정, 삭제)
3. 주문 관리 모듈 (장바구니, 결제 처리, 주문 내역 조회)
4. 결제 모듈 (결제 API 연동, 결제 검증)

각 모듈이 독립적으로 동작하며, 서로 최소한의 의존성을 가짐


🔹 계층 구조 설계(Layered Architecture)

📌 계층 구조(Layered Architecture)란?
시스템을 기능별로 계층을 나누어 역할을 분리하는 설계 방식
각 계층은 특정 역할을 수행하며, 하위 계층만 호출 가능 (일반적으로 상위 계층 → 하위 계층으로 흐름)

📌 일반적인 3계층 구조 (Three-Tier Architecture)

계층  설명
프레젠테이션 계층 (Presentation Layer) 사용자 인터페이스 (UI)
비즈니스 계층 (Business Logic Layer) 애플리케이션의 핵심 로직 처리
데이터 계층 (Data Layer) 데이터 저장 및 관리 (DB 연동)

📌 예제: 쇼핑몰 시스템의 계층 구조

1. UI (React, Angular) → 프레젠테이션 계층
2. 백엔드 서버 (Spring Boot, Node.js) → 비즈니스 계층
3. 데이터베이스 (MySQL, MongoDB) → 데이터 계층

계층 구조를 사용하면 유지보수성이 향상되고, 역할이 명확해짐


3️⃣ 시스템 아키텍처 패턴

🔹 MVC 패턴(Model-View-Controller)

📌 MVC(Model-View-Controller)란?
소프트웨어를 모델(Model), 뷰(View), 컨트롤러(Controller)로 분리하여 설계하는 방식

📌 MVC 패턴의 구조

구성 요소 역할
Model 데이터와 비즈니스 로직을 처리
View 사용자 인터페이스(UI)를 담당
Controller 사용자 입력을 받아 Model과 View를 연결

📌 MVC 패턴의 장점역할 분리로 유지보수성 향상
재사용성이 높아짐
UI와 비즈니스 로직을 독립적으로 개발 가능

📌 MVC 예제: 블로그 애플리케이션

1. Model → 게시글 데이터 관리 (Post 모델)
2. View → HTML 페이지 또는 프론트엔드 (React, Vue)
3. Controller → 게시글 CRUD 요청 처리 (Django, Express)

각 구성 요소가 독립적으로 동작하여 코드의 유지보수성과 확장성이 높아짐


🔹 클라이언트-서버 모델(Client-Server Model)

📌 클라이언트-서버 모델이란?
클라이언트(Client)가 요청을 보내면, 서버(Server)가 응답을 처리하는 방식

📌 구성 요소

구성 요소 역할
클라이언트 (Client) 사용자 인터페이스(UI)를 제공하고 서버에 요청을 보냄
서버 (Server) 클라이언트의 요청을 처리하고 데이터베이스와 연동
데이터베이스 (Database) 서버에서 데이터를 저장 및 관리

📌 클라이언트-서버 모델의 장점클라이언트와 서버가 독립적으로 동작 → 다양한 클라이언트(웹, 모바일)에서 사용 가능
서버에서 데이터 관리 및 보안 강화
확장성이 뛰어남 (로드 밸런싱 가능)

📌 예제: 웹 애플리케이션의 클라이언트-서버 모델

1. 클라이언트 → 브라우저 (React, Vue, Angular)
2. 서버 → 백엔드 API 서버 (Spring Boot, Django, Node.js)
3. 데이터베이스 → MySQL, PostgreSQL

REST API 또는 GraphQL을 활용하여 클라이언트와 서버 간 데이터 교환


📌 결론

📌 시스템 아키텍처 설계는 소프트웨어의 성능, 유지보수성, 확장성을 결정하는 핵심 과정
📌 모듈화 설계를 통해 독립적인 기능 단위(모듈)를 구성하고, 계층 구조를 도입하여 역할을 분리
📌 MVC 패턴은 UI, 비즈니스 로직, 데이터 관리를 분리하여 유지보수성을 높이며, 클라이언트-서버 모델은 다양한 기기에서 접근 가능하도록 설계 가능
📌 적절한 아키텍처 패턴을 선택하여 최적의 시스템을 설계하는 것이 중요함 🚀