Skip to main content

모두가 말하지만 일부만 아는 ‘클라우드 네이티브’

About 1 minDevOpsKubernetesArticle(s)blogyozm.wishket.comkubernetesk8s

모두가 말하지만 일부만 아는 ‘클라우드 네이티브’ 관련

Kubernetes > Article(s)

Article(s)

모두가 말하지만 일부만 아는 ‘클라우드 네이티브’ | 요즘IT
요즘 클라우드를 넘어 ‘클라우드 네이티브’하게 라는 말이 자주 쓰이고 있습니다. 일반 기업뿐만 아니라 공공 부문에서도 정부 서비스를 개발할 때 클라우드 네이티브를 중심으로 진행해야 한다고 언급할 정도입니다. 그렇다면 이러한 클라우드 네이티브라는 것은 대체 어떤 것이길래 많은 곳에서 이야기를 하고 있을까요? 다양한 기업, 그리고 공공에서 클라우드 네이티브를 정의하고 있지만, 이번에는 클라우드 네이티브 컴퓨팅재단에서 설명하고 있는 클라우드 네이티브를 기준으로 알아보겠습니다.

요즘 클라우드를 넘어 ‘클라우드 네이티브’하게 라는 말이 자주 쓰이고 있습니다.

일반 기업뿐만 아니라 공공 부문에서도 정부 서비스를 개발할 때 클라우드 네이티브를 중심으로 진행해야 한다고 언급할 정도입니다. 클라우드 네이티브가 대체 어떤 것이길래 이토록 많은 곳에서 이야기하고 있을까요?

클라우드 네이티브 중심으로 공공부문을 전환해야 한다는 <FontIcon icon="fas fa-globe"/>보도자료<br/> <출처: 행정안전부>
클라우드 네이티브 중심으로 공공부문을 전환해야 한다는 보도자료open in new window
<출처: 행정안전부>

클라우드 네이티브하다는 것은?

다양한 기업에서 그리고 공공에서 클라우드 네이티브를 정의하고 있지만, 저는 주로 클라우드 네이티브 컴퓨팅재단에서 설명하고 있는 클라우드 네이티브를 기준으로 설명하겠습니다. 필자는 클라우드 네이티브 컴퓨팅 재단(CNCF, Cloud Native Computing Foundation)의 앰배서더open in new window로 활동하고 있으며, 같은 재단의 클라우드 네이티브 교육 앰배서더인 Kubestronaut 인증을 가지고 있습니다.

한국어 번역도 있지만, 일부 내용이 최신이 아니고 정확하게 해당 표현을 설명하려면 영어 원문이 좀 더 정확해서 원문을 사용했음을 밝힙니다.

Definition

Cloud native practices empower organizations to develop, build, and deploy workloads in computing environments (public, private, hybrid cloud) to meet their organizational needs at scale in a programmatic and repeatable manner. It is characterized by loosely coupled systems that interoperate in a manner that is secure, resilient, manageable, sustainable, and observable. Cloud native technologies and architectures typically consist of some combination of containers, service meshes, multi-tenancy, microservices, immutable infrastructure, serverless, and declarative APIs — this list is non-exhaustive

출처: CNCF Cloud Native Definition (cncf/toc)open in new window

위의 내용을 기반으로 클라우드 네이티브하다는 것의 특징을 살펴보면, 크게 3가지로 나눌 수 있습니다.


첫 번째 정의

클라우드 네이티브하다고 말하려면 첫째, 다양한 클라우드 환경(퍼블릭, 프라이빗, 하이브리드)에서 프로그래밍 방식을 사용해서 반복적으로 워크로드(애플리케이션)를 확장/축소할 수 있어야 합니다.

Cloud native practices empower organizations to develop, build, and deploy workloads in computing environments (public, private, hybrid cloud) to meet their organizational needs at scale in a programmatic and repeatable manner.

반복적으로 코드를 사용할 수 있다는 것을 예제로 살펴보도록 하겠습니다.

다음의 Yaml 코드는 EKS(Amazon AWS), AKS(MS Azure), GKE(Google GCP) 그리고 온프레미스 어디에 배포해도 동일한 결과를 얻을 수 있습니다. 이와 같이 클라우드 네이티브하게 작성된 코드를 이용한다면, 코드의 재사용성을 높이고 해당 코드를 어떤 환경에도 손쉽게 배포하고 운영할 수 있습니다. 따라서 생산성을 극대화할 수 있게 됩니다.

Yaml 코드를 EKS, AKS, GKE, 그리고 버추얼박스 위에 설치된 쿠버네티스에 배포한 결과
Yaml 코드를 EKS, AKS, GKE, 그리고 버추얼박스 위에 설치된 쿠버네티스에 배포한 결과

두 번째 정의

둘째, 느슨하게 결합된 시스템으로 인해 상호운용성을 높일 수 있고, 이러한 특성으로 보안, 관측가능성 외에 다양한 이점을 얻을 수 있습니다.

