모놀리식 아키텍쳐
모놀리식 아키텍쳐(Monolithic Architecture , MA) : 하나의 통합된 코드 베이스로 여러 비즈니스 기능을 수행하는 전통적인 아키텍처 스타일이다. 단일 애플리케이션 내에 서비스의 모든 로직이 들어가 있는 구조이다. 쉽게 말해 하나의 큰 목적이 있는 서비스 또는 애플리케이션에 여러 기능이 통합돼 있는 구조물을 의미한다.

- 간단한 유지보수
- 단일 코드 베이스를 가지고 있기 때문에 변경 사항을 적용하고 유비보수하는 것이 상대적으로 간단하다. 이로 인해 코드의 일관성을 유지하고 버그를 수정하기 용이하다.
- 개발 속도 향상
- 작은 팀이나 프로젝트에서 빠른 개발이 가능하다. 코드베이스가 단순하고 통합이 쉬우므로 초기에 빠르게 개발하고 배포할 수 있다.
- 통합의 편리함
- 서로 다른 기능이나 모듈이 하나의 애플리케이션 안에 있으므로 통합 및 테스트가 간단하다. 새로운 기능을 추가하거나 변경할 때 다른 부분과의 상호작용을 고려할 필요가 적다.
- 적은 인프라 구조 비용
- 단일 애플리케이션으로 모든 것을 처리하기 때문에 인프라 구조의 복잡성이 낮아지고 운영 비용이 감소할 수 있다.
- 기술 스택의 통일성
- 단일 코드 베이스를 가지고 있기 때문에 기술 스택을 통일하기 쉽다.
- 쉬운 디버깅 및 최적화
- 단일 코드 베이스에서 발생한 문제를 디버깅하기가 비교적 간단하다. 모든 코드가 하나의 공간에 있기 때문에 문제를 추적하고 해결하기가 용이하다. 마찬가지로 최적화 또한, 코드 베이스 전체에 대한 통합된 최적화가 가능하다.
이와 같은 장점은 주로 소규모 프로젝트에서 부각된다. 프로젝트의 규모가 커질수록 일부분에 제약이 생길 수도 있다.
- 확장과 배포의 어려움
- 프로젝트가 성정함에 따라 애플리케이션 전체를 확장해야 하므로, 특정 기능만을 확장하기 어렵다. 가령 뉴스 서비스를 이용하는 사용자가 1명이고 웹툰 서비스를 사용하는 사용자가 1억명이라 가정했을 때, 웹툰 서비스만 확장하기 어렵다.
- 작은 변경 사항도 전체 애플리케이션을 다시 배포해야 하는 경우가 있다. 이는 배포의 번거로움과 다운타임을 초래할 수 있다.
- 기술 스택의 제한성
- 기술 스택을 통일시키기 쉽지만, 이는 향후 새로운 기술 도입이 어렵다는 의미가 된다. 기술 스택이 제한된 셈인 것이다.
- 복잡성 증가
- 프로젝트가 성장함에 따라 코드베이스가 커지고 복잡성이 증가할 수 있다. 이에 따라 코드의 일부를 이해하고 수정하는 것이 어려워 유지보수와 디버깅이 어려워질 수 있다.
- 대규모 팀 작업의 어려움
- 모든 팀이 동일한 코드, 동일한 프로젝트에서 작업하기 때문에 코드 병합에 대한 충돌 가능성이 높고, 기능 변경 시 다른 팀이 작업에 영향을 줄 수 있다.
- 강한 의존성
- 어떤 코드를 도입하거나 변경하거나 할 때 다른 데이터 변경도 고려해야한다.
모놀리식 아키텍쳐의 장점과 단점을 살펴보면, 모놀리식 아키텍쳐는 소규모 프로젝트에 적합하다는 것을 알 수 있다. 소규모 프로젝트에서 부각되는 장점들이 대규모 프로젝트에 적용되면 단점으로 적용된다.