새로운 오픈 소스 기반의 현대적 애플리케이션 참조 아키텍처

NGINX | 2021년 8월 24일

NGINX는 지난 몇 년간 애플리케이션을 이식 가능하고, 클라우드 네이티브이며, 복원력과 확장성이 뛰어나고, 쉽게 업데이트할 수 있는 진정한 현대적 적응형 애플리케이션으로 만들어야 한다고 이야기해 왔습니다. 최근에는 현대적인 앱의 개발과 제공을 촉진하는 두 가지 개념이 주목받고 있습니다. 첫 번째는 플랫폼 운영으로, 전사 차원의 플랫폼 팀이 개발 및 DevOps 팀의 업무에 필요한 모든 도구를 선별하고 유지 관리하며 연동하고 보호하는 것입니다. 두 번째는 시프트 레프트로, 개발 수명 주기의 초기 단계부터 프로덕션 수준의 보안, 네트워킹 및 모니터링을 애플리케이션에 통합하는 것을 의미합니다. 이에 따라 개발자는 과거 ITOps가 담당하던 기능에 대해 더 많은 책임을 맡게 되지만, 동시에 이러한 기능을 구체적으로 구현하는 방식에 있어 더 많은 선택권과 자율성을 갖게 됩니다.

이론적으로는 좋아 보이지만, 실제로 Platform Ops를 구현하고 인프라 및 운영 도구를 ‘시프트 레프트’하는 일은 쉽지 않습니다. 우선 점점 더 많은 앱이 고도로 분산된 방식과 컨테이너화된 환경에 배포되고 있으며, 계속 늘어나는 Kubernetes 오케스트레이션 엔진 중 하나를 사용하고 있습니다. 또한 기업은 클라우드 간의 차이와 클라우드 및 온프레미스 환경 간의 차이로 인해 어려움을 겪지 않으면서 여러 환경에 앱을 배포하기를 원합니다.

현대적인 앱을 위한 ‘골든 이미지’

당연하게도 고객과 커뮤니티는 자신들이 직면한 과제를 해결할 수 있도록 계속해서 저희에게 도움을 요청하고 있습니다. 이들은 모든 장점을 누리고 싶어 하지만 보안, 네트워킹, 관측 가능성 및 성능 모니터링, 확장성 등 모든 요소를 하나로 결합하려면 상당한 노력이 필요합니다. 그렇게 구축한 플랫폼을 프로덕션 환경에서 충분히 안정적으로 운영할 수 있게 만드는 데는 더 많은 노력이 듭니다. 이들은 이렇게 묻습니다. “하나의 리포지토리에서 바로 실행할 수 있는 현대적인 앱용 ‘골든 이미지’는 왜 없을까요?”

좋은 질문입니다. 저희는 이에 대한 좋은 답을 찾는 것을 스스로의 과제로 삼았습니다. 먼저 이 질문을 좀 더 구체적으로 바꾸어 보았습니다. 저희가 보기에 고객과 커뮤니티가 묻는 것은 다음과 같습니다. “서로 다른 소프트웨어 제품을 더욱 긴밀하게 통합하고, 스택을 조정해 적절한 구성과 설정을 확정함으로써 저희의 수고와 번거로움을 덜어주실 수 있나요? 또한 기반 서비스와 기능의 차이 때문에 구성을 대폭 변경하지 않고도 여러 클라우드에서 애플리케이션을 더 쉽게 실행할 수 있게 해주실 수 있나요?”

이러한 질문에 실질적으로 답하는 솔루션은 수백 개 기업의 파트너와 모든 주요 클라우드 공급업체뿐만 아니라 전체 커뮤니티에 도움이 되며, 진정으로 모두가 이익을 얻는 비제로섬의 성과라고 생각합니다. 이상적으로 이 솔루션은 단순한 ‘장난감’이 아니라 견고하고 충분히 테스트되었으며 Kubernetes 환경에서 실행되는 실제 프로덕션 애플리케이션에 바로 배포할 수 있는 코드여야 합니다. 솔직히 말해, 누구든 GitHub에서 곧바로 우리의 작업물을 가져다 쓸 수 있기를 바랍니다.

본론부터 말씀드리면, 오늘 NGINX Sprint 2.0에서 저희 솔루션인 Modern Apps Reference Architecture(MARA)의 첫 번째 버전을 공개합니다. MARA는 모던 앱을 위한 오픈 소스 아키텍처이자 배포 모델입니다. 마음껏 활용하고 가져다 쓰시길 바라며, 더 나아가 개선하거나 맞춤화할 수 있도록 수정하거나 포크해 주시면 더욱 좋겠습니다. 이 글에서는 저희가 무엇을 구축했으며 어떻게 작동하는지 살펴봅니다.