It is characterized by loosely coupled systems that interoperate in a manner that is secure, resilient, manageable, sustainable, and observable.

느슨한 결합(Loose Coupling)은 구성 요소간의 의존성을 줄여서 독립적인 동작을 가능케 하고, 이를 통해 전체 시스템의 안정화와 유연성을 함께 가지고 갈 수 있게 합니다. 또한 이렇게 느슨한 결합을 가지고 있는 애플리케이션이라면 이미 구조적으로 마이크로서비스 아키텍처(MicroService Architecture, MSA)에 적합하게 설계되어 있다고 볼 수 있습니다.

그러한 흐름에 따라 클라우드 네이티브에는 주로 모놀리식(Monolithic) 아키텍처보다는 기능별로 구성 요소들을 나누어 해당 구성 요소를 필요에 따라 배포의 수를 조절하고, 더 이상 필요하지 않다면 삭제할 수 있는 마이크로서비스 아키텍처를 사용합니다. 이렇게 설계된 아키텍처라면 비즈니스 상황에 따라 애플리케이션의 형태 구조를 빠르게 변경 적용하여 운영할 수 있습니다.

마이크로서비스 아키텍처에 대한 예시로 Online-Boutique 애플리케이션을 배포하고 이를 이스티오(Istio) 서비스 메시를 통해서 확인한 결과를 준비했습니다.

배포된 Online-Boutique 애플리케이션을 이스티오(Istio)에서 확인한 결과
배포된 Online-Boutique 애플리케이션을 이스티오(Istio)에서 확인한 결과

세 번째 정의

셋째, 클라우드 네이티브한 아키텍처는 제한이 없는 다양한 형태로 서비스를 제공할 수 있습니다.

Cloud native technologies and architectures typically consist of some combination of containers, service meshes, multi-tenancy, microservices, immutable infrastructure, serverless, and declarative APIs — this list is non-exhaustive

예를 들어 컨테이너를 기반으로 한 멀티 테넌시(multi-tenancy) 구조를 가지고 다양한 사용자 또는 고객이 공동으로 관리하고 운영하는 클러스터를 가질 수 있으며, 이는 매우 안정적으로 서비스를 운영할 수 있는 환경입니다. 이 환경에서 서버리스(Serverless), MLOps 등을 손쉽게 구현할 수 있죠. 현재 가장 인기 있는 LLM에서의 소중한 자원인 GPU를 효율적으로 운영하는 데에도 사용될 수 있습니다.

이러한 구조를 가지기 위해 쓰이는 대표적인 구성 요소는 다음과 같이 그림으로 정리할 수 있습니다.

2024년 쿠버네티스 표준 아키텍처, 요소별 설명 링크 (<FontIcon icon="iconfont icon-github"/>) <br/><출처: sysnet4admin (<FontIcon icon="iconfont icon-github"/>)>
2024년 쿠버네티스 표준 아키텍처, 요소별 설명 링크 (sysnet4admin/_Book_k8sInfra)open in new window
<출처: sysnet4admin (sysnet4admin/_Book_k8sInfra)open in new window>

이와 관련하여 기본적인 뼈대가 되는 쿠버네티스, 도커, CI/CD(젠킨스) 그리고 관측가능성(Observability, 프로메테우스와 그라파나)을 실제로 실습하고 다루어 보고 싶으시다면, 다음의 책을 추천드립니다.

조훈, 심근우, 문성주, 컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커<br/><출처: 길벗>
조훈, 심근우, 문성주, 컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커
<출처: 길벗>

클라우드 네이티브 하게 한다면?

지금까지 설명에서 알 수 있듯 클라우드 네이티브하기 위해서는 단순히 개발, 운영 등의 관련 모든 부서의 전반적인 혁신이 필요합니다. 이러한 혁신을 위해 감내해야 하는 노력과 시간이 필요하지만, 그 결과 특정 회사와 시스템에 종속되지 않는 진정한 자유로움을 얻게 될 겁니다.

또한 클라우드 네이티브하게 동작하는 애플리케이션이라면 어떠한 환경에서도 실행이 가능하므로 개발자들이 더 이상 동작하는 환경을 신경쓰지 않아도 됩니다. 따라서 개발 조직이 개발에만 전념하는 형태로 운영될 수 있습니다.

마지막으로 클라우드 네이티브하게 설계되어 서비스를 운영한다면 최소한의 인력으로 많은 부분을 자동화하고, 필요할 때 자원을 사용할 수 있도록 설계할 수 있습니다. 따라서 저비용 고효율 형태를 유지할 수 있습니다.

이번 글이 보다 많은 분이 클라우드 네이티브하게 설계하고 운영할 수 있는 시작점이 되길 바랍니다.


이찬희 (MarkiiimarK)
Never Stop Learning.