모놀리식 애플리케이션이란 무엇인가요?
모놀리식 애플리케이션은 여러 기능의 사용자 인터페이스 계층과 데이터 액세스 계층을 하나의 애플리케이션으로 통합합니다. 일반적으로 모놀리식 애플리케이션은 조직 내 여러 팀이 함께 수정하는 단일 코드베이스로 구성되며, 해당 팀들이 유지 관리하는 모든 기능을 포함한 하나의 단위로 배포됩니다.
모놀리식 애플리케이션은 구성 요소가 긴밀하게 통합되어 있어 개발 및 배포가 더 쉬운 경우가 많습니다. 하지만 애플리케이션의 범위가 확장되고 성능 요구 사항이 높아질수록 모놀리식 구조는 유지 관리와 확장이 어려워질 수 있습니다.
모놀리식 애플리케이션 아키텍처의 예
모놀리식 시스템은 빠르게 확장하거나 정기적으로 유지 관리할 필요가 없는, 규모가 작고 복잡성이 낮은 애플리케이션에 적합할 수 있습니다. 다음은 일반적으로 모놀리식 기반을 사용하는 애플리케이션의 몇 가지 예입니다(다만 최신 기능은 보다 컨테이너화된 인프라를 기반으로 할 수 있습니다).
- 이커머스 플랫폼 – 이커머스에서는 온라인 스토어 구축, 주문 처리, 결제 처리, 고객 서비스 등의 인프라를 일단 구축하고 나면 아키텍처를 업데이트할 일이 거의 없기 때문에 모놀리식 애플리케이션이 흔히 사용됩니다.
- 콘텐츠 관리 시스템(CMS) – 이 용어집 항목 역시 모놀리식 애플리케이션(WordPress) 덕분에 작성될 수 있었습니다. CMS 애플리케이션은 배포 시 웹 페이지 형태의 콘텐츠를 관리하는 데 필요한 모든 기능을 포함합니다.
- 은행 시스템 – 많은 금융 시스템은 진입점이 제한되어 보안성이 더 높기 때문에 모놀리식 애플리케이션으로 구축됩니다. 또한 배포된 코드베이스에는 금융 거래 관리, 결제 처리 및 추적 등 소비자가 온라인 뱅킹에서 기대하는 모든 기능이 포함되어 있습니다.
모놀리식 아키텍처의 장점
모놀리식 아키텍처의 일부 측면은 시대에 뒤떨어졌지만, 여전히 다양한 용도로 활용되며 많은 장점을 지니고 있습니다.
모놀리식 아키텍처의 장점은 다음과 같습니다:
- 단순성 – 중앙 집중식 아키텍처 덕분에 모놀리스는 마이크로서비스 아키텍처와 같은 더 복잡한 아키텍처에 비해 개발, 배포 및 유지 관리가 더 쉽습니다.
- 더 빠른 테스트 – 모든 구성 요소를 하나의 프로그램으로 통합하므로 모놀리식 애플리케이션을 전체적으로 빠르게 테스트할 수 있습니다. 여러 개의 소규모 구성 요소로 이루어진 아키텍처(예: 마이크로서비스)와 달리, 복잡한 통신 프로토콜이나 여러 코드 저장소에 대한 추가 테스트가 필요하지 않습니다.
- 보안 – 악의적인 공격자가 침입할 수 있는 지점이 적기 때문에 모놀리식 애플리케이션은 일반적으로 보안을 유지하기가 더 쉽습니다. 또한 여러 보안 구성을 관리하는 것보다 단일 애플리케이션 전체에 보안 프로토콜을 적용하기가 더 쉽습니다.
- 비용 – 모놀리식 아키텍처는 단일 단위로 배포되므로 추가 통신 프로토콜의 배포 및 보안, 연결 인프라 확충, 보다 전문적인 기술과 교육을 갖춘 직원 채용에 드는 추가 비용을 줄일 수 있습니다.
모놀리식 아키텍처의 단점
모놀리식 아키텍처의 단일 구조는 장점이 있지만, 문제를 일으킬 수도 있습니다.
모놀리식 아키텍처의 몇 가지 단점은 다음과 같습니다:
- 복잡성 증가 – 시간이 지나면서 애플리케이션이 성장하고 기능이 추가되면 모놀리식 아키텍처의 규모가 커지고 복잡해질 수 있습니다. 이러한 비대화로 인해 업데이트가 전체 프로그램의 원활한 실행을 뒷받침하는 단일 코드베이스에 문제를 일으킬 위험이 커집니다.
- 확장성 부족 – 애플리케이션의 특정 기능이나 영역을 수평 확장해야 할 경우, 추가 리소스가 필요하지 않은 하위 시스템까지 포함해 대규모 애플리케이션 전체를 확장해야 합니다. 이로 인해 배포 시간이 길어져 확장 속도가 느려질 수 있으며, 마이크로서비스와 비교할 때 각 인스턴스를 실행하는 데 더 높은 하드웨어 사양이 필요하므로 비용도 증가할 수 있습니다.
- 복원력 – 모놀리식 아키텍처에서는 모든 애플리케이션 구성 요소가 긴밀하게 연결되어 하나의 중앙 코드베이스에서 실행됩니다. 따라서 구성 요소 하나에 장애가 발생하면 전체 애플리케이션이 중단될 수 있습니다.
- 전체 재배포 – 전체 애플리케이션이 하나의 코드베이스로 구성되는 모놀리식 아키텍처에서는 단일 구성 요소가 변경되거나 업데이트될 때마다 전체를 다시 배포해야 합니다.
- 기술 스택 – 개발자는 사용하는 모든 도구나 언어가 모놀리식 아키텍처와 호환되는지 확인해야 하므로 선택의 폭이 제한됩니다. 또한 많은 모놀리식 애플리케이션은 클라우드 컴퓨팅 및 컨테이너화와 같은 더 새롭고 효율적인 기술과 완전히 호환되지 않는 방식으로 작성되어 있습니다.
- 개발 속도 저하 – 여러 개발 팀이 하나의 대규모 코드베이스에서 작업할 때는 인터페이스와 도메인 경계를 준수하고 유지하기 위해 각별한 주의가 필요합니다. 때로는 코드로 인해 복잡한 결합 관계가 생겨 팀 간 종속성이 새로운 기능 개발이나 중대한 문제 해결을 지연시킬 수 있습니다.
마이크로서비스 아키텍처란 무엇인가요?
모놀리식 아키텍처와 대조되는 방식으로 마이크로서비스 아키텍처가 있습니다. 마이크로서비스는 작은 구성 요소를 조합하여 크고 복잡한 애플리케이션을 구축하는 소프트웨어 아키텍처 접근 방식입니다. 각 구성 요소는 단일 기능(예: 인증, 알림 또는 결제 처리)을 수행하거나 모놀리스 내에서 묶음으로 작동할 수 있습니다. ‘마이크로서비스’(또는 간단히 ‘서비스’)는 이러한 작은 구성 요소 자체를 가리키는 용어이기도 합니다.
모놀리식 앱은 긴밀하게 결합되어 있는 반면(즉, 구성 요소가 서로 연결되어 있음), 마이크로서비스 앱은 분산되어 있습니다 (즉, 구성 요소가 독립적으로 작동할 수 있음). 애플리케이션의 규모가 커지고 복잡해짐에 따라 많은 조직이 모놀리식 아키텍처에서 벗어나거나 새로운 앱에 마이크로서비스 방식을 도입하는 방안을 검토하고 있습니다.
NGINX는 모놀리식 아키텍처와 마이크로서비스를 알아보는 분들을 위해 다음과 같은 무료 교육 자료를 제공합니다.

