모던 앱의 정의

고객과 커뮤니티 구성원으로부터 계속해서 들었던 말은 그들이 모던 앱 을 만들고 싶어한다는 것입니다. 이 용어는 사람마다 다른 것을 의미할 만큼 광범위하므로 Dev 및 DevOps 동료에게 모던 앱이 그들에게 어떤 의미인지 물었습니다. 우리는 모던 앱에 필요한 모든 중요한 요소를 통합하고 향후 애플리케이션 개발 및 디자인 작업을 위한 체크 리스트 및 참조 지점 역할을 하는 견고한 정의를 만드는 것이라고 했습니다.

개발자, 아키텍처 및 DevOps 엔지니어는 애플리케이션 설계 및 구축과 관련하여 더 이상 현상 유지에 만족하지 않습니다. 우리는 항상 그들과 이야기하기 때문에 이것을 알고 있습니다. 그들은 한 클라우드에서 다른 클라우드로 애플리케이션을 Porting하는 문제에 지쳤습니다. 예상치 못한 수요를 충족하기 위해 추가 컴퓨팅 인프라를 신속하게 가동해야 하는 극심한 압박을 경험했습니다. 이들은 대규모 장애나 운영 중단으로 어려움을 겪은 후 적절한 자산을 배치하기 위해 노력해 왔습니다. 기본적으로 이들은 기존 애플리케이션 아키텍처의 스트레스와 번거로움에 지쳤습니다.

애플리케이션 세계는 컨테이너, API 및 진정한 분산 컴퓨팅을 수용하도록 발전했습니다. 또한 CNCF(Cloud Native Computing Foundation)는 컨테이너, CI/CD, Service Mesh, 관찰 가능성 및 분산 데이터베이스를 포함한 Cloud‑Native 애플리케이션에 대한 계층 및 아키텍처 고려 사항을 설명하는데 매우 유용한 Trail Map 포함하여 애플리케이션에 대한 강력한 고급 비전을 제시했습니다.

NGINX팀은 이러한 강력한 기반을 구축하고 개발자, 아키텍처 및 DevOps 엔지니어가 애플리케이션을 설계하고 배포할 때 벤치마킹할 수 있는 정의를 만들고 싶었습니다. 몇 개월 동안 먼저 내부적으로 애플리케이션 개발 패턴을 논의한 후 다음으로 고객 및 커뮤니티 구성원과 논의하여 이 정의를 만들었습니다. 우리는 정의를 4개의 높은 수준의 개념과 그러한 개념을 지원하는 6개의 원칙의 두 부분으로 나누었습니다.

목차

1. 모던 앱의 4가지 개념과 6개의 원칙
1-1. 모던 앱 개념 1: Scalability(확장성)
1-2. 모던 앱 개념 2: Portability(이식성)
1-3. 모던 앱 개념 3: Resiliency(복원력)
1-4. 모던 앱 개념 4: Agility(민첩성)
2. 모던 앱의 6가지 원칙

3. 결론

1. 모던 앱의 4가지 개념과 6개의 원칙

연구 기간 동안 우리는 모던 애플리케이션의 Scalability(확장성), Portability(이식성), Resiliency(복원력) 및 Agility(민첩성)이라는 모던 앱의 4가지 개념이라고 하는 중요한 속성을 가져야 한다는 것을 계속해서 들었습니다. 이제 클라우드 컴퓨팅 및 유비쿼터스 고객 연결의 현대 세계를 위한 애플리케이션을 설계하는 맥락에서 이러한 각각의 의미를 자세히 살펴보고 정의해 보겠습니다.

1-1. 모던 앱 개념 1: Scalability(확장성)

Scalability(확장성)에는 컴퓨팅 용량의 확장과 확장 속도라는 두 가지 요소가 있습니다. 그들은 상호 의존적일 수 있으며 둘 다 동일한 문제를 해결합니다. “fast scaling” 및 “long scaling”의 맥락에서 이를 고려해 보겠습니다.

  • Fast Scaling – 5분 이내에 애플리케이션 용량을 100% 늘릴 수 있는 기능. 이렇게 짧은 시간에 용량을 두 배로 늘릴 수 있다는 것은 애플리케이션이 예상치 못한 수요 증가를 충족하기 위해 신속하게 용량을 확장할 수 있음을 의미합니다. 대부분의 클라우드 인스턴스 및 해당 구성 요소 Workload의 spin-up time은 대략 5분 이하입니다. 따라서 5분이라는 기간은 모던 애플리케이션이 인프라 계층의 제약 조건을 고려하여 모던 애플리케이션이 즉시 확장되도록 구축된다는 것을 의미합니다.
  • Long Scaling – 코드를 크게 리팩터링(Refactoring)하거나 인프라 요구 사항을 크게 변경하지 않고도 1년 이상 동안 애플리케이션 용량을 10배 늘릴 수 있는 기능입니다. “Long Scaling”이 가능한 모던 앱은 인프라 구성 요소에 대한 느슨한 의존성과 느슨한 결합인 깔끔한 설계의 결과이다. 요컨대, 모던 앱의 경우 대규모 확장성은 추가가 아니라 기본 제공됩니다.