NGINX 최신 앱 참조 아키텍처

현대적 적응형 애플리케이션의 정의

먼저 이상적인 현대적 적응형 애플리케이션을 정의해 보겠습니다. 이 애플리케이션은 마이크로서비스로 구성되고 컨테이너화되며 클라우드 네이티브 설계 원칙(느슨한 결합, 손쉬운 확장, 인프라에 종속되지 않음)을 따를 수도 있지만, 반드시 그래야 하는 것은 아닙니다. 현대적 애플리케이션의 핵심 철학 중 하나는 인프라 추상화의 이점을 활용할 수 있도록 아키텍처를 설계하는 것입니다. 이 정의는 간단하지만 모든 참조 아키텍처의 기본 틀을 확립한다는 점에서 중요합니다.

현대적인 애플리케이션 아키텍처의 핵심 요소로는 이식성, 확장성, 복원력, 민첩성이 있습니다.

  • 이식성 – 다양한 유형의 디바이스와 인프라, 퍼블릭 클라우드 및 온프레미스 환경에 애플리케이션을 손쉽게 배포할 수 있습니다.
  • 확장성 – 전 세계 어디서나 수요의 급증이나 감소에 맞춰 앱을 빠르고 원활하게 확장하거나 축소할 수 있습니다.
  • 복원력 – 애플리케이션은 서로 다른 가용 영역, 클라우드 또는 데이터 센터에 새로 생성된 클러스터나 가상 환경으로 원활하게 장애 조치할 수 있습니다.
  • 민첩성 – 자동화된 CI/CD 파이프라인을 통해 앱을 신속하게 업데이트할 수 있습니다. 최신 앱 환경에서는 코드 변경 속도가 빨라지고 코드 배포 빈도가 높아진다는 의미이기도 합니다.

참조 아키텍처 설계

우리는 현대적 앱에 대한 정의와 배포 패턴의 기본 요구 사항을 충족하는 플랫폼을 만들고자 했습니다. 기술적 목표 외에도 현대적인 앱 설계 원칙을 제시하고 커뮤니티가 Kubernetes에 배포하도록 장려하고자 했습니다. 또한 개발자, DevOps 및 플랫폼 운영 팀이 자유롭게 활용하고 수정하며 개선할 수 있는 코드를 제공하고자 했습니다. 요약하면, 우리가 제공하고자 한 것은 다음과 같습니다:

  • 장난감 수준이 아닌, 손쉽게 배포할 수 있는 프로덕션용 Kubernetes 아키텍처
  • 파트너 제품이 Kubernetes에서 어떻게 작동하는지 보여주는 플랫폼
  • Kubernetes Ingress 컨트롤러를 손쉽게 빌드하고 배포할 수 있는 원클릭 버튼
  • 향후 제품 및 제휴 통합을 위한 테스트 환경
  • 플러그인 방식으로 확장 가능한 배포 프레임워크
  • 검색과 도입을 간소화하는 단일 오픈 소스 코드 저장소

다음은 플랫폼의 첫 번째 버전을 위해 내린 설계 및 파트너십 관련 결정입니다(다음 버전에 대한 계획은 버전 2에서 훨씬 더 많은 통합과 향상된 유연성을 참조하세요). 파트너를 폭넓게 포용하는 레퍼런스 앱을 만드는 것이 파트너와 커뮤니티 모두의 참여를 이끌어 내는 핵심이라고 굳게 믿습니다.

코드 배포 방식

샘플 애플리케이션을 설치하고 배포하려면 단일 명령을 실행하여 시작 스크립트를 호출합니다. 그러면 다음 Pulumi 프로젝트가 명시된 순서대로 실행됩니다. 각 프로젝트 이름은 repository의 루트 디렉터리를 기준으로 한 디렉터리 이름에 해당합니다. 자세한 내용은 README를 참조하세요.

vpc - Defines and installs VPC and subnets to use with EKS  └─eks - Deploys EKS
    └─ecr - Configures ECR for use in EKS cluster
      └─kic-image-build - Builds new NGINX Ingress Controller image
        └─kic-image-push - Pushes image built in previous step to ECR
          └─kic-helm-chart - Deploys NGINX Ingress Controller to EKS 
                             cluster
            └─logstore - Deploys Elastic log store to EKS cluster
              └─logagent - Deploys Elastic (filebeat) logging agent to 
                           EKS cluster
               └─certmgr - Deploys cert-manager.io Helm chart to EKS 
                           cluster
                 └─anthos - Deploys Bank of Anthos application to EKS 
                            cluster

버전 2에서 더욱 다양해진 통합 기능과 향상된 유연성

