모놀리식 애플리케이션이란?

모놀리식 애플리케이션은 여러 기능의 사용자 인터페이스와 데이터 액세스 레이어를 하나의 애플리케이션으로 결합한 것입니다. 일반적으로 모놀리식 애플리케이션은 조직 내 여러 팀에서 수정하는 단일 코드베이스로 존재하며 해당 팀이 유지 관리하는 모든 기능을 포함하는 단일 단위로 배포됩니다.

모놀리식 애플리케이션은 구성 요소의 긴밀한 통합 덕분에 개발 및 배포가 훨씬 쉬운 경우가 많습니다. 그러나 애플리케이션의 범위와 성능 요구 사항이 증가함에 따라 모놀리스는 결과적으로 유지 관리 및 확장이 어려워질 수 있습니다.

모놀리식 애플리케이션 아키텍처의 예

모놀리식 시스템은 빠르게 확장하거나 정기적으로 유지 관리할 필요가 없는 작고 복잡하지 않은 애플리케이션에 적합할 수 있습니다. 다음은 일반적으로 모놀리식에 기반한 애플리케이션의 몇 가지 예입니다(단, 최신 기능은 보다 컨테이너화된 인프라를 기반으로 할 수 있음).

  • 전자 상거래 플랫폼 - 모놀리식 애플리케이션은 온라인 매장 구축, 주문 처리, 결제 처리 및 고객 서비스 등과 같은 인프라가 설정되면 아키텍처에 대한 업데이트가 거의 필요하지 않기 때문에 전자 상거래에서 흔히 볼 수 있습니다.
  • 콘텐츠 관리 시스템(CMS) - 이 용어집 항목은 모놀리식 애플리케이션(WordPress)을 통해 가능해졌습니다. CMS 애플리케이션은 배포 시 웹 페이지 형태로 콘텐츠 관리에 필요한 모든 기능을 포함합니다.
  • 금융 거래 시스템 - 많은 금융 시스템이 모놀리식 애플리케이션으로 구축되는 이유는 진입점이 제한되어 있어 보안이 강화되기 때문입니다. 또한 배포 시 코드베이스에는 금융 거래 관리, 결제 처리 및 추적 등 소비자가 온라인 뱅킹 환경에서 기대하는 모든 기능이 포함되어 있습니다.
모놀리식 아키텍처의 장점

모놀리식 아키텍처의 일부 측면은 구식이 되었지만 여전히 많은 용도와 긍정적인 속성이 있습니다.

모놀리스의 몇 가지 장점은 다음과 같습니다.

  • 단순성 - 모놀리스는 중앙화된 아키텍처를 사용하여 마이크로서비스 아키텍처와 같이 복잡한 아키텍처에 비해 개발, 배포 및 유지 관리가 훨씬 쉽습니다.
  • 빠른 테스트 - 모든 구성 요소를 하나의 프로그램에 통합하여 모놀리식 애플리케이션을 전체적으로 빠르게 테스트할 수 있습니다. 여러 개의 작은 구성 요소로 구성된 아키텍처(예: 마이크로서비스)와 달리 복잡한 통신 프로토콜이나 여러 코드 저장소에 대한 추가적인 테스트가 필요하지 않습니다.
  • 보안 - 악의적 행위자의 진입점이 적기 때문에 일반적으로 모놀리스는 더 쉽게 보호할 수 있습니다. 또한 여러 보안 구성을 관리하는 것보다 하나의 애플리케이션에 보안 프로토콜을 적용하는 것이 훨씬 쉽습니다.
  • 비용 - 단일 단위로 배포되는 모놀리스는 추가 통신 프로토콜 배포 및 보호, 더 많은 연결 인프라 구축, 보다 전문적인 기술과 교육을 받은 직원 채용과 관련된 추가 비용이 들지 않습니다.
모놀리식 아키텍처의 단점

모놀리스의 두드러진 특성에는 긍정적인 측면도 있지만 문제가 발생할 수도 있습니다.

모놀리스의 몇 가지 단점은 다음과 같습니다.

  • 복잡성 증가 - 시간이 지남에 따라 애플리케이션이 성장하고 기능이 추가되면서 모놀리식 아키텍처가 점점 더 커지고 복잡해질 수 있습니다. 이렇게 되면 업데이트가 전체 프로그램이 원활하게 실행되도록 하는 단일 코드베이스를 손상시킬 위험이 커집니다.
  • 확장성 부족 - 애플리케이션의 한 기능 또는 영역을 수평적으로 확장해야 하는 경우, 대규모 애플리케이션 전체(추가 리소스가 필요하지 않은 하위 시스템 포함)를 확장해야 합니다. 따라서 배포에 시간이 오래 걸리기 때문에 확장 속도가 느려질 뿐만 아니라 마이크로서비스에 비해 각 인스턴스를 실행하기 위한 하드웨어 요구 사항이 더 많기 때문에 비용 증가로 이어질 수 있습니다.
  • 복원력 - 모놀리식 아키텍처에서는 모든 애플리케이션 구성 요소가 긴밀하게 연결되어 있으며 중앙 코드베이스에서 실행됩니다. 따라서 하나의 구성 요소가 실패하면 전체 애플리케이션이 중단될 수 있습니다.
  • 전체 재배포 - 전체 애플리케이션을 나타내는 단일 코드베이스를 사용하는 모놀리스는 단일 구성 요소가 변경되거나 업데이트될 때마다 전체 재배포가 필요합니다.
  • 기술 스택 - 개발자는 사용하는 도구 또는 언어가 모놀리스에 적합한지 확인해야 하므로 선택의 폭이 제한됩니다. 또한 많은 모놀리식 애플리케이션은 클라우드 컴퓨팅 및 컨테이너화와 같은 더 새롭고 효율적인 기술과 완전히 호환되지 않는 방식으로 작성됩니다.
  • 개발 속도 저하 - 여러 개발팀이 하나의 대규모 코드베이스에서 작업하는 경우 인터페이스와 도메인 경계를 존중하고 유지하려면 각별한 주의가 필요합니다. 또한 때때로 코드가 복잡한 결합을 유발하므로 팀 간 종속성으로 인해 새로운 기능의 개발 또는 중요한 문제 수정 속도가 느려질 수 있습니다.
마이크로서비스 아키텍처란 무엇입니까?

모놀리식 아키텍처와 대비되는 마이크로서비스 아키텍처가 있습니다. 마이크로서비스는 작은 구성 요소로 크고 복잡한 애플리케이션을 구축하는 소프트웨어 아키텍처 접근 방식입니다. 이러한 구성 요소는 각각 단일 기능(예: 인증, 알림 또는 결제 처리)을 수행하거나 모놀리스 내에서 번들로 작동할 수 있습니다. 또한 "마이크로서비스"(또는 "서비스")는 작은 구성 요소 자체를 지칭하는 용어이기도 합니다.

모놀리식 앱이 긴밀하게 결합(구성 요소가 서로 연결되어 있음을 의미)되어 있는 반면, 마이크로서비스 앱은 분산(구성 요소가 독립적으로 작동할 수 있음을 의미)되어 있습니다. 애플리케이션이 점점 더 커지고 복잡해지면서 많은 조직은 모놀리스에서 벗어나거나 새로운 앱을 마이크로서비스 형식으로 통합하는 방법을 모색하고 있습니다.

NGINX는 모놀리식 및 마이크로서비스에 살펴보려는 사용자를 위해 다음과 같은 무료 교육 리소스를 제공합니다.