1-2. 모던 앱 개념 2: Portability(이식성)

오늘날의 “클라우드 시대”에서 항상 DevOps팀은 한 클라우드에서 다른 클라우드로 애플리케이션을 이동하고 완벽하게 실행되기를 기대하는 것이 꿈이었습니다. 현실은 사뭇 다릅니다. 오늘날 컨테이너가 널리 사용되는 상황에서도 종속성, 도구, 구성의 미묘한 차이 등의 측면에서 클라우드 간의 차이로 인해 조직이 하이브리드 멀티 클라우드 아키텍처로 이동하려고 할 때 즉각적인 이식성을 기대하는 것은 비현실적입니다. 예를 들어 GCP의 Load Balancer 및 Data Store의 특성은 AWS 또는 Azure의 특성을 직접 반영하지 않을 수 있습니다. 여기서 우리는 보다 현실적이고 적절한 이식성의 정의를 제시합니다.

  • Functional Portability(기능적 이식성) – 애플리케이션의 핵심 기능 요소, 코드 및 논리는 실행 중인 환경에 관계없이 동일하게 유지되어야 합니다. 이는 코드가 단일 환경에 밀접하게 결합된 외부 종속성 없이 컨테이너 내에서 깨끗하게 실행됨을 의미합니다. 이러한 방식으로 설계하면 DevOps 팀이 핵심 애플리케이션의 논리 및 요구 사항에 대해 걱정하지 않고도 애플리케이션을 보다 깔끔하게 이동하거나 실행 중인 애플리케이션의 인스턴스를 여러 클라우드에서 Spin Up할 수 있습니다.
  • Management Portability(관리 이식성) – 애플리케이션의 관리 요소는 관찰 가능성, 보안 및 모니터링을 포함하여 환경에 구애받지 않습니다. 이를 통해 환경에 관계없이 동일한 도구와 동일한 보고 기능 집합을 사용하여 동일한 방식으로 애플리케이션을 모니터링, 보호 및 관찰할 수 있습니다. 관리 이식성은 애플리케이션 디자이너가 Public 클라우드의 기본 서비스 또는 제안을 활용하지 않도록 이러한 주요 기능을 명확하게 구분해야 할 수 있습니다. 처음에는 불편했지만 관리 이식성을 위한 모던 앱을 설계하는 것은 다른 세 가지 요소를 충족하는 데 필요합니다.

1-3. 모던 앱 개념 3: Resiliency(복원력)

Resiliency(복원력)은 가동 중지 시간과 관련하여 엄격한 SLA를 준수하는 고가용성(HA) 또는 더 긴 가동 중지 시간 또는 애플리케이션이 온라인 상태일 필요가 없는 기간 동안 공간을 확보하고 궁극적인 일관성 및 서비스 제공을 충분히 수용하는 보다 일반적인 “신뢰성”으로 고가용성을 설명할 수 있는 일반적인 용어입니다. 이를 염두에 두고 우리는 모든 모던 앱이 그 목적을 제대로 수행하기 위해 반드시 갖추어야 하는 두 가지 유형의 복원력을 제안합니다.

  • User‑facing Resiliency(사용자 대면 복원력) – 기계나 사람을 막론하고 애플리케이션 사용자는 모던 앱 자체나 애플리케이션이 의존하는 모든 서비스 또는 인프라의 결함이나 장애로 인해 발생하는 성능 문제나 문제를 절대로 인식해서는 안 됩니다. 사용자가 애플리케이션에서 무언가가 작동하지 않는다는 것을 알게 되면 사용자와 애플리케이션 팀 간의 암묵적인 계약이 깨진 것입니다. 오늘날의 사용자는 액세스하고 사용하려는 모든 서비스 또는 애플리케이션에서 거의 100% 가동 시간을 기대합니다. 기계는 내부 자동화 서비스의 중단에 더 관대할 수 있지만 모든 종류의 오류는 불가피하게 연쇄적으로 발생하여 자동화 서비스와 고도로 의존적인 Microservices에도 영향을 미칩니다.
  • Failover Resiliency(장애 조치 복원력) – 모던 앱은 5분 이내에 중요한 서비스를 평균 Workload를 처리하는 데 필요한 수준의 100%로 복원할 수 있습니다. 이것은 무리한 명령처럼 보일 수 있습니다. Cloudflare 또는 AWS의 스토리지 서비스와 같은 주요 서비스가 중단되면 전체 인터넷이 중단될 수 있습니다. 즉, 여기에서 요점은 애플리케이션 설계자가 영향을 받지 않는 컴퓨팅 리소스로의 장애 조치를 애플리케이션 설계의 핵심 부분으로 생각하고 자가 치유 및 환경을 고려한 모던 앱에 내포된 부분으로 생각하도록 권장하는 것입니다.