초기 버전만으로는 Kubernetes 환경에 필요한 모든 통합 기능을 제공하지 못할 수 있다는 점을 잘 알고 있습니다. Platform Ops는 무제한이 아닌 현명한 선택을 지향합니다. Platform Ops, DevOps 및 개발자 팀이 새로운 참조 플랫폼을 더 쉽게 사용해 보고 도입을 검토할 수 있도록, 가까운 시일 내에 다음을 비롯한 다양한 개선 사항을 적용할 계획입니다:

  • Digital Ocean, OpenShift, Rancher, vSphere 및 기타 Kubernetes 환경 구축
  • NGINX Plus Ingress Controller를 관리하고 모니터링할 수 있도록 NGINX Controller>와 통합[편집자 – NGINX Controller는 이제 F5 NGINX Management Suite입니다.]
  • 즉시 사용 가능한 구성을 제공합니다: NGINX App Protect
  • 다음과 같은 F5 제품 및 서비스와 통합: BIG‑IP, Cloud Services, Volterra
  • Integrate with NGINX Service Mesh 및 Istio 기반 Aspen Mesh와 통합
  • 기본적으로 통합됩니다: Terraform 및 기타 자동화 도구
  • 다른 CI/CD 옵션 지원
  • 인프라 및 애플리케이션 서비스를 위해 별도의 클러스터 또는 여러 클러스터 배포

저희의 작업이 다른 참조 플랫폼을 위한 프레임워크이자, 차별화된 모든 유형의 현대적 애플리케이션을 구축하는 데 활용할 수 있는 출발점이 되기를 바랍니다. Kubernetes는 현대적 애플리케이션을 구축하는 동시에 플랫폼 운영과 시프트 레프트 문화를 강화하는 매우 강력한 수단이므로, 저희의 참조 아키텍처는 확장성과 플러그인 연동성이 높을수록 좋습니다. 커뮤니티 여러분이 저희의 작업을 어떻게 평가할지, 그리고 무엇보다 이를 활용해 무엇을 구축할지 기대됩니다.

참조 아키텍처 시작하기

레퍼런스 플랫폼을 다운로드하고 직접 사용해 보세요. 여러분의 의견과 다음에 어떤 기능을 개발하면 좋을지 알려 주세요. 풀 리퀘스트도 언제든 환영합니다. 커뮤니티와 모든 개발자에게 기여하는 차세대의 현대적이고 유연하며 쉽게 활용할 수 있는 애플리케이션을 만들기 위해 여러분과 협력하기를 기대합니다.

관련 게시물

이 게시물은 연재 시리즈의 일부입니다. 앞으로 MARA에 새로운 기능을 추가할 때마다 자세한 내용을 블로그에 게시할 예정입니다:


공유

관련 블로그 게시물

시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric
NGINX | 2023. 11. 30.

시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric

이 영상에서는 KubeCon의 NGINX 부스를 찾아가, 저희가 공개한 Kubernetes Gateway API 구현을 살펴봅니다.

F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법
NGINX | 2023. 03. 23.

F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법

앱 보안을 강화하는 두 가지 방법을 소개합니다. NGINX Management Suite를 통해 WAF 운영에 대한 가시성을 높이고, NGINX App Protect WAF를 활용해 코드형 보안을 구현하는 것입니다.

Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션
NGINX | 2021. 09. 27.

Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션

개발 주체, 개발 철학, 프로덕션 환경 준비도, 보안 및 지원을 기준으로 어떤 NGINX Ingress 컨트롤러가 가장 적합한지 알아보세요.

진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법
NGINX | 2021. 07. 06.

진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법

NGINX App Protect Denial of Service(DoS)가 계층 7 DoS 공격을 방어하기 위해 완화 방법을 실시간으로 조정하는 방식을 설명합니다. 정상적인 사용자 행동과 서버 상태에 대한 모델을 생성하여 공격을 나타내는 이상 징후를 감지하고 맞춤형 완화 시그니처를 적용할 수 있습니다.

NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리
NGINX | 2021. 06. 30.

NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리

NGINX Instance Manager 버전 1.0에는 두 가지 새로운 기능이 도입되었습니다. NGINX 인스턴스에 태그와 사용자 역할을 지정하면 전체 그룹에 구성을 한 번에 적용할 수 있습니다. 인증서 검사는 만료 예정인 인증서를 감지하여 서비스 중단을 방지할 수 있도록 인증서를 교체할 수 있게 해줍니다.

Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유
NGINX | 2015. 03. 25.

Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유

Netflix가 글로벌 콘텐츠 전송 네트워크인 Open Connect의 스트리밍 미디어 기술로 NGINX를 선택한 이유를 NGINX 개발자 Gleb Smirnoff에게서 알아보세요.