1. 개요
현대 소프트웨어는 서비스 규모와 비즈니스 요구에 따라 다양한 아키텍처 스타일을 채택한다.
그 중 가장 널리 논의되는 두 가지는 Monolithic(모놀리식, 단일체) 아키텍처와 Microservice(마이크로서비스) 아키텍처다.
본 글에서는 두 아키텍처의 정의, 특징, 장단점, 대표 사례와 실제 선택 기준까지 정리한다.
2. Monolithic Architecture (모놀리식 아키텍처)
정의
- “Monolith” = 하나의 큰 돌(덩어리)
- 소프트웨어의 모든 기능을 하나의 코드베이스, 하나의 배포 단위로 구현하는 방식
- 초기 웹서비스/앱 개발에서 가장 흔한 패턴
주요 특징
- 단일 코드베이스: 모든 기능(인증, DB, API, UI 등)이 한 프로젝트/서버에 있음
- 하나의 배포: 전체 앱이 한 번에 빌드·배포됨
- 내부 함수 호출: 컴포넌트 간 통신이 함수 호출/라이브러리 참조로 간단
장점
- 개발/배포가 단순: 작은 팀, 초기 스타트업에 적합
- 디버깅/테스트 용이: 모든 로직이 한곳에 있어 파악이 빠름
- 성능: 모듈 간 통신이 함수 호출로 빠름
- 관리 도구가 적음: 배포/운영 인프라가 간단
단점
- 확장성 한계: 서비스가 커질수록 코드/팀/릴리즈 관리가 어려워짐
- 변경 영향 범위 큼: 일부 기능 변경도 전체 재배포 필요
- 장애 영향: 한 부분 오류가 전체 서비스 장애로 이어질 수 있음
- 새로운 기술 도입 난이도: 일부 모듈만 따로 언어나 프레임워크를 바꾸기 힘듦
실제 사례
- 전통적인 LAMP1 웹서비스, 초기형 스타트업, 예전의 ERP/CRM 시스템
- Docker의 초기 엔진도 모놀리식 구조(dockerd + 이미지 빌드 + 런 등 모든 기능 결합)
3. Microservice Architecture (마이크로서비스 아키텍처)
정의
- 애플리케이션을 작고 독립적인 “서비스 단위” 로 분리*
- 각 서비스는 고유의 책임과 데이터, 실행환경을 가짐
- 서비스들은 보통 네트워크(API, 메시지 등)로 통신
주요 특징
- 독립 배포: 각 서비스는 개별적으로 배포/스케일/업데이트 가능
- 작은 코드베이스: 각 서비스가 작아 관리와 학습이 쉬움
- 다양한 기술 사용 가능: 서비스별로 다른 언어, 프레임워크, DB 선택 가능
- 장애 격리: 한 서비스 장애가 전체 시스템에 영향 주지 않음
- 조직 분리: 기능팀/서비스팀 별도로 운영 가능
장점
- 확장성: 트래픽 많은 서비스만 선택적 확장 가능
- 배포 민첩성: 부분적 배포/롤백/업데이트가 쉬움
- 실험과 변화 용이: 새로운 기술, 언어, DB 적용이 유연
- 대규모 조직에 적합: 팀 간 독립적 개발/운영
단점
- 운영 복잡성 증가: 서비스 수가 많아질수록 인프라/네트워크/모니터링 등 관리 부담 증가
- 통합 테스트 어려움: 서비스 간 통합/시나리오 테스트가 복잡
- 트랜잭션 관리: 분산 트랜잭션, 데이터 일관성 이슈 발생
- 서비스 경계 설계의 어려움: 어떻게 분할할지 고민 필요
실제 사례
- Netflix, 쿠팡, 네이버, 카카오 등 대규모 서비스
- Kubernetes 기반 클라우드 네이티브 서비스 대부분
4. Monolithic vs Microservice 비교표
구분 | 모놀리식(Monolithic) | 마이크로서비스(Microservice) |
---|---|---|
코드베이스 | 하나 | 여러 개(서비스별) |
배포 방식 | 전체 한 번에 | 개별 서비스 단위 |
장애 영향 | 전체 장애 | 일부 서비스 장애로 국한 |
확장성 | 전체 스케일업/아웃 | 서비스별 개별 확장 |
기술 다양성 | 제한됨 | 서비스별 자유 |
운영 복잡도 | 낮음 | 높음 |
도입 추천 상황 | 작은 팀/프로젝트, 초기 개발 | 대규모 조직, 빈번한 업데이트/확장 |
5. 언제 어떤 아키텍처를 선택해야 할까?
-
모놀리식 추천 상황
- 작은 팀, MVP/프로토타입 단계
- 빈번한 구조 변경 없이 빠른 결과물이 필요할 때
- 복잡한 트래픽/스케일링/기술 혼합 요구가 없는 서비스
-
마이크로서비스 추천 상황
- 조직·트래픽 규모가 커지고, 서비스별 독립적 배포/확장이 중요할 때
- 다양한 언어/기술, 잦은 기능 추가·변경이 필요한 경우
- 장애 격리, DevOps, CI/CD 등 현대적 개발/운영 프로세스 적용 환경
6. 결론
- 모놀리식과 마이크로서비스는 “정답과 오답”이 아니라, 상황에 따라 맞는 도구 를 고르는 것
- 모놀리식은 빠른 시작·단순함 이 장점, 마이크로서비스는 확장성·유연성 이 핵심
- 자신의 프로젝트/조직/비즈니스 요구에 따라 가장 적합한 아키텍처를 선택해야 함
Footnotes
-
가장 널리 사용되던 오픈소스 기반 웹 서버 스택. 리눅스, 아파치, MySQL, PHP. ↩