High Level Design은 요구사항을 바탕으로 시스템의 전체적인 구조를 설계하는 단계입니다. 구현 세부사항보다는 시스템의 전반적인 아키텍처와 주요 컴포넌트 간의 관계에 초점을 맞춥니다.
🎯 목적
시스템의 전체 구조 정의
주요 컴포넌트 및 모듈 식별
컴포넌트 간 상호작용 정의
기술 스택 및 아키텍처 패턴 선택
확장성 및 유지보수성 고려
📐 HLD 설계 원칙
1. 아키텍처 원칙
mindmap
root((HLD 원칙))
단순성
KISS 원칙
명확한 구조
최소한의 복잡도
확장성
수평 확장
모듈화
느슨한 결합
유지보수성
관심사 분리
문서화
표준 준수
성능
캐싱 전략
비동기 처리
최적화
2. 설계 패러다임
원칙
설명
적용 예시
관심사의 분리
각 컴포넌트는 하나의 책임만
Presentation, Business, Data Layer
느슨한 결합
컴포넌트 간 의존성 최소화
인터페이스 기반 통신, 이벤트 기반
높은 응집도
관련 기능은 함께 그룹화
도메인 중심 설계
추상화
구현 세부사항 숨김
API Gateway, 서비스 인터페이스
🏗️ 아키텍처 스타일
선택 가능한 아키텍처 패턴
graph TD
A[아키텍처 선택] --> B[Monolithic]
A --> C[Microservices]
A --> D[Serverless]
A --> E[Hybrid]
B --> B1[장점: 단순함, 빠른 개발]
B --> B2[단점: 확장 제한]
C --> C1[장점: 확장성, 독립 배포]
C --> C2[단점: 복잡도 증가]
D --> D1[장점: 인프라 관리 불필요]
D --> D2[단점: Cold Start]
E --> E1[장점: 유연성]
E --> E2[단점: 복잡한 관리]
style A fill:#e1f5ff
style B fill:#fff4e1
style C fill:#ffe1f5
style D fill:#e1ffe1
style E fill:#f5e1ff