NGINX Unit: 모던앱을 위한 차세대 앱 서버
NGINX는 엄청나게 빠른 애플리케이션을 제공하는 데 중요한 역할을 합니다. 웹 서버, Reverse Proxy, 소프트웨어 Load Balancer, API Gateway 및 콘텐츠 캐시로 잘 알려진 NGINX Open Source 및 NGINX Plus는 애플리케이션 개발자와 DevOps팀 사이에 널리 보급되어 채택되고 있습니다. NGINX 애플리케이션 플랫폼에 최근에 추가된 것은 동적 애플리케이션 서버인 NGINX Unit 앱 서버 입니다.
1990년대 초에 개인용 컴퓨터가 유비쿼터스화되면서 애플리케이션을 사용하려는 욕구가 커졌습니다. 당시 애플리케이션 개발 초기 개념부터 Production 배포까지 평균 3년이 걸렸습니다. 이것은 극적으로 바뀌었습니다. Amazon은 11.7초마다 새롭거나 업데이트된 애플리케이션을 배포하고 120년 역사의 미국 명품 소매업체인 Nordstrom은 배포 빈도를 연 2회에서 월간으로 늘렸습니다.
애플리케이션을 시장에 빨리 출시하면 기업은 경쟁에서 앞서 나가고, 신속하게 규모를 확장하며, 디지털 채널을 통해 수익을 높일 수 있습니다. 개발자는 이 새로운 세계에서 중심 무대를 차지하지만 무서운 속도로 새로운 애플리케이션을 개발하고 배포해야 한다는 압박을 받고 있습니다. 그 결과 개발자 생산성을 지원하는 유연한 다국어 환경을 제공해야 하는 인프라 및 운영(I&O)팀에 압력이 가해집니다.
목차
1. 앱 서버 – 앱을 위한 조명 유지(Keeping the Light)
2. 앱 서버 구성 변경을 자주 변경하면 다운타임이 발생하고 운영 비용이 높아집니다.
3. 서로 다른 언어를 위한 다양한 앱 서버로 인프라 복잡성 증가
4. 기존 앱 서버는 Modern Microservices 기반 애플리케이션용으로 설계되지 않았습니다.
5. NGINX Umit는 이러한 문제를 어떻게 해결합니까?
5-1. 다운타임이 없는 일관된 구성을 위한 동적 API
5-2. 운영 복잡성 감소를 위한 다국어 지원
5-3. 최적화된 Microservices 지원을 위한 가볍고 유연한 아키텍처
5-4. NGINX Unit은 코드에서 고객에 이르는 플랫폼의 핵심 구성 요소입니다.
1. 앱 서버 – 앱을 위한 조명 유지(Keeping the Light)
먼저 앱 서버가 무엇인지 살펴보겠습니다. 서로 다른 언어를 위한 서로 다른 앱 서버로 인프라 복잡성 증가의 기본적인 역할은 클라이언트에게 일반적으로 비즈니스 로직이라고 불리는 것에 대한 액세스를 제공하는 것입니다. 이는 클라이언트 요청에 대한 응답을 동적으로 생성하여 비즈니스, 서비스 또는 애플리케이션에서 제공하는 특수한 기능을 제공하도록 데이터를 변환하는 코드입니다. 앱 서버는 클라이언트와 Backend 계층 사이에 위치하여 트랜잭션 처리, Resource/Connection Pooling, Load Balancing 및 중복성을 처리합니다. 이를 통해 애플리케이션 개발자는 비즈니스 로직에만 집중할 수 있습니다.
앱 서버는 애플리케이션을 만들고 실행하기 위한 프레임워크를 제공합니다. Load Balancer가 I&O 및 DevOps팀의 핵심인 것처럼 앱 서버는 개발자의 핵심입니다.
2. 앱 서버 구성 변경을 자주 변경하면 다운타임이 발생하고 운영 비용이 높아집니다.
개발자는 종종 새로운 애플리케이션 기능을 확장하거나 지원하기 위해 앱 서버의 구성을 변경해야 합니다. 앱 서버는 데이터베이스, 네트워킹 기능, 다른 언어 또는 동일한 언어의 다른 버전으로 작성된 응용 프로그램과 같은 Backend의 다양한 구성 요소 측면과 상호 작용해야 합니다. 예를 들어 애플리케이션 자체가 서로 다른 버전의 PHP 또는 Python을 사용하기 때문에 여러 버전의 애플리케이션을 지원해야 할 수 있습니다. 또한 앱 서버는 VM 및 컨테이너와 같은 여러 배포 환경을 지원해야 합니다.
앱 서버가 제공하는 기능과 앱 서버가 실행되는 생태계의 복잡성을 감안할 때, 해당 구성을 변경하려면 일반적으로 재시작해야 합니다. 이는 복잡한 네트워킹을 통해 신중하게 계획하거나 피해야 하는 애플리케이션 다운타임을 의미하므로 서비스 중단 및 운영 복잡성으로 이어집니다. 구성 변경이 앱 서버에서 실행하는 여러 애플리케이션 중 하나에 대한 것일 때 재시작하는 것도 힘들지만 재시작하면 모든 항목에 영향을 미치기 때문에, 업데이트를 망설이게 만들기에 충분합니다. 기능 속도가 타격을 받고 개발자 사기도 떨어집니다. 앱 서버는 혁신과 시장 출시 시간 단축의 병목 현상이 됩니다.
3. 서로 다른 언어를 위한 다양한 앱 서버로 인프라 복잡성 증가
기업이 애플리케이션 개발에 보다 유연한 접근 방식을 채택함에 따라 개발자는 종종 애플리케이션의 기능 요구 사항에 가장 적합한 언어를 선택할 수 있습니다. 그것은 그들의 생산성과 사기를 향상시켜줍니다. Open Source PaaS(Platform-as-a-Service) 프로젝트인 Cloud Foundry Foundation의 보고서에 따르면 “다국어 전략은 비즈니스 속도를 향상시키고, 유연성, 이식성 및 상호 운용성을 지원하며, 최고의 개발자를 유치합니다.”
확실히 개발자에게 선택의 자유를 제공하고 싶지만 많은 언어를 지원하는 것은 운영 부담을 수반합니다. Cloud Foundry Foundation 보고서에는 엔터프라이즈 개발에 사용되는 20개 이상의 언어가 나열되어 있으며 그 중 Java, JavaScript, C++, C#, Python, PHP 등 6개 언어가 많이 사용됩니다. 기존 앱 서버는 하나의 언어(또는 언어의 단일 버전)만 지원하므로 사용하는 모든 언어는 I&O 팀이 설치, 구성 및 유지 관리할 또 다른 앱 서버를 의미합니다. 운영 환경에서 실행되는 애플리케이션 서버의 특성은 말할 것도 없습니다. 이로 인해 자원이 크게 소모될 수 있습니다. 또한 기업에서 사용하는 각 언어에 대해 별도의 호스트를 유지해야 합니다. 이는 자본 비용과 운영 비용 모두에 직접적인 영향을 미칩니다.
4. 기존 앱 서버 는 Modern Microservices 기반 애플리케이션용으로 설계되지 않았습니다.
소프트웨어 아키텍처에 대한 Microservices 접근 방식은 각각 인증 또는 알림과 같은 단일 기능을 수행하는 여러 개의 작은 구성 요소에서 크고 복잡한 애플리케이션을 구축합니다. 이 접근 방식을 사용하면 각 Microservices가 탄력적이기 때문에 애플리케이션을 쉽게 확장할 수 있습니다. 하나의 Microservices 인스턴스가 실패해도 다른 Microservices 인스턴스는 계속 작동합니다. Microservices 기반 애플리케이션은 가볍고 유연하며 일반적으로 컨테이너에 배포됩니다.
기업은 점점 더 Microservices를 사용하여 애플리케이션을 현대화하고 있습니다. Microservices용 애플리케이션 성능 관리를 제공하는 스타트업인 LightStep의 글로벌 Microservices 동향 보고서에 따르면 기업의 86%가 Microservices가 5년 이내에 기본 아키텍처가 될 것으로 예상합니다. Microservices 자체는 가볍고 유연하며 일반적으로 컨테이너에 배포됩니다.
기존 앱 서버는 프레젠테이션 계층, 데이터 계층 및 비즈니스 로직을 포함하는 애플리케이션 계층으로 구성된 3계층 모놀리식(Monolithic) 애플리케이션용으로 설계되었습니다. 제공하는 애플리케이션과 마찬가지로 레거시 앱 서버는 설치 공간이 커서 가벼운 무게와 이식성이 핵심인 Microservices 환경에 적합하지 않습니다. 기존 앱 서버를 사용하면 컨테이너 또는 여러 클라우드에서 새 인스턴스를 신속하게 가동하기가 어렵습니다. 그리고 구성 변경으로 인한 재시작은 일반적으로 시간이 오래 걸리며, 어떤 경우에는 Microservices의 작동 기간(Runtime)보다 더 오래 걸리므로 Microservices의 목적이 무산됩니다.
5. NGINX Unit는 이러한 문제를 어떻게 해결합니까?
기존 앱 서버와 모던 애플리케이션 환경 간의 불일치를 해결하기 위해 NGINX Unit을 개발했습니다. NGINX Unit은 단일 애플리케이션과 분산형 Microservices 애플리케이션 아키텍처 모두에 적합한 Open Source 동적 애플리케이션 서버입니다.
5-1. 다운타임 없는 일관된 구성을 위한 동적 API
NGINX Unit은 구성을 간소화하는 RESTful API 인터페이스를 제공합니다. 인터페이스는 다양한 언어로 작성된 다양한 유형의 애플리케이션에 구성 변경 사항을 적용하기 위한 일관된 메커니즘을 제공합니다. 모든 업데이트는 다운타 없이 원활하게 이루어집니다. I&O 팀은 다운타임을 계획할 필요가 없으며, 시간과 노력을 절약할 수 있으며, 고객은 서비스 중단을 겪을 필요가 없습니다. API를 사용하여 구성 업데이트를 수행하면 DevOps가 구성 관리 도구를 사용하여 이 프로세스를 자동화하고 기존 CI/CD Pipeline과 쉽게 통합할 수 있다는 추가적인 이점이 있습니다.
5-2. 운영 복잡성 감소를 위한 다국어 지원
NGINX Unit은 여러 앱 서버 를 관리하는 부담을 획기적으로 줄여줍니다. 현재 Go, Node.js, Perl, PHP, Python, Ruby 및 Java Servlet Containers의 7개 언어를 지원합니다. 동일한 서버에서 다른 언어로 작성된 응용 프로그램을 실행할 수 있습니다. 또한 다른 버전의 언어(PHP 5 및 PHP 7, Python 2.7 및 Python 3)로 작성된 애플리케이션 버전은 동일한 서버에서 나란히 실행됩니다. 서로 다른 언어 및 버전에 대해 서로 다른 앱 서버 를 유지하거나 별도의 호스트에서 실행할 필요가 없습니다. 하드웨어 비용은 물론 이러한 모든 서버를 관리, 유지 및 보호하는 관련 비용을 절약할 수 있습니다. I&O팀은 이제 일상적인 운영 대신 가치 창출 IT 이니셔티브(Initiatives)에 집중할 시간을 갖게 되었습니다.

