지난 포스트에서는 클라우드 네이티브(Cloud Native)의 개념과 정의에 대해서 이야기를 드렸습니다. 이번 포스트에서는 클라우드 네이티브(Cloud Native)의 주요 구성요소와 특징 그리고 장단점에 대해서 말씀 드리겠습니다.
1. 클라우드 네이티브(Cloud Native) 개요
앞의 글에서 소개드린 클라우드 네이티브(Cloud Native)의 정의를 간단히 리마인드 하자면, '클라우드 컴퓨팅 모델의 이점을 최대한 활용하여 정보시스템을 구축 및 실행하는 환경을 의미' 하는 것으로 클라우드 환경에서 애플리케이션을 개발하고 실행할 수 있게 하는 방식으로 느슨하게 결합된 시스템을 가능하게 하며 최소한의 노력으로 영향이 큰 변경을 빈번하고 예측가능하게 수행할 수 있게 한다. 이러한 클라우드 네이티브 개념에서는 컨테이너, 서비스 메쉬, 마이크로서비스, 불변 인프라, 선언적 API가 전형적인 접근방식이다.라고 CNCF에서 정의한 내용을 소개드렸습니다.
다른 말로 다시 설명해 보자면 클라우드 네이티브는, IaaS(Infra-as-a-Service)에 인프라 환경을 구축하고 그 위에서 동작하는 PaaS(Platform-as-aService)를 기반으로 MSA(Microservice Architecture, 마이크로서비스 아키텍처)로 설계된 애플리케이션들이 탑재되어 있는 IT환경에서 컨테이너, DevOps, CI/CI 등의 기술/방법론 등을 적용하여 운영되는 환경이라고 말할 수 있습니다.
즉, 단순히 기존의 애플리케이션은 IaaS 환경으로 옮기는 'Rehost'나 PaaS와 컨테이너를 도입하는 등 미들웨어 환경을 클라우드향으로 변경하는 'Replatform'만으로는 클라우드 모델의 이점을 활용하기에는 제한적이라는 것을 의미하며, 애플리케이션 레벨까지 클라우드 환경을 고려하여 전체적인 재설계(Refactoring)가 되어야만 진정한 클라우드 네이티브 단계에 도달했다고 할 수 있습니다.
2. 클라우드 네이티브 주요 구성요소
앞서 말씀드린 바와 같이, 단순히 인프라, 미들웨어 레벨에서의 클라우드 전환이 아닌 클라우드로 구성된 IT인프라 환경(IaaS, PaaS) 위에서 동작하는 애플리케이션 레벨에서 동작하는 것이라고 생각합니다.
그렇다면 이 클라우드 네이티브를 구성하는 주요 요소로는 마이크로서비스(Microservices), 컨테이너(Container), 데브옵스(DevOps), CI/CI(Continuous Intergration/continuous Deployment), 앞의 네 가지를 꼽을 수가 있습니다.
각 요소에 대해서도 설명할 수 있는 내용들이 너무 광범위하기 때문에 이번에는 간단하게만 소개하도록 하겠습니다.
- 마이크로서비스 :각각의 애플리케이션들을 마이크로 한 단위인 서비스로 분리하여 독립적으로 개발/배포/운영하는 방식으로, 각 애플리케이션(서비스)들은 상호 간에 표준화된 API(Application Programing Interface)를 통해 통신하기 때문에 서로 다른 언어나 기술로 개발하더라도 느슨하게 연결될 수 있습니다.
이러한 마이크로서비스의 특징으로 인하여 기존의 모놀리식 아키텍처와 비교하여 상대적으로 유연하고 확장성이 높으며 유지/관리가 편리한 장점이 있습니다. - 컨테이너 : 쉽게 말하면 운영체제를 가상화한 형태라고 생각할 수 있으며, 애플리케이션 실행에 필요한 구성요소(바이너리, 라이브러리, 구성 파일 등)를 패키지하고 보관하기 위한 논리적인 공간입니다.
컨테이너는 서버보다 훨씬 가벼운 프로세스 수준의 가상서버로 마이크로서비스의 배포 및 실행환경으로 사용될 수 있으며, 컨테이너를 활용하여 어떠한 클라우드 환경에도 즉각적으로 배포가 가능하기 때문에 확장성과 이식성이 뛰어난 장점이 있습니다.
- 데브옵스 :Development + Operation, 즉 소프트웨어의 개발과 운영을 결합한 합성어로 개발조직과 운영조직의 긴밀한 협업/통합을 강조하는 개발문화 또는 프로세스, 업무 프레임워크의 하나로 이해할 수 있습니다.
비즈니스 가치를 높이기 위해 신속하게 고품질의 서비스를 제공하는 것이 강조되면서 릴리즈 주기를 단축하기 위한 방법으로 등장한 개념이며, 특히나 클라우드 네이티브 환경에서는 마이크로서비스 단위로 빈번한 배포가 이루어지기 때문에 중요한 구성요소라 할 수 있습니다. - CI/CD : 클라우드 네이티브 환경에서 빈번하게 발생하는 마이크로서비스 단위의 배포를 용이하게 수행하기 위한 방법으로, 개발~테스트~배포를 통합하고 자동화화하여 안정적으로 지속적인 서비스를 제공하기 위한 방법입니다.
앞의 구성요소인 데브옵스(DevOps)와 연결된 개념으로 개발 사이드에서는 CI(지속적인 통합), 운영 사이드에서는 CD(지속적인 배포)가 이루어진다고 이해할 수 있습니다.
3. 클라우드 네이티브 특징
1) 구성요소별 주요 특징
마이크로서비스, 컨테이너, 데브옵스, CI/CD 등 주요 구성요소들을 적용한 클라우드 네이티브의 특징은 아래 표로 정리했습니다.
[표 1. 클라우드 네이티브 구성요소별 주요 특징] * 클라우드 네이티브 정보시스템 구축 발주자 안내서(NIA) 참고
구성요소 | 주요 특징 | 설명 |
마이크로서비스 | 소규모 | - 애플리케이션을 비즈니스 기능을 중심으로 마이크로한 단위인 서비스로 분리 |
독립성 | - 각 단위 서비스는 독립적으로 운영되며 API로 상호 연결 - 특정 서비스에 장애가 발생하더라도 격리/조치가 가능하므로 전체 서비스는 정상적으로 운영이 가능 |
|
다양성 | - 개별 서비스는 서비스 특성에 맞는 개발언어와 기술요소를 적용할 수 있음 | |
용이성 | - 마이크로서비스 단위로 개발/운영/테스트를 수행할 수 있어 유지보수가 용이함 | |
컨테이너 | 효율성 | - 다른 애플리케이션과 분리된 개발환경을 구축할 수 있음 - 개발환경 구성 및 튜닝을 손쉽게 할 수 있어, 개발자의 소모시간 단축 |
경량화 | - 애플리케이션과 런타임 SW만으로 저용량의 이미지 파일 생성 | |
이식성 | - 다른 클라우드 플랫폼에도 쉽게 배포할 수 있음 | |
확장성 | - 오토스케일링(Autoscaling) 기능을 통해 임계치 초과시 리소스의 확장 가능 | |
데브옵스 | 조직간 협업 | - 마이크로서비스 단위로 개발/운영조직을 통합할 수 있어 밀접한 협업이 가능 |
신속성 | - 협업을 통해 문제점/오류를 조기에 탐지하고 해결할 수 있음 | |
CI/CD | 자동화 | - 개발/빌드/테스트/배포에 이르는 전체 프로세스를 자동화 |
소규모 배포 | - 프로세스 자동화를 통해 개발/배포 시간을 단축하므로써, 배포주기가 짧아짐 |
2) 클라우드 네이티브 애플리케이션
클라우드 네이티브 특징들에 따라 클라우드 환경에서 개발, 실행되는 애플리케이션들은 기존 온프라미스형태의 애플리케이션과 아래의 차이점을 보이고 있습니다.
[표 2. 온프라미스 App. 과 클라우드 네이티브 App. 차이점] * 클라우드 네이티브 정보시스템 구축 발주자 안내서(NIA) 참고
구분 | 온프라미스 애플리케이션 | 클라우드 네이티브 애플리케이션 |
애플리케이션 구조 | 모놀리식 구조 | 마이크로서비스 |
결합 | 하나의 크고, 밀접한 결합 | 독립된 서비스 기반의 느슨한 결합 |
실행환경 | 물리서버 중심 | 가상 컨테이너 중심 |
확장 | 수직 확장(Scale-up) | 수평 확장 (Scale-Out) |
인프라 의존성 | 인프라 의존도 높음 | 인프라 독립, 이식성이 보장됨 |
개발방법 | 폭포수 방식 (Waterfall) | 애자일 방식(Agile) |
빌드/배포 | 수작업, 긴 시간 소요 | CI/CD 자동화, 짧은시간을 지속적으로 수행 |
조직구조 | 개발/운영 조직간 분리 | DevOps 기반의 개발/운영 통합 |
클라우드 네이티브 애플리케이션의 경우 클라우드 환경하에서 지속적인 개발과 자동화된 관리 환경을 제공하기 위해 설계되었기 때문에, Private/Public/Hybrid 등 다양한 클라우드 환경에서도 확장과 이식이 가능한 장점이 있다. 또한 소규모 서비스 단위인 마이크로서비스로 구성되며 가상 컨테이너 환경에서 동작되도록 구현되어 있다.
이번 글에서는 클라우드 네이티브(Cloud Native)의 구성요소와 특징에 대해 말씀을 드렸습니다. 기존에 등장했던 개념들이 클라우드 환경에 맞추어 발전하고 결합되고 있는 것 같습니다. 하나하나 구성요소 마다도 할 수 있는 이야기들이 너무나도 많겠지만 이번 글은 여기에서 마무리를 하고 다음에 기회가 된다면 각각에 대해서도 이야기를 해보도록 하겠습니다.
참고자료 및 사이트
1. 클라우드 네이티브 정보시스템 구축을 위한 발주자 안내서 (2021, 표준 프레임워크 포털)
* https://www.egovframe.go.kr/home/sub.do?menuNo=95