1-4. 모던 앱 개념 4: Agility(민첩성)

Agility(민첩성)은 이제 서서히 줄어드는 유행어입니다. 모던 앱의 맥락에서 민첩성은 최소한의 노력과 변화로 신속하고 결정적으로 움직이는 열망적인 상태를 설명한다는 점 입니다. 애플리케이션 개발 팀은 새로운 기능을 테스트하고 Push하는 데 필요한 리소스에 빠르고 쉽게 액세스하여 민첩성의 이점을 얻습니다. DevOps팀은 코드 및 인프라의 단순하고 자동화된 확인 및 배포를 통해 민첩성의 이점을 얻습니다.

  • Code Agility(코드 민첩성) – 애플리케이션 개발 팀이 원하는 만큼 자주 새 코드를 제공하는 기능. 고성능 모던 앱을 구축하는 기업은 하루에도 여러 번 새 코드를 제공할 수 있는 프로세스와 환경을 만들어야 합니다. 애플리케이션 자체는 지속적으로 새로운 코드를 흡수하도록 설계되어야 합니다. 대부분의 경우 이는 애플리케이션이 Microservices로 구성되고 API를 통해 연결되어 느슨한 결합을 시행하고 애플리케이션 내 코드 의존성과 경직성을 줄인다는 것을 의미합니다.
  • Infrastructure Agility(인프라 민첩성) – 애플리케이션 개발 팀, 보안 팀 및 DevOps팀을 포함한 모든 “고객”의 요구 사항을 충족하기 위해 인프라를 가동 또는 축소하는 기능. 이것은 앞서 언급한 개념, Scalability(확장성)Portability(이식성)까지 올라갑니다. 진정으로 민첩한 개발과 모던 앱 정신을 유지하려면 일부 유형의 인프라 셀프 서비스와 준비된 서비스 및 애플리케이션의 카탈로그를 팀이 사용할 수 있어야 합니다.

2. 모던 앱 의 6가지 원칙

모던 앱의 4가지 개념 요소를 충족하기 위해 대부분의 모던 앱은 다음 6가지 원칙을 따르는 아키텍처를 사용합니다.

1. Be Platform Agnostic(플랫폼에 구애받지 않음) – 이것은 이식성과 관련이 있지만 동일하지는 않습니다. Agnosticism란 애플리케이션이 실행될 가능성이 있는 플랫폼이나 환경을 전혀 고려하지 않고 실행되도록 구축되었음을 의미합니다. 컨테이너는 플랫폼에 구애받지 않는 런타임을 위한 사실상의 표준이 되었지만 애플리케이션을 컨테이너화할 필요는 없습니다.

나중에 개발된 플랫폼에서 코드를 추상화할 필요가 없도록 개발 프로세스 초기에 이 원칙을 애플리케이션에 적용하는 것이 중요합니다.

2. Prioritize Open Source Software(오픈 소스 소프트웨어 우선 순위 지정) – 오픈 소스 소프트웨어(OSS)가 빠르게 세상을 잠식하고 있습니다. 모던 앱은 이식성과 확장성을 설계하기 위해 팀이 코드의 내부를 살펴볼 수 있어야 하므로 가능하면 OSS를 사용하는 것이 모던 앱 정신을 유지하는 데 중요합니다.

3. Define Everything (Possible) by Code(코드로 가능한 모든 것을 정의) – 모던 앱은 사람보다 빠른 속도로 움직여야 합니다. 모던 앱 요구 사항 및 속성의 모든 측면에 대한 자동화 및 프로그래밍 방식 정의는 이제 중요한 사항입니다. 물론 아직까지 완전히 자동화된 애플리케이션은 없습니다. 인간은 핵심 결정을 내리고 비정상적인 문제를 해결하기 위해 Loop에 남아 있어야 합니다. 그러나 모던 앱은 “Tribal Knowledge”이나 Runbook에서 벗어나 더 많은 정의와 기능을 코드로 꾸준히 그리고 지속적으로 추진함으로써 스스로를 구별할 수 있습니다.

4. Design with Automated CI/CD as a Native/Default State(자동화된 CI/CD를 기본/기본 상태로 사용하여 설계) – 대부분의 경우 애플리케이션이 구축된 다음 CI/CD Pipeline에 쏟아집니다. 모던 앱은 CI/CD 자동화의 궁극적인 요구 사항인 코드 Push, 인프라 구축, 심지어 보안 요구 사항까지 고려하여 처음부터 설계되었습니다.

