클라우드 네이티브(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가지로 요약할 수 있다.

Cloud Native

<그림 참고 : Chirag Jog’s Blog>

  • DevOps
    애플리케이션 개발-운영 간의 협업 프로세스를 자동화하는 것을 말하며 결과적으로 애플리케이션의 개발과 개선 속도를 빠르게 한다.

  • CI/CD
    지속적인 통합(Continous Intergration)은 개발자가 작업한 코드를 자동으로 테스트하고 테스트에 통과하면 코드를 통합하여 저장한다.
    지속적인 배포(Continuos Deployment)는 작업한 코드 및 변경사항들은 테스트를 거쳐 리포지토리에 업로드되고 실 서비스 배포로 릴리즈까지 자동화하는 것을 말한다.

  • Containers 기반 인프라
    가상화 기술 중 하나로, 시스템을 가상화하는 것이 아니라 애플리케이션을 구동할 수 있는 컴퓨팅 작업을 패키징하여 가상화한 것이다.

  • Micro-services
    애플리케이션을 구성하는 서비스들을 독립적인 작은 단위로 분해하여 구축하고 각 구성 요소들을 네트워크로 통신하는 아키텍처로 서비스 안정성과 확장성(scaling)을 지원한다.

클라우드 네이티브의 애플리케이션 가치

  1. 빠른 반복
    클라우드 네이티브 애플리케이션 개발을 활용한다는 것은 Kubernetes로 대표되는 컨테이너와 같은 민첩하고 확장 가능한 구성 요소를 사용하여 멀티 클라우드와 같은 기술 경계를 넘어 잘 설명된 방식으로 통합되는 개별적이고 재사용 가능한 기능을 제공하는 것을 의미한다. 반복적인 자동화 및 오케스트레이션을 사용하여 빠르게 반복한다.

  2. 자동 배포 클라우드 네이티브 접근 방식은 소프트웨어 제공 프로세스에서 개발 환경과 다른 이질적인 환경을 구축하는 데 상당한 노력이 필요한 기존의 가상화 지향 비즈니스 프로세스보다 훨씬 우수하다. 반면에 클라우드 네이티브 아키텍처는 자동화 및 구성을 특징으로 하며 신뢰할 수 있고 검증되고 감사된 알려진 양호한 프로세스의 기반에 의존하여 반복적인 인간 개입 없이 민첩한 전달을 제공한다.

  3. 독립적이고 효율적인 클라우드 네이티브는 마이크로 서비스 기반 아키텍처를 가져온다. 마이크로 서비스는 기본적으로 독립적으로 릴리스될 수 있는 애플리케이션 서비스이므로 업그레이드, 회색조 또는 독립 구성 요소로 재사용할 수 있으며 전체 대규모 애플리케이션에 미치는 영향이 적다. 입력 포트와 출력 포트가 결정되기만 하면 신뢰 당사자가 충분히 발전할 수 있으며 전체 팀의 조직 구조가 더욱 간소화되어 통신 비용이 저렴하고 효율성이 높다.

참고




최종 수정 : 2022-12-30