Files
2nd/10_Wiki/Topics/02_Architecture_Principles/Monolithic Architecture.md
T
2026-05-02 16:24:15 +09:00

74 lines
9.6 KiB
Markdown

---
id: P-REINFORCE-WIKI-428A8368
category: "10_Wiki/💡 Topics/02_Architecture_Principles"
confidence_score: 0.95
tags: ['monolithic-architecture', 'microservices-architecture', 'serverless-architecture', 'modular-monolith', 'service-oriented-architecture-(soa)', 'architecture-principles']
last_reinforced: 2026-05-02
---
# [[Monolithic Architecture]]
## 📌 Brief Summary
모놀리식 아키텍처(Monolithic Architecture)는 애플리케이션의 사용자 인터페이스, 비즈니스 로직, 데이터 액세스 등 모든 구성 요소가 단일 코드베이스 내에 긴밀하게 통합되어 하나의 단위로 개발 및 배포되는 전통적인 소프트웨어 설계 패턴입니다 [1-3]. 초기 개발과 배포가 단순하며 내부 통신이 효율적이라는 장점이 있어 소규모 프로젝트나 빠른 프로토타이핑(MVP)에 적합합니다 [4-6]. 하지만 시스템 규모가 커지고 복잡해짐에 따라 독립적인 확장이 불가능하고 유지보수 및 배포의 병목 현상이 발생하기 쉽다는 한계를 지닙니다 [1, 4, 7].
## 📖 Core Content
* **단일 코드베이스 및 배포 단위 (Unified Codebase & Deployment):**
모놀리식 아키텍처에서는 애플리케이션의 모든 기능이 하나의 실행 파일이나 코드베이스에 포함됩니다 [2, 3]. 전체 시스템이 단일 단위로 빌드되고 테스트되며 배포되므로 초기 설정 과정이 중앙집중화되어 있습니다 [3, 4].
* **긴밀한 결합과 내부 통신 (Tightly Coupled Components):**
시스템 내의 각 모듈과 비즈니스 로직들이 강하게 상호 연결되어 있으며 데이터와 상태를 공유합니다 [2, 3]. 이러한 구조적 특징 때문에 분산 네트워크를 거치지 않고 내부적인 함수 호출로 직접 통신하므로 성능 면에서 오버헤드가 적고 효율적일 수 있습니다 [4].
* **진화된 형태 - 모듈러 모놀리스 (Modular Monolith):**
전통적인 모놀리스의 유지보수 한계를 보완하기 위해 내부를 명확한 경계와 책임을 가진 독립적인 모듈로 구조화하는 '모듈러 모놀리스' 접근법이 존재합니다 [8, 9]. 이는 여전히 단일 프로세스로 배포되지만, 내부 코드가 잘 정리되어 있어 마이크로서비스의 복잡성을 피하면서도 유지보수성을 확보할 수 있습니다 [8-10].
* **주요 적용 사례 (Use Cases):**
요구사항이 단순하고 빈번한 스케일링이 필요하지 않은 중소규모 애플리케이션 개발에 널리 사용됩니다 [5, 6, 11, 12]. 또한, 신속한 시장 출시가 필요한 스타트업의 초기 MVP 구축에 유리합니다 [6, 13]. 실제로 Amazon, Netflix, Uber와 같은 거대 IT 기업들도 초기에는 모놀리식 아키텍처로 시작하여 비즈니스 성장 이후 다른 아키텍처로 전환한 바 있습니다 [5, 11, 14, 15].
## ⚖️ Trade-offs & Caveats
**장점 (Pros):**
* **단순성 및 개발/배포 속도:** 단일 단위로 관리되므로 초기 시스템 구축, 로컬 개발 환경 설정, 그리고 중앙 집중식 배포가 매우 용이합니다 [3, 4, 12, 16].
* **성능 예측 및 디버깅:** 분산 시스템의 네트워크 지연(latency) 문제가 발생하지 않아 성능이 비교적 예측 가능하며, 코드 흐름이 한 곳에 있어 디버깅 및 엔드투엔드 테스트가 상대적으로 수월합니다 [4, 16-18].
**부작용 및 제약 사항 (Cons):**
* **확장성(Scalability)의 한계:** 특정 컴포넌트(예: 결제 모듈)에만 높은 부하가 발생하더라도, 개별적인 확장이 불가능하여 전체 애플리케이션의 인스턴스를 확장해야 하므로 리소스 낭비와 비효율을 초래합니다 [1, 4, 7, 12, 19, 20].
* **유지보수 및 배포 병목 현상:** 코드베이스가 방대해질수록 구성 요소 간의 복잡한 의존성 때문에 작은 수정 사항이 시스템 전체에 예기치 않은 영향을 미칠 수 있습니다 [1, 4, 7]. 또한 사소한 변경을 위해서도 전체 애플리케이션을 다시 빌드하고 배포해야 하므로 배포 주기가 길어집니다 [4, 7, 20, 21].
* **단일 장애점(Single Point of Failure):** 한 모듈에서 발생한 버그(예: 메모리 누수 등)가 전체 시스템의 장애나 다운타임으로 이어질 위험이 매우 높습니다 [4, 22].
* **기술적 제약:** 단일 기술 스택에 종속되기 때문에 특정 기능에 더 적합한 최신 언어나 프레임워크를 도입하는 등 기술적 유연성을 확보하기가 어렵습니다 [7].
## 🔗 Knowledge Connections
### Related Concepts
#### [관계 유형 A: 아키텍처 진화 및 대척 기술]
* [[Microservices Architecture]]
* 연결 이유: 모놀리식 아키텍처가 가진 확장성 및 유지보수성의 한계를 극복하기 위해 등장한 분산형 아키텍처 설계 패턴입니다 [1, 23, 24].
* 이 개념을 통해 더 깊게 이해할 수 있는 부분: 단일 코드베이스(Monolith)와 독립된 다수 서비스(Microservices)의 구조적 차이, 그리고 확장성과 복잡성 사이의 트레이드오프를 명확히 이해할 수 있습니다 [25, 26].
* [[Serverless Architecture]]
* 연결 이유: 모놀리식 애플리케이션과 달리 서버 인프라 관리를 클라우드 제공자에게 위임하고, 이벤트를 통해 트리거되는 독립된 함수 단위로 시스템을 구축하는 아키텍처입니다 [27, 28].
* 이 개념을 통해 더 깊게 이해할 수 있는 부분: 인프라 관리 책임, 콜드 스타트(Cold Start) 지연 시간 문제, 그리고 고정 비용(Fixed cost)과 사용량 기반 과금(Pay-per-use) 모델 간의 아키텍처적 차이를 파악할 수 있습니다 [26].
#### [관계 유형 B: 설계 및 구현 기법]
* [[Modular Monolith]]
* 연결 이유: 전통적인 모놀리식의 강한 결합(Tight coupling) 문제를 해결하기 위해 고안된 아키텍처로, 내부를 독립적인 책임 경계를 가진 모듈로 나눈 접근법입니다 [8, 9].
* 이 개념을 통해 더 깊게 이해할 수 있는 부분: 분산 시스템의 네트워크 오버헤드를 피하면서도 코드의 응집도와 유지보수성을 달성하는 실용적인 타협점(Trade-off) 설계 방식을 학습할 수 있습니다 [9, 10, 16].
### Deeper Research Questions
* 모놀리식 아키텍처에서 마이크로서비스 아키텍처로 점진적으로 마이그레이션(Migration)할 때 사용하는 교살자 무화과 패턴(Strangler Fig Pattern)의 원리와 장단점은 무엇인가? [29]
* 서비스 확장이 필요한 대규모 모놀리식 시스템 환경에서 내부 모듈 간의 강한 결합(Strong Data Coupling)이 유발하는 기술 부채(Technical Debt)의 양상과 해결책은 무엇인가? [3, 7, 30]
* 서버리스 기능과 모놀리식 백엔드를 혼합하여 사용하는 하이브리드 아키텍처(Hybrid Architectures) 구성이 유리한 비즈니스 시나리오(예: 돌발 트래픽 처리)는 어떤 특징을 가지는가? [31, 32]
* 도메인 주도 설계(DDD) 원칙을 활용하여 스파게티 코드로 변질된 레거시 모놀리식 아키텍처를 모듈러 모놀리스(Modular Monolith)로 안전하게 리팩토링하는 구체적 절차는 무엇인가? [33, 34]
* 스타트업이 초기 MVP 개발에 모놀리식 아키텍처를 채택함으로써 얻는 개발 속도 향상과 비용 절감 효과는 향후 스케일업 과정에서 발생하는 마이그레이션 비용과 비교할 때 어떠한 경제적 가치를 가지는가? [5, 6, 35]
### Practical Application Contexts
* **Implementation:** 초기 자본과 인력이 부족한 스타트업이나 소규모 개발팀이 복잡한 분산 환경 설정 없이 단일 저장소와 프레임워크를 사용해 신속하게 비즈니스 로직을 구현할 때 가장 효과적입니다 [5, 6].
* **System Design:** 아키텍처 설계 시 단일 서버와 통합 데이터베이스를 사용하여 데이터 정합성과 트랜잭션 관리를 직관적으로 설계할 수 있게 합니다 [3].
* **Operation / Maintenance:** 운영 초기 단계에는 배포와 모니터링 체계가 한 곳에 집중되어 관리가 단순합니다. 하지만 시스템과 팀 규모가 커질 경우 전체 통합 테스트 시간과 배포 대기 시간이 크게 증가하여 운영 효율이 저하될 수 있습니다 [7, 21, 22].
* **Learning Path:** 시스템 설계와 아키텍처 패턴을 공부하는 개발자가 분산 시스템의 필요성(예: 마이크로서비스, 이벤트 기반 등)을 깨닫기 위해 가장 먼저 이해해야 하는 핵심 기초 아키텍처입니다 [1-3].
* **My Project Relevance:** 현재 진행 중인 프로젝트의 범위가 명확히 한정되어 있고, 실시간으로 폭증하는 트래픽 처리보다는 안정적인 단일 기능 배포가 우선시될 때, 모놀리식(또는 모듈러 모놀리스)을 선택하여 오버엔지니어링(Over-engineering)을 피할 수 있습니다 [10, 36, 37].
### Adjacent Topics
* [[Service-Oriented Architecture (SOA)]]
* 확장 방향: 모놀리식에서 마이크로서비스로 발전하는 과정에 존재했던 중간 형태의 분산 아키텍처로, 서비스 컴포넌트 간 통합과 재사용성을 강조하는 설계 철학을 비교 학습할 수 있습니다 [38-40].
* [[Domain-Driven Design (DDD)]]
* 확장 방향: 거대한 모놀리식 애플리케이션을 의미 있는 비즈니스 컨텍스트(Bounded Context)로 분할하거나 모듈화할 때, 코드와 비즈니스 논리를 일치시키는 설계 방법론으로 확장이 가능합니다 [33, 34].
---
*Last updated: 2026-05-02*