1장) 클라우드 네이티브 소개
클라우드 네이티브 소개
클라우드 네이티브 애플리케이션은
- 클라우드에서 실행되면서, 변화에 탄력적으로 대응하고 고도로 분산되어 있는 시스템
- 여러 개의 서비스로 구성되며, 각 서비스들은 네트워크를 통해 서로 통신
- 끊임없이 변하는 동적 환경에 배포
클라우드 네이티브란 무엇인가?
클라우드 네이티브라는 용어는 폴 프리맨틀이 블로그 글에서 처음 사용했다. 애플리케이션과 미들웨어가 클라우드 환경에서 잘 작동하기 위해 필요한 것, 즉 클라우드 네이티브가 되기 위해 무엇이 필요한지에 대한 내용이다.
Paul Fremantle - Cloud Native (2010.05.25)
해당 글을 올린 시점은 마이크로서비스, 도커, 데브옵스, 쿠버네티스, 스프링 부트 같은 개념과 기술이 존재하지 않았던 시기다.
그는 클라우드 네이티브 애플리케이션은 클라우드 환경에 맞는 설계가 필요하고, 클라우드 환경과 클라우드 컴퓨팅 모델의 장점을 활용할 수 있는 특성이 있어야 한다고 했다.
Lift and Shift란 클라우드가 아닌 환경에서 실행되도록 설계된 기존 애플리케이션을 클라우드로 옮기는 것이다.
즉 Lift and Shift만으로는 클라우드 네이티브가 될 수 없다.
클라우드 네이티브에서의 세 가지 P
애플리케이션이 클라우드를 위해 설계된다는 것은 무엇을 의미할까?
CNCF가 정의한 클라우드 네이티브 정의를 통해 그 답을 알 수 있다.
클라우드 네이티브 기술은 조직이 퍼블릭, 프라이빗, 그리고 하이브리드 클라우드와 같은 현대적이고 동적인 환경에서 확장 가능한 애플리케이션을 개발하고 실행할 수 있게 해준다. 컨테이너, 서비스 메쉬, 마이크로서비스, 불변(Immutable) 인프라, 그리고 선언형(Declarative) API가 이러한 접근 방식의 예시들이다.
이 기술은 회복성, 관리 편의성, 가시성을 갖춘 느슨하게 결합된 시스템을 가능하게 한다. 견고한 자동화 기능을 함께 사용하면, 엔지니어는 영향이 큰 변경을 최소한의 노력으로 자주, 예측 가능하게 수행할 수 있다.
Cloud Native Computing Foundation은 벤더 중립적인 오픈 소스 프로젝트 생태계를 육성하고 유지함으로써 해당 패러다임 채택을 촉진한다. 우리 재단은 최신 기술 수준의 패턴을 대중화하여 이런 혁신을 누구나 접근 가능하도록 한다.
위 정의를 통해 클라우드 네이티브 애플리케이션(CNA)은 3가지 P를 충족한다는 것을 알 수 있다.
- Platform (플랫폼)
- 클라우드 같은 동적 분산 환경을 기반으로 하는 플랫폼에서 실행된다.
- Property (속성)
- 확장 가능, 느슨한 결합, 뛰어난 복원력, 관리 편의성, 관찰 가능하도록 설계된다.
- Practice (실행)
- 자동화를 통해 예측 가능한 방식으로 시스템을 변경하는 것, 즉 자동화/지속적 전달/데브옵스 등이 있다.
Q) 클라우드로 이행하기 위해 반드시 MSA를 채택하고, 컨테이너로 빌드해서 K8S로 배포해야 한다?
A) Nope. 당시에는 이러한 기술이 존재하지 않았고, 클라우드 네이티브 정의는 특정 구현 세부 사항이나 기술과는 관련이 없다.
클라우드와 클라우드 컴퓨팅 모델
CNA에 대해 설명하기 전에 CNA 실행 환경인 클라우드에 대해 알아보자.
클라우드란
클라우드 컴퓨팅 모델에 따라 컴퓨팅 자원을 소비자에게 제공하는 IT 인프라를 말한다.
NIST에서 정의한 클라우드 컴퓨팅은 다음과 같다.
Cloud computing is a model for enabling ubiquitous, convenient, on-demand network access to a shared pool of configurable computing resources (e.g., networks, servers, storage, applications, and services) that can be rapidly provisioned and released with minimal management effort or service provider interaction.
클라우드 컴퓨팅 모델에서 탄력성은 주요 특징 중 하나다. 전통적인 IT 인프라로는 탄력성을 제공할 수 없어, 처음에 필요한 컴퓨팅 자원을 최대치로 계산하고 이에 맞춰 인프라를 구축했어야 했다.
탄력성이란 자율적으로 리소스를 제공하거나 회수해서 시스템이 어느 정도 워크로드의 변화에 적응할 수 있는지를 나타내는 지표이다. 예를 들면 각 시점에서 사용 가능한 리소스가 그 시점에 요구되는 리소스와 가능한 한 일치하도록 하는 것이다.
클라우드 배포 모델
누가 + 어디에서 관리하는가
- Private 클라우드
- 한 단체나 조직에서만 사용하도록 제공하는 클라우드 인프라 중요한 데이터 또는 매우 중요한 시스템을 다루는 조직에서 선호하는 방법
- ex) 은행, 의료 서비스 제공 업체
- Public 클라우드
- 일반 사용자들에게 공공으로 제공되는 클라우드 인프라 공급자가 소유하고 관리하며, 공급자가 제어하고 관리하는 장소에서 호스팅함
- 제공업체: AWS, Azure, GCP 등
- Hybrid 클라우드
- Private + Public 클라우드를 섞어, 단일 환경인 것처럼 서비스를 제공함
클라우드 컴퓨팅 모델이 제공하는 ‘서비스’ 모델
인프라에 대한 제어와 관리할 컴퓨팅 리소스 유형에 따라 달라짐
IaaS (Infrastructure)
- 플랫폼: 컴퓨팅, 스토리지 및 네트워크 자원 제공
- 사용자: 서버, 네트워크, 스토리지 구성, 관리 및 제공
- 가상 서버를 구축하고 운영체제 및 라이브러리와 같은 소프트웨어도 설치할 수 있음
ex) AWS의 EC2(Elastic Computing Cloud)
CaaS (Container)
- 플랫폼: 컨테이너 엔진, 오케스트레이터, 기반 인프라 제공
- 사용자: 컨테이너화된 워크로드 및 클러스터를 빌드, 배포, 관리
가상화를 위한 기본 리소스 제어 불가, 대신 컨테이너를 만들고 관리 ex) AWS의 EKS(Elastic Kubernetes Service)
PaaS (Platform)
- 플랫폼: 개발 및 배포 툴, API, 기반 인프라 제공
- 사용자: 애플리케이션을 빌드, 배포, 관리
ex) AWS의 Elastic Beanstalk
FaaS (Function)
- 플랫폼: 실행 환경, 함수를 실행하기 위해 필요한 전체 인프라, 자동 확장을 제공
- 사용자: 함수를 빌드하고 배포
ex) AWS의 Lambda
SaaS (Software)
- 플랫폼: 소프트웨어와 이를 실행할 전체 인프라를 제공
- 사용자: 네트워크를 통해 서비스를 사용
애플리케이션을 만들고 CaaS or PaaS 모델을 통해 실행한 후, 최종 고객에게 SaaS 형태로 판매함 ex) Github, 마이크로소프트의 오피스 365 등
플랫폼이란 애플리케이션을 실행하고 관리하기 위해 사용하는 “운영 환경”