News Feed

진짜 클라우드 네이티브 애플리케이션을 빌드하는 방법

컨텐츠 정보

  • 조회 760

본문

퍼블릭 클라우드와 프라이빗 클라우드를 불문하고 클라우드 네이티브 애플리케이션이 기본 배포 방법으로 자리잡고 있다.

클라우드 네이티브 애플리케이션이란 정확히 무엇이고, 어떻게 빌드할까?

우선 기본 원칙에서 시작해 클라우드 네이티브가 실제로 무엇을 의미하는지 정의하는 것이 중요하다. 많은 기술 용어가 그렇듯이 클라우드 네이티브 역시 잘못 이해되는 경우가 종종 있다. 그런 면에서는 이전에도 그랬고 지금도 어느정도 마찬가지인 클라우드 컴퓨팅 자체와 비슷하다. 단순히 원격 서버에서 애플리케이션을 실행한다고 해서 클라우드 네이티브가 되지는 않는다. 미국 국립과학기술원(NIS)은 2011년에 특별 문건 800-145를 통해 클라우드 컴퓨팅에 대한 공식적인 정의를 다음과 같이 정립했다.

클라우드 컴퓨팅은 구성 가능한 컴퓨팅 리소스(예를 들어 네트워크, 서버, 스토리지, 애플리케이션, 서비스 등)의 공유 풀에 어디서나 필요에 따라 편리하게 네트워크로 액세스하기 위한 모델로, 신속하게 프로비저닝하고 해제할 수 있으며 관리 작업 또는 서비스 제공업체와의 상호작용은 최소화된다.

클라우드 네이티브를 단순히 클라우드에 맞게 만들어진 무언가를 의미하는 용어로 사용하는 사람들도 있지만 사실 그런 의미가 아니다. 클라우드 네이티브라는 용어에 대한 NIST 정의는 없는 대신 클라우드 네이티브 컴퓨팅 파운데이션(CNCF)의 오픈소스 프로세스를 통해 확립된 공식적인 정의가 있다. 이 정의는 https ://github.com/cncf/toc/blob/main/DEFINITION.md에서 관리되며 옮기면 다음과 같다.

클라우드 네이티브 기술과 아키텍처는 일반적으로 컨테이너, 서비스 메시, 멀티 테넌시, 마이크로서비스, 불변성 인프라, 서버리스, 그리고 선언적 API의 조합으로 구성된다.

클라우드 네이티브 애플리케이션이란?

원하기만 하면 거의 무엇이든 클라우드에서 실행이 가능하다. 말 그대로 어떤 애플리케이션이든 가상 머신으로 만들어 이를 실행할 수 있는 클라우드 호스트만 찾으면 된다. 그러나 클라우드 네이티브 애플리케이션의 핵심은 그게 아니다.

클라우드 네이티브 애플리케이션은 클라우드 환경에서 작동하기 위한 명확한 목적으로 설계되고 빌드된다. 온프레미스에서 실행되는 기존 애플리케이션을 “그대로 옮겨” 클라우드에서 실행한다고 해서 클라우드 네이티브가 되지는 않는다.

긴밀하게 결합된 경우가 많은 전통적인 모놀리식 애플리케이션과 달리 클라우드 네이티브 애플리케이션은 모듈형이다. 클라우드 네이티브 애플리케이션은 애플리케이션 스택이 아니라 분리된(decoupled) 애플리케이션 아키텍처다.

클라우드 네이티브 애플리케이션의 가장 원자적인 수준은 컨테이너라고 할 수 있다. 이 컨테이너는 도커 컨테이너일 수도 있지만 사실 오픈 컨테이너 인터페이스(OCI) 사양을 충족한다면 어느 유형의 컨테이너든 작동한다. 클라우드 네이티브 애플리케이션의 정의에는 마이크로서비스라는 용어가 자주 등장한다. 마이크로서비스는 API를 통해 통신하는 작고 독립적인 서비스이며 일반적으로 컨테이너에 배포된다. 마이크로서비스 아키텍처는 클라우드의 작동 방식에 맞춰 탄력적인 방식으로 독립적인 확장을 가능하게 해준다.

컨테이너는 다양한 유형의 호스트 환경에서 실행이 가능하지만 컨테이너와 마이크로서비스의 가장 일반적인 배포 방식은 오케스트레이션 플랫폼 내부다. 현재 가장 보편적으로 배포되는 컨테이너 오케스트레이션 플랫폼은 모든 주요 퍼블릭 클라우드에서 지원되는 오픈소스 쿠버네티스 플랫폼이다.

