클라우드 네이티브 애플리케이션 소개

이 콘텐츠는 Azure용 클라우드 네이티브 .NET 애플리케이션 설계 eBook 에서 발췌한 것으로, .NET 문서에서 제공되거나 오프라인 상태에서도 읽을 수 있는 PDF(무료 다운로드 가능)로 제공됩니다.

Cloud Native .NET apps for Azure eBook cover thumbnail.

어느 날이었습니다. 사무실은 "차세대 황금알"을 찾아내려는 노력으로 분주합니다.

핸드폰이 울립니다. 바로 흥미 진진한 새로운 기회를 가지고 매일 전화하는 친절한 채용 담당자입니다.

그러나 이번에는 다릅니다. 스타트업, 자본 및 풍부한 자금 등의 소식이 들려옵니다.

클라우드, 마이크로 서비스 및 최첨단 기술에 대한 언급은 여러분을 각성하게 만듭니다.

몇 주 후에 여러분은 주요 전자 상거래 애플리케이션을 설계하는 디자인 세션의 신입 사원이 되었습니다. 주요 전자 상거래 사이트와 경쟁하게 됩니다.

어떻게 빌드할까요?

지난 15년 동안의 지침을 따르는 경우 그림 1.1에 표시된 시스템을 빌드할 가능성이 높습니다.

Traditional monolithic design

그림 1-1. 전통적인 모놀리식 디자인

모든 도메인 논리를 포함하는 대규모 코어 애플리케이션을 생성합니다. 여기에는 Identity, Catalog, Ordering 등과 같은 모듈이 포함됩니다. 단일 서버 프로세스 내에서 서로 직접 통신합니다. 모듈은 대규모 관계형 데이터베이스를 공유합니다. 코어는 HTML 인터페이스 및 모바일 앱을 통해 기능을 노출합니다.

축하합니다! 모놀리식 애플리케이션을 방금 만들었습니다.

모든 것이 다 나쁜 것은 아닙니다. 모놀리식은 몇 가지 뚜렷한 이점을 제공합니다. 예를 들어 다음과 같이 간단하게 사용할 수 있습니다.

  • build
  • 테스트
  • 배포
  • 문제 해결
  • 수직 스케일링

오늘날 존재하는 많은 성공적인 앱이 모놀리식으로 만들어졌습니다. 앱이 적합해지고 계속 반복적으로 진화하면서 더 많은 기능이 추가됩니다.

그러나 어떤 시점에서 불편함을 느끼기 시작합니다. 본인이 애플리케이션에 대한 제어권을 잃게 되었다는 사실을 알게 됩니다. 시간이 지남에 따라 이러한 느낌은 더 강렬해지고 결국 Fear Cycle이라는 상태가 됩니다.

  • 앱은 너무 복잡해져서 한 사람이 이해할 수 없는 상황이 됩니다.
  • 여러분은 변화를 두려워합니다. 모든 변화는 의도치 않은 것이며 비용이 많이 드는 부작용을 초래합니다.
  • 새로운 기능/픽스는 까다로워지고, 시간이 많이 걸리며, 구현하는 데 비용이 많이 듭니다.
  • 모든 릴리스는 가능한 작게 유지되며 전체 애플리케이션의 전체 배포가 필요합니다.
  • 한 가지 불안정한 구성 요소가 전체 시스템에서 충돌을 야기할 수 있습니다.
  • 새로운 기술과 프레임워크를 추가하는 것은 옵션이 아닙니다.
  • 애자일 전달 방법론을 구현하는 것은 어렵습니다.
  • 끝없는 "빠른 픽스"로 인해 코드 기반이 악화됨에 따라 아키텍처 침식이 시작됩니다.
  • 결국 ‘컨설턴트’가 와서 다시 작성하라고 합니다.

익숙한 이야기인가요?

많은 조직에서는 시스템 빌드에 클라우드 네이티브 접근 방식을 채택하여 이러한 모놀리식 Fear Cycle을 해결했습니다. 그림 1-2에서는 클라우드 네이티브 기술 및 사례를 적용하여 빌드된 동일한 시스템을 보여 줍니다.

Cloud-Native Design

그림 1-2. 클라우드 네이티브 디자인

애플리케이션이 격리된 작은 마이크로 서비스 집합에서 어떻게 분해되는지 확인합니다. 각 서비스는 자체 포함되며 자체 코드, 데이터 및 종속성을 캡슐화합니다. 각각은 소프트웨어 컨테이너에 배포되고 컨테이너 오케스트레이터에 의해 관리됩니다. 대규모 관계형 데이터베이스 대신 각 서비스는 자체 데이터 저장소를 소유하며, 형식은 데이터 요구 사항에 따라 달라집니다. 일부 서비스는 관계형 데이터베이스에 의존하지만 다른 서비스는 NoSQL 데이터베이스에 따라 달라집니다. 한 서비스는 해당 상태를 분산 캐시에 저장합니다. 코어 백 엔드 서비스로 트래픽을 라우팅하고 많은 공통 문제를 적용하는 API 게이트웨이 서비스를 통해 모든 트래픽이 라우팅되는 방식을 확인합니다. 가장 중요한 것은 애플리케이션이 최신 클라우드 플랫폼에 있는 스케일링 기능, 가용성 및 복원력 기능을 최대한 활용합니다.

클라우드 네이티브 컴퓨팅

방금 우리는 클라우드 네이티브라는 용어를 사용했습니다. 첫 번째로 드는 생각은 “이것이 정확히 무엇을 의미할까”일 것입니다. 소프트웨어 공급업체가 더 많은 물건을 시장에 출시하기 위해 만들어낸 또 다른 업계의 유행어일까요?

다행히도 완전히 다른 문제이며, 이 책을 통해 확신을 갖게 되기 바랍니다.

단기간 내에 클라우드 네이티브는 소프트웨어 업계의 강력한 추세가 되었습니다. 크고 복잡한 시스템을 구성하는 새로운 방법입니다. 이 접근 방식은 최신 소프트웨어 개발 실무, 기술 및 클라우드 인프라를 최대한 활용합니다. 클라우드 네이티브는 시스템을 디자인, 구현, 배포 및 운영하는 방식을 변경합니다.

업계를 이끄는 지속적인 과대 광고와 달리 클라우드 네이티브는 ‘실제’입니다. 400개 이상의 대기업 컨소시엄인 CNCF(Cloud Native Computing Foundation)를 고려합니다. 해당 헌장은 기술 및 클라우드 스택에서 클라우드 네이티브 컴퓨팅을 유비쿼터스로 만드는 것입니다. 가장 영향력 있는 오픈 소스 그룹 중 하나로서 GitHub에서 가장 빠르게 성장하는 오픈 소스 프로젝트를 다양하게 호스팅합니다. 이러한 프로젝트에는 Kubernetes, Prometheus, Helm, EnvoygRPC가 포함됩니다.

CNCF는 오픈 소스 및 공급업체 중립성의 에코시스템을 조성합니다. 이 책에서는 기술에 구애받지 않는 클라우드 네이티브 원칙, 패턴 및 모범 사례를 소개합니다. 동시에 클라우드 네이티브 시스템을 생성하기 위해 Microsoft Azure 클라우드에서 사용할 수 있는 서비스 및 인프라에 대해 설명합니다.

그렇다면 클라우드 네이티브란 정확히 무엇인가요? 편히 앉아서 긴장을 풀고 이 새로운 세상을 탐험해 보겠습니다.