Skip to content

Commit

Permalink
2024-11-24_Monolithic
Browse files Browse the repository at this point in the history
  • Loading branch information
devnine-codes committed Nov 24, 2024
1 parent f626cc6 commit 56f6847
Showing 1 changed file with 92 additions and 0 deletions.
92 changes: 92 additions & 0 deletions 2024/11/2024-11-24_Monolithic/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# 모놀리식 아키텍처

오늘은 지난번 작성했던 **MSA(Microservices Architecture)** 와는 상반되는 **모놀리식 아키텍처(Monolithic Architecture)** 에 대해 이야기해보려고 한다. 모놀리식 아키텍처는 전통적인 애플리케이션 개발 방식으로, 모든 기능이 하나의 코드베이스에서 작동하도록 설계된다. 이는 단순한 구조와 관리의 용이함 덕분에 여전히 많은 프로젝트에서 선택되고 있다.

---

## 1. 모놀리식 아키텍처란?

모놀리식 아키텍처는 애플리케이션의 모든 컴포넌트(프론트엔드, 백엔드 로직, 데이터베이스 등)가 하나의 코드베이스로 통합된 구조를 의미한다.
애플리케이션은 단일 배포 단위로 작동하며, 모든 기능이 동일한 프로세스 내에서 실행된다.

---

## 2. 모놀리식 아키텍처의 장점

### **1) 단순성과 생산성**
- 초기 개발 속도가 빠르며, 개발 환경 설정이 간단하다.
- 새로운 팀원들도 쉽게 구조를 이해하고 작업에 참여할 수 있다.

### **2) 통합된 배포**
- 단일 파일(예: JAR, WAR)로 배포되기 때문에 배포와 관리가 용이하다.
- CI/CD 파이프라인 설정이 간단하며, 복잡한 배포 프로세스를 피할 수 있다.

### **3) 디버깅과 테스트 용이성**
- 모든 기능이 하나의 코드베이스에 있으므로, 디버깅과 테스트가 한 환경에서 이루어진다.
- 단일 로그와 단일 디버깅 세션으로 문제를 빠르게 파악할 수 있다.

### **4) 성능**
- 동일한 프로세스 내에서 작동하므로 서비스 간 호출이 필요 없어, 네트워크 비용이 없다.
- 초기에 높은 성능을 제공하며, 소규모 애플리케이션에 적합하다.

---

## 3. 모놀리식 아키텍처의 단점

### **1) 확장성의 제약**
- 애플리케이션 전체가 하나의 단위로 실행되므로, 특정 모듈만 독립적으로 확장하기 어렵다.
- 높은 트래픽을 처리해야 하는 경우, 애플리케이션 전체를 확장해야 하는 부담이 있다.

### **2) 복잡한 유지보수**
- 코드베이스가 커질수록 이해하고 관리하기 어려워진다.
- 새로운 기능 추가나 수정 시, 다른 기능에 영향을 미칠 가능성이 높다.

### **3) 배포 리스크**
- 작은 수정 사항도 전체 애플리케이션의 재배포를 요구하므로, 배포 리스크가 크다.
- 장애가 발생하면 애플리케이션 전체가 중단될 수 있다.

### **4) 기술 스택의 제약**
- 모든 컴포넌트가 동일한 기술 스택을 공유해야 하므로, 각 모듈에 적합한 기술을 선택하기 어렵다.

---

## 4. 모놀리식 아키텍처와 MSA 비교

| **특징** | **Monolithic Architecture** | **Microservices Architecture** |
|------------------|-----------------------------|--------------------------------|
| **구조** | 단일 코드베이스 | 여러 독립적인 서비스 |
| **배포 단위** | 단일 파일 | 서비스별 독립 배포 |
| **확장성** | 전체 애플리케이션 확장 필요 | 특정 서비스만 독립적으로 확장 가능 |
| **복잡성** | 초기에는 단순하나, 성장하며 복잡해짐 | 초기 설정과 관리가 복잡 |
| **성능** | 동일 프로세스 내 실행으로 빠름 | 네트워크 호출로 인한 추가 비용 발생 |
| **의존성 관리** | 강한 결합 | 느슨한 결합 |

---

## 5. 모놀리식 아키텍처를 선택하면 좋은 경우

### **1) 소규모 애플리케이션**
- 초기 개발 속도와 단순함이 중요한 스타트업이나 작은 프로젝트에 적합하다.

### **2) 팀 규모가 작을 때**
- 팀원들이 모놀리식 구조를 쉽게 이해하고 작업할 수 있어, 협업이 간단하다.

### **3) 명확한 요구사항**
- 변화가 적고, 안정적인 기능 요구사항을 가진 프로젝트에 적합하다.

### **4) 빠른 프로토타입 개발**
- 초기 프로토타입을 빠르게 제작하고 검증하려는 경우.

---

## 6. 모놀리식 아키텍처의 현대적 활용

모놀리식 아키텍처가 무조건 오래된 방식이라는 것은 아니다. 최근에는 모놀리식을 기반으로 시작한 뒤, 프로젝트가 성장하고 요구사항이 복잡해지면 **모듈화**를 통해 마이크로서비스로 전환하는 전략이 널리 사용된다. 이를 **모듈러 모놀리식(Modular Monolithic)** 접근법이라고 한다.

---

## 결론

모놀리식 아키텍처는 단순성과 효율성을 중시하는 프로젝트에 여전히 유용하다. 초기 개발 속도가 빠르고 관리가 용이하지만, 확장성과 유지보수성에서 한계가 발생할 수 있다.
현대적인 개발 환경에서는 모놀리식 구조로 시작한 뒤, 필요에 따라 마이크로서비스로 전환하는 점진적 아키텍처 변화가 일반적이다.
이번 기록을 통해 모놀리식 아키텍처의 강점과 한계를 다시 이해하고, 프로젝트 요구사항에 맞는 적절한 선택을 고민해보는 계기가 되었으면 한다.

0 comments on commit 56f6847

Please sign in to comment.