클라우드 네이티브 애플리케이션의 주요 특징

특징설명
마이크로서비스 아키텍처애플리케이션이 더 작고 느슨하게 결합된 서비스로 분해되며, 각각 독립적으로 개발, 배포, 확장이 가능
컨테이너화마이크로서비스를 종속성과 함께 패키징해서 여러 환경에서의 일관성과 효율적인 리소스 사용을 보장
오케스트레이션 플랫폼확장성, 가용성, 네트워킹, 관리 기능이 통합된 컨테이너 배포 플랫폼 제공
CI/CD빠른 코드 통합과 테스트, 배포를 위한 자동화된 파이프라인
데브옵스 문화개발팀과 운영팀의 협업으로 책임 공유, 더 빠른 사이클, 안정적인 릴리즈를 실현
확장성과 회복탄력성수요에 따라 동적으로 리소스를 확장하고 장애를 안정적으로 처리해 높은 가용성 유지
분산 시스템 설계여러 서버에 걸쳐 서비스가 운영되므로 구성요소별 확장과 내결함성, 최적화된 리소스 활용이 실현됨

클라우드 네이티브 애플리케이션을 빌드하기 위한 프레임워크, 언어, 툴

클라우드 네이티브 애플리케이션을 개발하는 과정에는 다양한 기술이 사용된다. 가장 일반적으로 사용되는 프레임워크, 언어, 툴은 다음과 같다.

프로그래밍 언어

  • 고 : 구글에서 개발한 고는 특히 클라우드 서비스에서의 뛰어난 성능과 효율성이 특징이다.
  • 자바 : 풍성한 생태계를 갖춘 팔방미인 언어로, 엔터프라이즈급 애플리케이션에 자주 사용된다.
  • 자바스크립트 : 스크립팅과 애플리케이션 빌드, 실시간 서비스에 걸쳐 널리 사용된다.
  • 파이썬 : 단순성과 가독성으로 유명하며 웹 서비스와 데이터 처리를 포함한 다양한 애플리케이션에 적합하다.

클라우드 네이티브 컨테이너화와 오케스트레이션

클라우드 네이티브 애플리케이션 배포의 핵심적인 기본 단위는 컨테이너, 그리고 클라우드에서 이러한 컨테이너의 실행과 관리를 조율하는 플랫폼이다.

주요 기술은 다음과 같다.

  • 도커 : 애플리케이션 컨테이너의 대중화를 이끈 컨테이너 기술로, 클라우드 네이티브 환경에서 기본 컨테이너 기술로 사용되는 경우가 많다.
  • 포드맨(Podman) : 도커가 지배적인 컨테이너 기술이긴 하지만 레드햇도 도커와 많은 부분이 호환되는 자체적인 접근 방식을 개발했다.
  • 쿠버네티스 : 클라우드 네이티브 환경에서 컨테이너 오케스트레이션의 사실상 표준이다. 아마존 일래스틱 쿠버네티스 서비스(EKS), 마이크로소프트 애저 쿠버네티스 서비스(AKS), 구글 쿠버네티스 엔진(GKE)을 포함한 모든 주요 클라우드 플랫폼이 쿠버네티스 서비스를 제공한다.

클라우드 네이티브 개발 프레임워크

많은 경우 프로그래밍 언어만으로는 대규모 엔터프라이즈 애플리케이션을 개발하기 어렵고, 그래서 애플리케이션 개발 프레임워크도 함께 사용된다.

널리 사용되는 클라우드 네이티브 개발 프레임워크는 다음과 같다.

  • 장고(Django) : 파이썬용으로 널리 사용되는 웹 프레임워크로, 최근 몇 년 사이 클라우드 네이티브 애플리케이션 개발에서 사용되는 사례가 증가하고 있다.
  • 마이크로넛(Micronaut) : 자바로 클라우드 네이티브 애플리케이션을 빌드하기 위한 풀스택 프레임워크
  • 쿼커스(Quarkus) : 자바 개발자가 클라우드 네이티브 애플리케이션을 빌드할 수 있도록 설계된 또 다른 프레임워크
  • .NET 어스파이어(.NET Aspire) : .NET을 사용한 클라우드 네이티브 애플리케이션 빌드를 지원하는 마이크로소프트의 오픈소스 프레임워크
  • Next.js : 클라우드 네이티브 웹 애플리케이션 빌드에 특히 적합한 리액트 자바스크립트 프레임워크
  • Node.js : 이벤트 기반의 논블로킹 I/O 모델을 사용하는 가볍고 빠른 자바스크립트 런타임 환경