5. Practice Secure Development(안전한 개발 연습) – 모두가 이것이 중요하다는 데 동의하지만 실제로 그렇게 하는 사람은 거의 없습니다. 이는 소프트웨어 구성 분석(SCA), 정적 애플리케이션 보안 테스트(SAST), 동적 코드 분석(DCA) 및 서식 검사기를 사용하여 개발 프로세스에서 가능한 한 빨리 모든 코드를 테스트하는 것을 의미합니다. 또한 배포 전에 모든 코드를 테스트하는 것을 의미합니다. CI/CD Pipeline은 실시 배포 전에 “테스트 완료” 플래그가 필요합니다. 이는 또한 DevOps팀에게 내부 Microservices 트래픽 암호화, WAF가 실행 중이 아니면 애플리케이션을 배포하지 않고 디지털 인증서 갱신 및 순환을 자동화하는 등의 보안 모범 사례를 준수하도록 보장하는 것을 의미합니다.

6. Widely Distribute Storage and Infrastructure(스토리지 및 인프라를 광범위하게 배포) – 오늘날 모던 앱의 최종 사용자는 어디에나 있을 수 있습니다. 이는 집, 직장, 쇼핑을 의미하는 것이 아니라 전 세계 어디에서나 WiFi를 사용할 수 있는 비행기를 타고 그 위를 날 수 있다는 것을 의미합니다. 모던 앱은 이러한 현실을 인하고 글로벌 하고 분산 전송 및 스토리지 기능을 설계해야 합니다.

또한 모던 앱은 분산 컴퓨팅의 이점을 활용하여 복원력, 성능 및 확장성을 향상 시킵니다. 진정한 분산형 스토리지는 데이터의 일관성과 상시 가용성을 보장함으로써 함으로써 4가지 핵심 개념 요소를 제공하는 기능을 크게 향상 시킬 수 있습니다. 단일 지리적 위치뿐만 아니라 진정으로 분산된 인프라도 4가지 핵심 개면 요소의 요구 사항을 충족하는 데도 매우 중요합니다. 고객이 어디에 있든 스토리지와 컴퓨팅을 고객에게 더 가까이 이동하면 성능이 향상될 수 있습니다. 여러 영역이나 클라우드 또는 하이브리드 배포에 환경에서 스토리지와 컴퓨팅을 복제하면 복원력과 확장성이 향상됩니다.

3. 결론

슈뢰딩거의 고양이처럼 모던 앱을 향한 노력은 두 가지 상태에 동시에 존재하는 것을 의미합니다. 현재 클라우드 및 하이브리드 환경의 실제 환경와 애플리케이션을 개발하고 제공하는 데 필요한 시간 및 예산 제약이 있습니다. 그리고 완전히 자동화되고 매우 안전하며 완전히 독립적이며 즉시 확장 가능하고 완벽한 모던 앱의 이상적인 환경이 있습니다. 물론 현실은 엉망진창 입니다. 컨테이너에 있지 않으면 5분 안에 용량을 두 배로 늘릴 수 없으며 코드 리팩터링(Refactoring) 없이는 다른 환경으로 쉽게 이동할 수 없는 Monolithic 애플리케이션을 실행하고 있을 수 있습니다. 하지만 그렇다고 해서 여기에 제시된 모던 앱의 개념과 원칙이 도움이 되지 않거나 더 나은 상태로 인도하지 않는다는 의미는 아닙니다. 또한 기술의 세계가 변화하고 확장됨에 따라 정의를 수정해야 할 것으로 예상합니다.

서버리스(Serverless) 컴퓨팅, 점점 더 정교해지는 Low‑Code/No‑Code 애플리케이션 플랫폼, AI 기반 보안 애플리케이션, Edge 노드 컴퓨팅 용량을 갖춘 CDN 등 정의에 딱 들어맞지 않는 소프트웨어 모델이 이미 있습니다. 그렇기 때문에 이 정의는 항상 확장되는 더 나은 기술과 함께 확장되고 성장해야 합니다. The Twelve Factor App이 오늘날에도 여전히 적용되는 것처럼 모던 앱의 정의가 미래에도 잘 유지되기를 바랍니다. 현재 상태에서 사용자, 개발자 및 기타 모든 이해 관계자를 위해 가능한 최선의 방법으로 응용 프로그램을 Build하기 위한 탐구를 안내할 수 있기를 바랍니다.

솔루션 개요를 확인하고 NGINX Plus 성능을 직접 테스트 및 사용해 보려면 지금 30일 무료 평가판을 신청하거나 사용 사례에 대해 최신 소식을 빠르게 전달받고 싶으시면 아래 뉴스레터를 구독하세요.