클라우드 네이티브(Cloud Native)
클라우드 네이티브란?
넓은 의미로 정의해 본다면 클라우드의 이점을 최대로 활용할 수 있도록 애플리케이션을 구축하고 실행하는 방식을 말한다.
기존 시스템에서의 애플리케이션은 클라우드의 이점을 100% 활용하지 못했다면, 마이크로서비스 아키텍처를 채택하고 컨테이너, 쿠버네티스와 같은 기술과 도구, DevOps, 애자일 방법론 등을 도입하여 개발자 생산성, 비즈니스 민첩성, 확장성, 가용성 및 비용 절감 효과를 크게 높일 수 있다.
그러기 위해서는 애플리케이션, 아키텍처, 인프라 및 개발 프로세스 등 전방위적 측면에서 변화가 필요한데, 변화의 방향은 무엇이며 클라우드를 네이티브하게 사용한다는 뜻은 무엇인지 알아보겠다.
서비스 서버의 변화
- ~ 2000년 : 물리서버
- 모놀리스(Monolith) 애플리케이션 운영
- 물리 서버가 대수가 많지 않고, 서버를 1:1 관리
- 2001 ~ 2009년 : 가상화 기술 1세대
- 실제 시스템을 가상 머신으로 대체
- 통합 비율을 올리고 고효율화 하는 것이 목적이고, 서버의 멀티 코어화와 가상화 기술의 보급
- 가상화 기술에 대한 대안으로 컨테이너 기술이 나옴
- 2010 ~ 2015년 : 가상화 기술 2세대. Cloud 시대
- 클라우드가 대규모 서비스에 적합하고 확장 가능성을 입증
- 안정적으로 대규모 인프라를 관리하기 위한 기술도 보급
- 2010 ~ 2015년 : Cloud Native 세대
- 2016년 1월에 정식 출범 한 Cloud Native Computing Foundation(이하 CNCF)는 진짜 클라우드 기술을 오픈소스로 해결하는 것을 목표
- 애클리케이션을 실행하는 데 필요한 최적의 인프라 제공
- 개발한 것을 “즉시”, “안정적"으로 제공
CNCF이란?
2015년 처음 Cloud Native라는 용어를 사용한 리눅스는 CNCF(Cloud Native Computing Foundation)재단을 만들어 클라우드 네이티브로 전환할 수 있는 오픈소스 기술들을 추진하고 관리한다. 이 재단에는 550개가 넘는 여러 클라우드 공급자와 기술 기업들이 참여하여 운영되고 있는데 클라우드 네이티브에 대한 정의를 아래와 같이 하고 있다.
- 퍼블릭, 프라이빗, 하이브리드 클라우드 환경에서 확장성 있는 애플리케이션을 만들고 운영할 수 있다.
- 컨테이너, 서비스 메시, 마이크로서비스, 불변의 인프라스트럭처, 그리고 선언적 API가 전형적인 접근 방식에 해당한다.
- 회복성이 있고, 관리 편의성을 제공하며, 가시성을 갖는 느슨하게 결합된 시스템을 사용할 수 있다.
- 견고한 자동화와 함께 사용하면, 엔지니어는 최소한의 수고로 영향력이 크고 예측 가능한 변경을 할 수 있다.
CNCF 클라우드 네이티브 정의 참고 : https://github.com/cncf/toc/blob/master/DEFINITION.md
클라우드 네이티브를 위한 주요 4가지 요소 위의 정의를 정리해 보면, 클라우드 네이티브로 가기 위한 주요 요소는 아래 4가지로 요약할 수 있다.
<그림 참고 : Chirag Jog’s Blog>
-
DevOps
애플리케이션 개발-운영 간의 협업 프로세스를 자동화하는 것을 말하며 결과적으로 애플리케이션의 개발과 개선 속도를 빠르게 한다. -
CI/CD
지속적인 통합(Continous Intergration)은 개발자가 작업한 코드를 자동으로 테스트하고 테스트에 통과하면 코드를 통합하여 저장한다.
지속적인 배포(Continuos Deployment)는 작업한 코드 및 변경사항들은 테스트를 거쳐 리포지토리에 업로드되고 실 서비스 배포로 릴리즈까지 자동화하는 것을 말한다. -
Containers 기반 인프라
가상화 기술 중 하나로, 시스템을 가상화하는 것이 아니라 애플리케이션을 구동할 수 있는 컴퓨팅 작업을 패키징하여 가상화한 것이다. -
Micro-services
애플리케이션을 구성하는 서비스들을 독립적인 작은 단위로 분해하여 구축하고 각 구성 요소들을 네트워크로 통신하는 아키텍처로 서비스 안정성과 확장성(scaling)을 지원한다.
클라우드 네이티브의 애플리케이션 가치
-
빠른 반복
클라우드 네이티브 애플리케이션 개발을 활용한다는 것은 Kubernetes로 대표되는 컨테이너와 같은 민첩하고 확장 가능한 구성 요소를 사용하여 멀티 클라우드와 같은 기술 경계를 넘어 잘 설명된 방식으로 통합되는 개별적이고 재사용 가능한 기능을 제공하는 것을 의미한다. 반복적인 자동화 및 오케스트레이션을 사용하여 빠르게 반복한다. -
자동 배포 클라우드 네이티브 접근 방식은 소프트웨어 제공 프로세스에서 개발 환경과 다른 이질적인 환경을 구축하는 데 상당한 노력이 필요한 기존의 가상화 지향 비즈니스 프로세스보다 훨씬 우수하다. 반면에 클라우드 네이티브 아키텍처는 자동화 및 구성을 특징으로 하며 신뢰할 수 있고 검증되고 감사된 알려진 양호한 프로세스의 기반에 의존하여 반복적인 인간 개입 없이 민첩한 전달을 제공한다.
-
독립적이고 효율적인 클라우드 네이티브는 마이크로 서비스 기반 아키텍처를 가져온다. 마이크로 서비스는 기본적으로 독립적으로 릴리스될 수 있는 애플리케이션 서비스이므로 업그레이드, 회색조 또는 독립 구성 요소로 재사용할 수 있으며 전체 대규모 애플리케이션에 미치는 영향이 적다. 입력 포트와 출력 포트가 결정되기만 하면 신뢰 당사자가 충분히 발전할 수 있으며 전체 팀의 조직 구조가 더욱 간소화되어 통신 비용이 저렴하고 효율성이 높다.
참고
- Cloud Native Applications — The Why, The What & The How. | Chirag Jog’s Blog
- 클라우드 네이티브란? | CLOUDMATE
- openmaru