지속적 통합과 지속적 배포

지속적 CI/CD 파이프라인은 애플리케이션의 자동 테스트, 빌드, 배포를 가능하게 해주는 클라우드 네이티브 개발의 필수적인 구성요소다.

최신 CI/CD 툴은 컨테이너 기술, 클라우드 플랫폼과 긴밀하게 통합되며 애플리케이션 수명 주기 전반에 걸쳐 통합된 자동화를 제공한다. 많은 경우 이러한 툴은 위험을 줄이고 제공 속도를 높이는 자동화된 테스트, 카나리아 배포, 블루-그린 배포 등을 구현한다.

일반적으로 사용되는 툴은 다음과 같다.

  • 아르고 CD(Argo CD)
  • AWS 코드파이프라인(AWS CodePipeline)
  • 애저 데브옵스(Azure DevOps)
  • 깃허브 액션(GitHub Actions)
  • 깃랩(GitLab)
  • 젠킨스(Jenkins)

관찰가능성과 모니터링

클라우드 네이티브 애플리케이션에는 분산 시스템의 동작에 대한 인사이트를 제공하는 관찰가능성 기술이 필요하다. 여기에는 여러 서비스와 인프라 구성요소에 걸쳐 애플리케이션 성능과 상태에 대한 포괄적인 시야를 제공하는 모니터링, 로깅, 추적 기능이 포함된다.

오픈텔레메트리(OpenTelemetry) 표준을 지원하는 툴, 그리고 메트릭을 위한 프로메테우스(Prometheus), 분산 추적을 위한 예거(Jaeger) 등의 플랫폼이 클라우드 네이티브 관찰가능성의 중추를 구성한다.

클라우드 네이티브 애플리케이션 개발의 모범 사례

주요 퍼블릭 클라우드 하이퍼스케일러는 모두 최근 몇 년 사이 클라우드 네이티브 애플리케이션을 위한 모범 사례를 개발했는데, 이들의 주요 지침은 다음과 같이 웰-아키텍티드 프레임워크(Well-Architected Framework)라는 이름으로 작성되는 경우가 많다.

  • AWS 웰-아키텍티드 프레임워크
  • 구글 클라우드 웰-아키텍티드 프레임워크
  • 마이크로소프트 애저 웰-아키텍티드 프레임워크

웰-아키텍티드 프레임워크의 바탕이 되는 원칙은 클라우드 네이티브 애플리케이션의 보안과 신뢰성, 효율성을 보장하는 데 도움이 된다. 핵심 원칙은 다음과 같다.

  • 운영 우수성 : 시스템을 모니터링하고 프로세스를 개선한다.
  • 보안 : 강력한 ID 및 액세스 관리, 데이터 보호, 사고 대응을 구현한다.
  • 신뢰성 : 장애를 복구하고 수요를 충족하는 시스템을 설계한다.
  • 성능 효율성 : 컴퓨팅 리소스를 효율적으로 사용한다.
  • 비용 최적화 : 비용을 관리해 실현 가치를 극대화한다.

클라우드 네이티브 애플리케이션은 기업이 소프트웨어를 설계, 빌드, 배포하는 방식이 근본적으로 변화됨을 의미한다. 클라우드 네이티브 접근 방식은 단순히 기존 애플리케이션을 가상 머신으로 클라우드 인프라로 옮기는 데 그치지 않고 유연성과 회복탄력성, 확장성을 중시하는 아키텍처 의사 결정을 통해 클라우드의 고유한 기능을 포용한다.

기업은 클라우드 네이티브 원칙을 채택함으로써 단순한 호스팅 모델이 아니라 빠르게 진화하고 안정적으로 작동하고 사용량에 따라 동적 확장이 가능한 애플리케이션을 빌드하는 접근 방식으로서 클라우드 컴퓨팅이 가진 모든 잠재력을 끌어낼 수 있는 준비를 갖추게 된다.
dl-itworldkorea@foundryco.com

관련자료

댓글 0
등록된 댓글이 없습니다.
Member Rank