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

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

모놀리식 애플리케이션은 구성 요소가 긴밀하게 통합되어 있어 개발하고 배포하기가 더 쉬운 경우가 많습니다. 그러나 애플리케이션의 범위와 성능 요구 사항이 증가함에 따라 모놀리스는 유지 관리 및 확장이 어려워질 수 있습니다.

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

모놀리식 시스템은 빠르게 확장하거나 정기적으로 유지 관리할 필요가 없는 규모가 작고 복잡하지 않은 애플리케이션에 적합할 수 있습니다. 아래에는 일반적으로 모놀리식 기반을 갖는 몇 가지 애플리케이션의 예가 나와 있습니다(하지만 이러한 애플리케이션의 새로운 기능은 더 컨테이너화된 인프라를 기반으로 할 수 있음).

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

모노리식 아키텍처의 몇몇 측면은 시대에 뒤떨어졌지만 여전히 많은 목적과 긍정적인 특성이 있습니다.

모노리스의 장점은 다음과 같습니다.

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

모노리스의 단일성은 긍정적인 측면이 있지만, 문제를 야기할 수도 있습니다.

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

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

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

모놀리식 앱은 밀접하게 결합되어 있는 반면(즉, 구성 요소가 상호 연결되어 있는 경우), 마이크로서비스 앱은 분산되어 있습니다(즉, 구성 요소가 독립적으로 작동할 수 있는 경우). 애플리케이션이 더욱 크고 복잡해짐에 따라 많은 조직에서는 모놀리스에서 벗어나거나 마이크로서비스 형식으로 새로운 앱을 통합하는 것을 모색하고 있습니다.

NGINX는 모놀리식 및 마이크로서비스를 탐색하는 사람들을 위해 다음과 같은 무료 교육 리소스를 제공하게 되어 자랑스럽게 생각합니다.