마이크로서비스 란?
마이크로서비스 란 인증, 알림, 결제 처리 등 각각 하나의 기능을 수행하는 여러 개의 작은 구성 요소로 크고 복잡한 애플리케이션을 구축하는 소프트웨어 아키텍처의 접근 방식이자 작은 구성 요소 자체를 일컫는 용어이기도 합니다. 각 마이크로서비스는 자체 코드베이스, 인프라 및 데이터베이스를 갖춘 소프트웨어 개발 프로젝트 내의 별개의 단위입니다. 마이크로서비스는 함께 작동하며 웹 API 또는 메시징 대기열을 통해 통신하여 들어오는 이벤트에 응답합니다.
Sam Newman은 자신의 저서 “Building Microservices“에서 마이크로서비스를 “함께 작동하는 소규모의 자율적인 서비스”라고 간결하게 정의합니다. 여기에는 마이크로서비스의 세 가지 주요 측면이 포함됩니다. 마이크로서비스의 코드베이스는 한 가지 일을 잘 수행하는 데 초점을 맞추기 때문에 규모가 작습니다. 규모가 작다는 것은 개별 개발자나 소규모 팀만으로도 코드를 만들고 유지 관리하기에 충분하다는 것을 의미합니다. 자율적이라는 것은 필요에 따라 마이크로서비스를 배포하고 확장할 수 있으며, 마이크로서비스의 내부가 변경될 때 다른 마이크로서비스를 담당하는 팀과 상의할 필요 없이 마이크로서비스를 배포하고 확장할 수 있다는 것을 의미합니다. 이는 마이크로서비스가 함께 작동할 때 마이크로서비스의 내부 작동이 노출되지 않는 잘 정의된 API 또는 유사한 메커니즘을 통해 통신하기 때문에 가능합니다.
목차
1. 마이크로서비스를 이용한 개발
2. 마이크로서비스 관리
3. NGINX가 어떻게 도움을 주나요?
1. 마이크로서비스를 이용한 개발
마이크로서비스 아키텍처는 프로젝트가 성장함에 따라 다른 아키텍처 모델에서 발생하는 문제를 해결하기 위해 자주 채택합니다. 기존의 모놀리식 아키텍처는 기능을 구성 요소 모듈로 논리적으로 분리할 수 있지만, 모든 모듈이 단일 코드베이스에 유지되고 모듈 간에 복잡한 상호 의존성이 존재하기 때문에 다른 모듈을 손상시키지 않고 한 모듈의 코드를 변경하기가 어렵습니다. 개발자가 몇 개의 모듈에만 집중하더라도 다른 모듈의 변경 사항이 해당 모듈에 영향을 미칠 수 있기 때문에 전체 코드베이스의 변경 사항을 추적하는 데 시간과 에너지를 소비해야 합니다. 새로운 개발자를 고용하여 성장을 촉진하면 기능을 안전하게 추가하거나 버그를 수정하기 전에 방대한 코드베이스를 숙달하는 데 오랜 시간이 걸리기 때문에 수익이 빠르게 감소합니다.
소프트웨어 기능을 마이크로서비스로 구성하면 프로젝트를 더 쉽게 확장할 수 있습니다. 개별 시스템에 대한 개별 코드베이스를 사용하면 개발자가 코드 변경의 영향을 더 쉽게 추론할 수 있습니다. 서로 다른 서비스를 위한 개별 배포 및 인프라를 사용하면 DevOps팀이 필요한 곳에만 컴퓨팅 리소스를 추가하기가 더 쉬워집니다.
마이크로서비스 기반 애플리케이션을 구축하려면 애플리케이션의 구성 요소가 함께 작동하는 방식을 이해하고, 이러한 구성 요소를 구분할 수 있는 인터페이스를 설계해야 합니다. Netflix의 수석 클라우드 아키텍트였던 Adrian Cockecroft가 설명한 것처럼, 마이크로서비스 아키텍처의 목표는 애플리케이션의 구성 요소 마이크로서비스가 외부 서비스 제공업체의 서비스와 시스템의 상호 작용에서와 같이 느슨한 결합과 독립성을 가지고 서로 상호 작용하는 것입니다.
2. 마이크로서비스 관리
마이크로서비스는 특정 형태의 컨테이너화와 결합되는 경우가 많으며, 대부분의 서비스 관리 도구는 컨테이너 관리 및 확장에 중점을 두고 있습니다. Kubernetes 및 Docker Swarm과 같은 일반적인 관리 도구는 마이크로서비스를 염두에 두고 설계되었습니다. 마이크로서비스는 컨테이너나 가상 머신을 관리하기 위한 플랫폼(예: Amazon Elastic Container Service(ECS)에 배포되는 경우가 많지만, 더 일반적으로는 Amazon Elastic Kubernetes Service(EKS), Azure Kubernetes Service(AKS). Google Kubernetes Engine(GKE) 같은 관리형 Kubernetes 클라우드 플랫폼이나 Red Hat OpenShift Container 플랫폼 및 Rancher 같은 Kubernetes PaaS 플랫폼에 배포되는 경우가 더 많습니다.
마이크로서비스를 배포하는 것은 모놀리식 아키텍처에서 전환할 때 가장 어려운 측면 중 하나인데, 그 이유는 모놀리식에서는 문제가 되지 않는 여러 도메인에 걸친 API 버전과 통합 테스트를 고려해야 하기 때문입니다. 따라서 마이크로서비스 배포에 있어 자동화된 모니터링은 각 구성 요소가 원활하게 작동하는지 확인하기 위해 매우 중요합니다. 마이크로서비스 애플리케이션의 부분적인 장애는 모놀리스보다 훨씬 더 흔하게 발생하므로 장애 관리를 염두에 두고 시스템을 설계해야 합니다.
3. NGINX가 어떻게 도움을 주나요?
NGINX Plus와 NGINX Open Source는 Dropbox, Netflix, Zynga 등 트래픽이 많은 웹사이트에서 사용되는 동급 최고의 로드 밸런싱 솔루션입니다. 전 세계 3억 5,000만 개 이상의 웹사이트가 콘텐츠를 빠르고 안정적이며 안전하게 전송하기 위해 NGINX Plus와 NGINX Open Source를 사용하고 있습니다.
소프트웨어 기반 Application Delivery Controller(ADC)인 NGINX Plus는 최신 마이크로서비스 아키텍처에 필수적인 속도, 구성 가능성, 안정성을 제공하도록 설계되었습니다:
- NGINX Plus는 간단한 서비스 관리를 위한 동적 재구성을 제공하고 Kubernetes와 같은 일반적인 마이크로서비스 관리 도구와 쉽게 통합됩니다. Netflix와 같은 선두 기업은 마이크로서비스 배포의 핵심으로 NGINX를 사용합니다.
- 대규모로 운영하려면 자세한 모니터링이 필요합니다. NGINX Plus는 강력한 live activity monitoring을 제공하므로 서비스가 필요한 곳에 리소스를 로드하고 집중하기 위해 어떻게 반응하는지 확인할 수 있습니다.
- 소프트웨어 기반 로드 밸런서인 NGINX Plus는 구성이 지속적으로 변경되는 multi-service deployments에서 service delivery에 적합합니다.
컨테이너화가 마이크로서비스 여정의 일부인 경우, NGINX Ingress Controller는 컨테이너화된 마이크로서비스를 위한 관리 솔루션을 제공할 뿐만 아니라 이기종 마이크로서비스 환경 간의 연결을 위한 솔루션을 제공합니다.
지금 바로 NGINX STORE에 문의하여 최신 앱을 제공하는 데 어떤 도움을 받을 수 있는지 알아보세요. NGINX에 대한 최신 소식을 빠르게 전달받고 싶으시다면, 아래의 뉴스레터를 구독하세요.