109 lines
13 KiB
Markdown
109 lines
13 KiB
Markdown
---
|
|
category: Unified
|
|
tags: [auto-consolidated, technical-documentation]
|
|
title: [[Scalability|Scalability]]
|
|
last_updated: 2026-05-02
|
|
---
|
|
|
|
# [[Scalability|Scalability]]
|
|
|
|
## 📌 Brief Summary
|
|
> "무한 성장의 그릇: 사용자가 10명일 때나 100만 명일 때나 시스템이 무너지지 않고 비례해서 성능을 낼 수 있는 설계적 유연성이자, 성공이 재앙(Crash)이 아닌 '기회'가 되게 만드는 현대 지능 시스템의 가장 강력한 척도."
|
|
|
|
---
|
|
|
|
확장성(Scalability)은 사용자 수, 데이터, 트래픽 등 시스템의 부하가 증가할 때 성능의 저하 없이 이를 안정적으로 처리할 수 있는 소프트웨어 시스템의 핵심 품질 속성이다 [1, 2]. 이는 단순히 트래픽 증가에 대응하는 것을 넘어, 성능 저하 나 막대한 비용 증가 없이 기능과 통합을 확장할 수 있는 능력을 의미한다 [2]. 성공적인 확장성은 수직적 확장(자원 추가)과 수평적 확장(노드 또는 서비스 추가)을 모두 포함하며, 선택한 아키텍처 패턴에 따라 그 달성 방식과 효율성이 크게 좌우된다 [2].
|
|
|
|
## 📖 Core Content
|
|
확장성(Scalability)은 시스템이나 프로세스가 늘어나는 작업 부하를 수용하거나 크기를 키울 수 있는 능력입니다. (본 시스템 구축의 핵심 가치)
|
|
|
|
1. **양대 확장 방식**:
|
|
* **Vertical Scaling (Up)**: 하드웨어 자체의 성능을 높임 (CPU 업그레이드 등). (물리적 한계 존재).
|
|
* **Horizontal Scaling (Out)**: 저렴한 서버를 수십 대 추가하여 병렬로 처리. (무한 확장의 핵심). ([[Parallel-Computing|Parallel-Computing]]와 연결)
|
|
2. **무엇을 확장하는가?**:
|
|
* **Data Scalability**: 테라바이트급 데이터도 검색 가능해야 함. (Vector-Database와 연결)
|
|
* **Functional Scalability**: 새로운 기능을 추가해도 기존 시스템이 꼬이지 않아야 함. ([[Modularity|Modularity]]와 연결)
|
|
3. **왜 중요한가?**:
|
|
* 현대 지능은 '규모의 경제(Scaling Law)'가 지배하며, 확장성이 없는 지능은 실험실의 장난감에 머물 수밖에 없기 때문임.
|
|
|
|
---
|
|
|
|
소스 데이터를 기반으로 분석한 확장성의 주요 원리와 패턴별 특성은 다음과 같다.
|
|
|
|
* **확장성의 두 가지 축**
|
|
시스템의 확장성은 기존 인프라에 자원을 추가하는 '수직적 성장(Vertical Growth)'과 다수의 처리 장치나 서비스를 추가하는 '수평적 확장(Horizontal Expansion)'으로 나뉜다 [2]. 아키텍처의 설계는 소프트웨어 수명 주기 전반에 걸쳐 이러한 확장이 원활하게 이루어지도록 보장해야 한다 [2].
|
|
* **아키텍처 패턴별 확장성 특성**
|
|
* **마이크로서비스 아키텍처(MSA)**: 전체 애플리케이션을 하나로 묶어 확장해야 하는 모놀리식 구조와 달리, 개별 서비스의 작업량과 자원 수요에 따라 특정 서비스만 독립적으로 확장할 수 있어 높은 확장성과 유연성을 제공한다 [3-5].
|
|
* **서버리스 아키텍처(Serverless)**: 클라우드 제공자가 요청이나 이벤트의 수에 따라 컴퓨팅 리소스를 동적으로 자동 할당(Auto-scaling)하므로, 트래픽 변동이 심하거나 예측 불가능한 환경에서 매우 효율적인 확장성을 제공한다 [6-8].
|
|
* **공간 기반 아키텍처(Space-Based Architecture)**: 병목 현상의 주원인인 관계형 데이터베이스 의존도를 없애고, 인메모리 데이터 그리드(IMDG)를 통해 부하를 여러 처리 장치로 분산시켜 극단적인 동시성 요청이나 대규모 데이터 상황에서도 선형적 확장에 가까운 성능을 발휘한다 [9-11].
|
|
* **이벤트 기반 아키텍처(Event-Driven Architecture)**: 비동기 통신을 통해 구성 요소 간의 결합도를 낮춤으로써 시스템이 다수의 이벤트를 실시간으로 처리할 수 있게 하며, 이벤트 소비자와 생산자가 독립적으로 확장될 수 있다 [12, 13].
|
|
* **피어 투 피어(P2P) 아키텍처**: 중앙 서버에 의존하지 않고 각 노드(피어)가 클라이언트이자 서버 역할을 동시에 수행하므로, 새로운 노드가 네트워크에 참여할 때마다 처리 용량이 자연스럽게 확장되는 유기적(Organic) 확장성을 제공한다 [14-17].
|
|
* **CQRS 패턴**: 읽기(Query)와 쓰기(Command) 모델을 분리하여, 데이터 읽기 요청이 많은 시스템에서 읽기 데이터베이스를 독립적으로 확장할 수 있도록 지원한다 [18, 19].
|
|
|
|
## ⚖️ Trade-offs & Caveats
|
|
- **과거 데이터와의 충돌**: 과거에는 확장에 따른 복잡도 정책(Complexity) 증가를 두려워했으나, 현대 정책은 처음부터 확장성을 고려한 '클라우드 네이티브 설계 정책'을 통해 확장을 '클릭 한 번'의 문제 정책으로 바꿈(RL Update).
|
|
- **정책 변화(RL Update)**: 본 지식 구축 시스템 또한 배치 크기 조절 정책과 병렬 주입 프로토콜 정책을 통해 300개를 넘어 600개, 그 이상의 지식도 주입 가능한 확장성 정책을 확보 중임. (Standard-Operating-Procedure와 연결)
|
|
|
|
---
|
|
|
|
소프트웨어 아키텍처에서 확장성을 달성하기 위한 기술적 선택은 다음과 같은 부작용과 제약 사항(Trade-off)을 수반한다.
|
|
|
|
* **운영 및 인프라 복잡성 증가**: 확장성을 극대화하기 위해 마이크로서비스, 서버리스 또는 이벤트 기반 아키텍처와 같은 분산 시스템을 도입하면, 서비스 간의 통신 관리, 분산 트레이싱, 모니터링, 디버깅 등 운영의 복잡성이 급격히 증가한다 [11, 20-22].
|
|
* **데이터 일관성 문제(Eventual Consistency)**: 높은 확장성을 위해 데이터베이스를 서비스별로 분리하고 비동기 통신을 채택할 경우, 즉각적이고 강력한 데이터 일관성을 유지하기 어렵다 [20, 23, 24]. 대신 데이터 동기화에 지연이 발생하는 '최종적 일관성'을 감수해야 하며, 이는 결제 상태 등 즉각적인 정확성이 필요한 도메인에서 약점이 될 수 있다 [20, 21, 24].
|
|
* **서버리스의 콜드 스타트와 비용 한계**: 동적 자동 확장이 가능한 서버리스 환경은 유휴 상태 후 함수가 처음 호출될 때 발생하는 지연 시간(Cold Start)이 실시간 응답성에 부정적인 영향을 줄 수 있다 [7, 25, 26]. 또한, 장기 실행 프로세스에서는 지속적으로 가동되는 클라우드 인스턴스보다 오히려 더 높은 비용을 초래할 수 있다 [25, 27].
|
|
* **전체 시스템 설계의 난이도**: 공간 기반 아키텍처는 인메모리 데이터를 사용해 확장성을 확보하지만 캐싱 최적화 및 분산 환경 설계가 매우 복잡하며 [28, 29], P2P 아키텍처는 중앙 통제가 없으므로 분산 자원 관리와 보안 및 데이터 일관성을 보장하기 어렵다는 제약이 있다 [30, 31].
|
|
|
|
## 🔗 Knowledge Connections
|
|
- [[Parallel-Computing|Parallel-Computing]], Vector-Database, [[Modularity|Modularity]], [[Standard-Operating-Procedure|Standard-Operating-Procedure]], [[Efficiency|Efficiency]], [[Technical-Architecture|Technical-Architecture]]
|
|
- **Modern Tech/Tools**: Kubernetes, Docker, Microservices, Auto-scaling, CDN.
|
|
---
|
|
|
|
---
|
|
|
|
### Related Concepts
|
|
|
|
#### [관계 유형: 아키텍처 패턴]
|
|
- [[마이크로서비스 아키텍처 (Microservices Architecture)]]
|
|
- 연결 이유: 확장성을 구현하는 현대적인 대표 패턴으로, 각 비즈니스 기능을 독립적인 서비스로 분리하여 요구 사항에 맞춰 개별적으로 확장할 수 있도록 함 [5, 32].
|
|
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 모놀리식 구조의 확장 한계와 분산 환경에서의 독립적 배포 및 유연한 리소스 스케일링 원리.
|
|
- [[공간 기반 아키텍처 (Space-Based Architecture)]]
|
|
- 연결 이유: 데이터베이스 병목을 제거하고 메모리를 통해 극단적인 확장성을 제공하여 예측 불가한 대규모 트래픽 증가를 처리하는 설계 기법 [11].
|
|
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 데이터베이스 부하 분산의 한계를 뛰어넘어 동시성 문제를 해결하고 선형적 확장성을 달성하는 구조적 접근.
|
|
|
|
#### [관계 유형: 설계 원칙 및 특성]
|
|
- [[CQRS (Command Query Responsibility Segregation)]]
|
|
- 연결 이유: 확장성 확보를 위해 읽기와 쓰기 작업을 분리하여, 부하가 높은 읽기 모델 등을 독립적으로 최적화 및 확장할 수 있게 만드는 패턴 [18, 19].
|
|
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 데이터 집약적 애플리케이션에서 발생하는 읽기와 쓰기 부하의 불균형을 해소하기 위한 독립적 스케일링 전략.
|
|
- [[서버리스 (Serverless)]]
|
|
- 연결 이유: 트래픽 증감에 따라 클라우드 인프라가 자동으로 컴퓨팅 자원을 할당(Auto-scaling)하여 확장성을 동적으로 제공하는 실행 모델 [6, 8].
|
|
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 인프라 관리 부담을 줄이면서도 가변적인 워크로드에 즉각적으로 대응하는 클라우드 네이티브 확장 기법의 장단점.
|
|
- [[최종적 일관성 (Eventual Consistency)]]
|
|
- 연결 이유: 고가용성 및 무한한 확장성을 위해 서비스들이 느슨하게 결합될 때 필연적으로 발생하는 분산 데이터 동기화의 지연 현상 [20, 23, 24].
|
|
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 고도로 확장 가능한 분산 시스템을 구축할 때 데이터의 즉각적인 일관성을 희생하고 성능을 확보하는 트레이드오프 원리.
|
|
|
|
### Deeper Research Questions
|
|
|
|
- 마이크로서비스 아키텍처에서 개별 서비스의 수평적 확장이 전체 애플리케이션의 성능 향상으로 이어지기 위해, 서비스 간 통신으로 인해 발생하는 네트워크 병목 현상은 어떻게 완화할 수 있는가?
|
|
- 서버리스 아키텍처에서 시스템 확장 시 발생하는 '콜드 스타트(Cold Start)' 지연 문제는 실시간 응답성이 필수적인 애플리케이션에서 어떤 설계 기법을 통해 극복될 수 있는가?
|
|
- 트래픽이 폭증하는 상황에서 공간 기반 아키텍처(Space-Based Architecture)가 기존 클라이언트-서버 패턴이나 모놀리식 패턴이 가지는 관계형 데이터베이스의 확장성 한계를 어떻게 기술적으로 극복하는가?
|
|
- 확장성 극대화를 위해 CQRS와 이벤트 기반 아키텍처(EDA)를 결합할 때 나타나는 '최종적 일관성' 문제를 강한 일관성이 요구되는 도메인(예: 금융 트랜잭션)에서는 어떻게 제어하고 보완할 수 있는가?
|
|
- 피어 투 피어(P2P) 아키텍처가 지닌 유기적인 수평적 확장성이 기업용 대규모 데이터 분산 및 동기화 솔루션에 적용될 때, 클라이언트-서버 구조 대비 인프라 비용 절감 효과는 어떻게 나타나는가?
|
|
|
|
### Practical Application Contexts
|
|
|
|
- **Implementation:** 비즈니스 로직 내에서 부하가 집중되는 영역(예: 결제, 상품 검색)을 식별하고, 해당 기능을 독립적으로 수평 확장이 가능한 마이크로서비스나 서버리스 함수로 구현하여 유연성을 확보한다.
|
|
- **System Design:** 애플리케이션의 트래픽 변동성(간헐적인 스파이크 vs 지속적인 고부하)을 분석하여, 자동 확장이 유리한 서버리스를 도입할지, 인메모리 기반으로 선형적 확장을 보장하는 공간 기반 아키텍처를 적용할지 결정한다.
|
|
- **Operation / Maintenance:** 확장성으로 인해 분산 처리된 서비스 생태계의 모니터링을 위해, 분산 트레이싱(Distributed Tracing) 및 중앙 집중형 로그 수집을 구축하여 확장에 따른 서비스 오버헤드나 장애를 신속하게 식별한다.
|
|
- **Learning Path:** 단일 환경에서 구동되는 모놀리식 계층형 구조의 한계를 이해한 후, 확장성을 부여하는 마이크로서비스, 비동기 통신을 위한 이벤트 기반 아키텍처를 학습하며, 종국에는 분산 환경의 제약(CAP 정리 등) 및 트레이드오프를 탐구한다.
|
|
- **My Project Relevance:** 현재 진행 중인 프로젝트의 읽기/쓰기 비율을 평가하여 CQRS 아키텍처를 도입해 읽기 성능 확장을 도모하거나, 향후 늘어날 트래픽을 고려해 레거시 모놀리식 시스템에서 트래픽이 많은 특정 도메인 모듈부터 분리하는 점진적 확장 전략을 수립할 수 있다.
|
|
|
|
### Adjacent Topics
|
|
|
|
- [[부하 분산 (Load Balancing)]]
|
|
- 확장 방향: 확장된 인스턴스 또는 서버 간에 들어오는 트래픽과 요청을 고르게 분배하여 시스템 과부하를 방지하고 전체 처리량을 극대화하는 네트워크 메커니즘을 탐구한다.
|
|
- [[클라우드 네이티브 (Cloud Native)]]
|
|
- 확장 방향: 무한한 확장성을 기본 전제로 하는 클라우드 인프라 위에서 컨테이너화, 마이크로서비스, 서버리스 등을 융합하여 애플리케이션을 구축하고 배포하는 생태계 전반을 폭넓게 조사한다.
|
|
|
|
---
|
|
*Last updated: 2026-05-02*
|