5-3. 최적화된 Microservices 지원을 위한 가볍고 유연한 아키텍처
NGINX Unit은 Bare Metal, VM, 컨테이너, 퍼블릭 클라우드, 프라이빗 클라우드 등 어디에나 배포할 수 있는 소프트웨어 패키지입니다. NGINX Open Source와 NGINX Plus를 만든 동일한 팀에서 개발한 NGINX Unit도 NGINX와 동일한 ‘핵심 가치’를 가지고 있습니다. NGINX Unit은 경량이며 크기가 1MB 미만입니다. 메모리 및 CPU 사용률이 매우 낮습니다. 이러한 특성으로 인해 NGINX Unit은 자체적으로 가볍고 일반적으로 컨테이너에서 실행되는 Microservices 기반의 모던 애플리케이션에 이상적이지만 기존 환경에서 실행되는 Monolithic 애플리케이션에도 똑같이 유용합니다.
5-4. NGINX Unit은 코드에서 고객에 이르는 플랫폼의 핵심 구성 요소입니다.
NGINX는 Load Balancer, API 관리 또는 Microservices 기반 아키텍처로 배포되었는지 여부에 관계없이 개발자 커뮤니티의 애플리케이션 제공 요구 사항을 충족한 매우 풍부한 역사를 가지고 있습니다. NGINX 솔루션은 유연하고 가볍습니다. NGINX는 애플리케이션 스택에 완벽하게 통합되어 높은 성능과 안정성을 제공합니다. 애플리케이션 코드에 밀접하게 연결되어 있는 우리의 전통에 충실하면서 우리는 또 다른 중앙 인프라 구성 요소인 앱 서버 를 개발했습니다. 앱 서버 는 일반적으로 개발자의 최초의 인프라 접점입니다. NGINX Unit은 모던 애플리케이션에 대한 앱 서버 요구 사항을 충족합니다.

NGINX Unit은 NGINX가 코드(Code)에서 고객에 이르는 End-to-End 애플리케이션 인프라를 제공하여 멀티 클라우드 환경에서 애플리케이션을 제공하는 광범위한 비전의 일부입니다.
NGINX Unit의 최신 소식을 빠르게 전달 받고 싶으시면 아래 뉴스레터를 구독하세요.
댓글을 달려면 로그인해야 합니다.