1장 시스템 설계의 기본
잘 설계된 시스템은 성능, UX, 보안, 개발 비용에 이점이 있다.
1.1 시스템 설계의 정의
특정 요구 사항을 이루기 위해 시스템의 아키텍처나 구성 요소, 인터페이스 및 기타 여러 특성을 정의하는 과정을 의미
1.1.1 소프트웨어 시스템
특정 작업이나 일련의 작업을 수행하려고 함께 동작하는 컴포넌트나 모듈, 프로그램의 집합
1.1.2 분산 소프트웨어 시스템
여러 독립적인 컴포넌트나 프로세스, 노드로 구성할 수 있는데, 이들은 서로 통신을 주고받으며 하나의 공동 목표를 달성하려고 동작한다.
로드밸런서 역할
리버스 프록시로 서버의 대리인 역할을 함
- 구조상 모든 트래픽이 몰리는 단일 지점
- 내외부의 경계
내부 통신은 사설 IP를 사용하며 http 통신을 함,
외부 통신은 공인 IP를 사용하며 https 통신을 함 SSL 통신으로 내부 서버들의 부하를 줄여주는 역할
| 구분 | 캐시 (Cache) | 프록시 (Proxy) | 블록 스토리지 (Block Storage) |
| 핵심 역할 | 속도 향상 (자주 쓰는 데이터 임시 저장) | 중재 및 효율 (DB 접속 관리 및 부하 분산) | 데이터 저장 (파일 시스템, 로그, OS 영역) |
| 저장 위치 | 메모리 (RAM) - 매우 빠름 | 저장 안 함 (통로 역할) | 디스크 (HDD/SSD) - 영구 보관 |
| 비유 | 책상 위 커닝 페이퍼 | CEO 앞의 비서실장 | 튼튼한 금고 또는 외장 하드 |
| 실패 시 | 잠깐 느려짐 (DB에서 가져오면 됨) | DB 접속 불가 (서비스 장애) | 저장된 파일 유실 가능성 |
1.1.3 시스템 설계의 이해
소프트웨어 시스템의 아키텍처, 컴포넌트, 모듈, 인터페이스 및 상호 작용을 정의하여 기능적-비기능적 요구 사항을 채우는 과정
목표는 이해하기 쉽고 유지 보수와 확장이 용이하며 시스템의 성능, 확장성, 신뢰성, 보안 요구 사항을 지킬 수 있는 설계를 만드는 것
시스템 설계 과정
- 요구사항 분석
- 상위 수준의 아키텍처 설계
- 하위 수준의 상세 설계
- 사용자 인터페이스 설계
- API 설계
- DB 설계
SW 시스템 설계 목표
이해하기 쉽고 유지 보수와 확장이 용이하며 시스템의 성능, 확장성, 신뢰성, 보안 요구 사항을 지킬 수 있는 설계
기능 요구사항(What 무엇을 제공할지)
시스템이 사용자에게 제공해야 하는 구체적인 기능이나 동작
비기능 요구사항(How 어떻게 제공할 것인지)
시스템의 본질적 기능이 아니라, 그 기능이 돌아가는 **품질(Quality)과 제약(Constraint)**입니다. 흔히 '품질 속성(Quality Attributes)'이라고도 합니다.
1.2 시스템 설계의 다양한 유형
크게 보면 상위 수준 시스템 설계(아키텍처 설계), 하위 수준 시스템 설계(상세 설계)
1.2.1 상위 수준의 시스템 설계
- 시스템 아키텍처
- 데이터 흐름
- 확장성
- 장애 허용 시스템

시스템 아키텍처
관계 및 통신 방식을 정의하는 아키텍처 설계하는 방법 패턴
- 모놀리식
- 클라이언트-서버
- 마이크로서비스
- 이벤트 주도

데이터 흐름
- 수집
어디에서 오는지, 어떻게 가져올지 - 저장
어떻게 저장할지 - 처리
- 검색
처리된 데이터에 어떻게 접근할지

확장성
성능 저하 없이 증가하는 작업 부하를 견뎌야 함
- 수직 확장성
- 수평 확장성
장애 허용 시스템
장애나 오류가 발생하더라도 계속해서 정상적으로 작동할 수 있는 능력
복제, 중복성, 점진적 성능 저하, 모니터링, 자가 복구 등
1.2.2 하위 수준의 상세 설계
구현 세부 사항에 중점
알고리즘
계산, 데이터 처리, 문제 해결을 수행하는 단계별 절차
- 시간 복잡도
연산 횟수 - 공간 복잡도
메모리 양 - 트레이드오프
데이터 구조
메모리에서 데이터를 구성하고 관리하는 데 사용
시스템 성능과 자원 사용에 영향
- 데이터 접근 방식
빈도, 형태에 따른 읽기, 쓰기, 데이트 - 쿼리 성능
CRUD에 따른 시간 복잡도 - 메모리 사용량
API
각 구성 요소가 서로 상호 작용할 수 있도록 하는 규약 정의
모듈화와 관심사 분리를 만들 수도 있음
- 일관성
이해하고 사용하기 쉬움 - 유연성
기존 기능 영향 없이 변경 및 확장 - 보안
무단 접근 방지 - 성능
코드 최적화
코드의 성능, 가독성, 유지 보수성을 향상시키는 다양한 기법
- 리팩터링
- 루프 언롤링
- 메모이제이션
- 병렬 처리
1.3 업계에서 시스템 설계가 갖는 중요성
이점
- 요구사항을 자연스럽게 이해할 수 있다.
- 같이 참여한 인원의 경우 이해도가 높아져 협업 효율이 높아짐
'개발' 카테고리의 다른 글
| 요즘 개발자를 위한 시스템 설계 수업 - 3장 분산 시스템의 이론과 데이터 구조 1 (1) | 2026.02.27 |
|---|---|
| 요즘 개발자를 위한 시스템 설계 수업 - 2장 분산 시스템의 속성 (1) | 2026.02.23 |
| 레디스 - 쓰기 전략 (0) | 2026.02.15 |
| 레디스 - 읽기 전략 (0) | 2026.02.08 |
| 레디스(Redis) (0) | 2026.01.22 |