모놀리식 아키텍처

기술노트

🏛️ 모놀리식 아키텍처 (Monolithic Architecture)

모놀리식 아키텍처는 소프트웨어의 모든 구성 요소(UI, 비즈니스 로직, 데이터베이스 접근 등)가 하나의 거대한 애플리케이션 안에 긴밀하게 결합되어 있는 전통적인 소프트웨어 설계 방식입니다. '모놀리식(Monolithic)'은 '하나의 돌'이라는 의미로, 시스템 전체가 한 덩어리로 이루어져 있음을 뜻합니다.


🤔 모놀리식 아키텍처의 특징

  • 단일 배포 단위 : 시스템 전체가 하나의 프로젝트로 관리되며, 모든 코드가 함께 컴파일되고 하나의 결과물로 배포됩니다.
  • 간단한 개발 환경 : 모든 코드가 한 곳에 있으므로, 초기 개발 환경을 구축하고 테스트하기가 비교적 간단합니다.
  • 쉬운 데이터 접근 : 모든 모듈이 동일한 데이터베이스에 직접 접근하므로, 데이터 처리가 용이합니다.

⚖️ 모놀리식의 장단점

  • 장점 :

> * 단순함: 소규모 프로젝트의 경우, 개발과 배포가 매우 간단하고 빠릅니다. > * 성능: 모듈 간의 통신이 내부 함수 호출로 이루어져, 네트워크 오버헤드가 없어 성능상 이점이 있을 수 있습니다.

  • 단점 : (프로젝트가 커질수록 부각됨)

> * 낮은 유연성: 작은 수정 사항 하나를 배포하더라도, 시스템 전체를 다시 빌드하고 배포해야 합니다. > * 기술 스택 종속성: 전체 시스템이 하나의 기술 스택에 묶여 있어, 새로운 기술을 도입하기가 매우 어렵습니다. > * 확장성의 한계: 특정 기능에만 트래픽이 몰리더라도, 시스템 전체를 확장해야 하므로 비효율적입니다. > * 장애의 영향 범위: 하나의 모듈에 발생한 장애가 시스템 전체의 장애로 이어질 수 있습니다. > * 복잡성 증가: 코드가 거대해지면 구조를 파악하기 어렵고, 빌드 및 테스트 시간이 기하급수적으로 늘어납니다.


💡 개발자 핵심 Point

  • 모놀리식 아키텍처는 프로젝트의 초기 단계나, 규모가 작고 복잡하지 않은 시스템에는 여전히 효과적인 선택일 수 있습니다.
  • 하지만 서비스가 성장하고 복잡해짐에 따라, 많은 기업들은 모놀리식 아키텍처의 한계를 극복하기 위해 마이크로서비스 아키텍처(MSA)로 전환을 고려하게 됩니다.
  • 모놀리식 아키텍처로 시작하더라도, 각 모듈 간의 의존성을 낮게 유지하는 모듈형 모놀리식(Modular Monolith) 설계를 통해, 나중에 마이크로서비스로 전환하기 용이하도록 대비하는 것이 좋습니다.