2025. 3. 12. 15:44ㆍ개발/개발 방법론
3. 상세 설계 (Low-Level Design)
상세 설계(Low-Level Design, LLD)는 아키텍처 설계(HLD) 이후, 시스템의 각 구성 요소를 구체적으로 설계하는 단계입니다.
이 단계에서는 데이터 모델링(ERD), API 설계, 데이터 흐름 설계 등을 수행하여 실제 구현이 가능하도록 시스템을 정교하게 설계합니다.
이 문서에서는 ERD 작성, API 설계 및 데이터 흐름 설계, 그리고 간단한 웹 애플리케이션 설계 문서 작성 실습을 상세히 정리하겠습니다.
1️⃣ 상세 설계(Low-Level Design) 개요
📌 상세 설계란?
✅ 아키텍처 설계에서 정의된 모듈을 코드 단위로 세분화
✅ 데이터베이스 설계, API 요청/응답 구조 정의, 알고리즘 및 로직 설계 수행
✅ 개발자가 구현할 수 있도록 구체적인 기술적 명세서 작성
📌 상세 설계의 주요 목표
✅ 코드 수준에서의 명확한 지침 제공
✅ 데이터 흐름을 최적화하여 성능 개선
✅ API 설계를 체계적으로 수행하여 시스템 간 통합 원활화
✅ 유지보수 및 확장성을 고려한 구조 설계
📌 상세 설계에서 수행하는 주요 작업
작업 | 설명 |
ERD(Entity-Relationship Diagram) 작성 | 데이터베이스 구조 및 관계 설계 |
API 설계 | RESTful API, GraphQL API 엔드포인트 정의 |
데이터 흐름 설계 | 모듈 간 데이터 이동 방식 정의 |
클래스 다이어그램 작성 | 객체 간 관계 및 속성 정의 |
비즈니스 로직 설계 | 주요 기능(인증, 결제 등)의 알고리즘 설계 |
2️⃣ ERD(Entity-Relationship Diagram) 작성
📌 ERD란?
ERD(Entity-Relationship Diagram)는 데이터베이스의 구조를 시각적으로 표현한 다이어그램으로,
각 데이터 간의 관계를 정의하는 중요한 설계 요소입니다.
📌 ERD 주요 개념
✅ 개체(Entity) – 데이터베이스의 테이블 (예: 사용자, 주문, 상품)
✅ 속성(Attribute) – 테이블의 컬럼 (예: 사용자 ID, 이메일, 주문일)
✅ 관계(Relationship) – 테이블 간의 관계 (예: 사용자와 주문은 1:N 관계)
📌 ERD 예제: 전자상거래 시스템
[사용자(User)]
- user_id (PK)
- name
- email
- password
[주문(Order)]
- order_id (PK)
- user_id (FK)
- order_date
- total_price
[상품(Product)]
- product_id (PK)
- name
- price
- stock
관계:
- User (1) → (N) Order
- Order (1) → (N) Product
✅ 사용자는 여러 개의 주문을 할 수 있으며(Order), 주문은 여러 개의 상품(Product)을 포함할 수 있음
📌 ERD 설계 시 고려할 요소
✅ 정규화(Normalization) 적용하여 중복 데이터 최소화
✅ 외래키(Foreign Key) 설정을 통한 관계 명확화
✅ 인덱싱을 활용하여 검색 성능 최적화
3️⃣ API 설계 및 데이터 흐름 설계
🔹 API 설계 (RESTful API)
📌 API(Application Programming Interface)란?
API는 클라이언트(웹/모바일)와 서버 간 데이터를 주고받는 인터페이스입니다.
주로 RESTful API 또는 GraphQL API를 설계하여 구현합니다.
📌 RESTful API 설계 예제 (전자상거래 시스템)
HTTP 메서드 | 엔드포인트 (Endpoint) | 설명 |
GET | /users/{id} | 특정 사용자 조회 |
POST | /users | 새로운 사용자 등록 |
GET | /products | 상품 목록 조회 |
POST | /orders | 주문 생성 |
DELETE | /orders/{id} | 특정 주문 삭제 |
📌 API 설계 시 고려할 요소
✅ RESTful API 원칙 준수 (리소스 중심 설계)
✅ HTTP 상태 코드 활용 (200 OK, 201 Created, 400 Bad Request)
✅ JWT 또는 OAuth2 기반 인증 적용
🔹 데이터 흐름 설계
📌 데이터 흐름이란?
데이터 흐름 설계(Data Flow Design)는 시스템 내에서 데이터가 이동하는 방식을 정의하는 과정입니다.
이 단계에서는 프론트엔드 → 백엔드 → 데이터베이스 간 데이터 이동을 최적화합니다.
📌 예제: 전자상거래 시스템의 데이터 흐름 1️⃣ 사용자가 상품을 장바구니에 추가 → 프론트엔드 (React, Vue)
2️⃣ 장바구니 정보가 REST API를 통해 백엔드로 전송 → 백엔드 서버 (Node.js, Spring Boot)
3️⃣ 백엔드에서 상품 재고 확인 후 **데이터베이스(MySQL)**에 저장
4️⃣ 주문이 완료되면 이메일 알림 발송
📌 데이터 흐름 설계 시 고려할 요소
✅ 비동기 처리 필요 여부 (예: Kafka, RabbitMQ 사용)
✅ 데이터 일관성 유지 (ACID 원칙 적용)
✅ 로드 밸런싱 및 성능 최적화 고려
4️⃣ 실습: 간단한 웹 애플리케이션 설계 문서 작성
다음은 간단한 할 일 관리(To-Do List) 웹 애플리케이션의 상세 설계 문서 예제입니다.
📌 프로젝트 개요
- 앱 이름: SimpleToDo
- 목적: 사용자가 할 일을 추가, 수정, 삭제할 수 있는 간단한 웹 애플리케이션
📌 ERD
[사용자(User)]
- user_id (PK)
- name
- email
- password
[할 일(Todo)]
- todo_id (PK)
- user_id (FK)
- title
- description
- status (완료/미완료)
✅ 한 명의 사용자가 여러 개의 할 일을 가질 수 있음 (1:N 관계)
📌 API 설계
HTTP 메서드 | 엔드포인트 | 설명 |
GET | /todos | 모든 할 일 조회 |
POST | /todos | 새로운 할 일 추가 |
PUT | /todos/{id} | 특정 할 일 수정 |
DELETE | /todos/{id} | 특정 할 일 삭제 |
📌 데이터 흐름 1️⃣ 사용자가 할 일을 입력하면 REST API를 통해 서버에 요청
2️⃣ 백엔드 서버가 데이터베이스(MySQL)에 저장
3️⃣ 사용자는 할 일 목록을 조회하고, 완료된 항목을 업데이트 가능
✅ 이 설계를 기반으로 하면 개발자가 쉽게 구현할 수 있음
📌 결론
📌 상세 설계(LLD)는 소프트웨어 구현을 위한 핵심 과정으로,
📌 ERD를 통해 데이터 모델을 정의하고, RESTful API를 설계하여 클라이언트-서버 간 데이터 흐름을 최적화
📌 데이터 흐름을 설계하면, 프론트엔드-백엔드-데이터베이스 간 요청과 응답을 체계적으로 정리할 수 있음
📌 체계적인 설계를 통해 유지보수성을 높이고, 확장성을 고려한 시스템을 구축하는 것이 중요함 🚀