본문 바로가기

삽질

클라우드 네이티브란?

1. 개요

이전의 많은 IT 회사들은 자신의 회사 내부에 서버 장비 및 소프트웨어를 설치하여 서비스를 제공해 왔습니다.

이를 온프레미스방식이라 합니다.

 

이와 대조적으로,

클라우드 네이티브는 AWS와 같은 클라우드 서비스 제공 업체가 제공하는 서버에 서비스를 설치하여 서비스를 제공하는 방법입니다.

 

즉, 두 개의 가장 큰 차이점은 회사 내 하드웨어 서버의 존재 유무입니다.

온프레미스 방식은 회사에 하드웨어 서버가 있는 것이고,

클라우드 네이티브 방식은 회사 내에 하드웨어 서버가 없습니다.

 

2. 클라우드 네이티브

 

클라우드 환경에서 소프트웨어(서비스)를 개발, 배포, 운영, 확장하는 방식.

 

 

네이티브(Native)란, 어떤 지역이나 특정 환경에서 자연적으로 존재하는 것을 의미합니다.

여기서 클라우드 네이티브는 이와 유사한 개념을 이용하여 클라우드 환경에서 소프트웨어가 자연스럽게 존재하고 최적화된 상태를 가리킵니다.

 

다시 말하자면, 클라우드 환경에서 소프트웨어를 개발, 배포, 운영, 확장하는 방식을 통틀어서 클라우드 네이트브의 정의라고 할 수 있겠습니다.

 

클라우드 네이티브란 단어를 만든 리눅스가 CNCF(Cloud Native Computing Foundatation) 재단을 만들어 클라우드 네이티브로 전환할 수 있는 오픈 소스 기술을 추진하고 관리하고 있습니다.

그 중 핵심 4가지 기술은 아래와 같습니다.

  1. 컨테이너 기반 인프라
  2. 마이크로 서비스
  3. CI/CD
  4. DevOps

출처 : https://ditoday.com/클라우드-네이티브를-위한-핵심-기술/

 

 

3. 네 가지 기술

1. 컨테이너 기반 인프라

하나의 물리 서버를 가상으로 분할해서 서로 다른 서비스를 하고자 하는 노력이 있습니다.

왜 그렇게 할까요?

 

이유는 간단합니다.

여러 개의 물리 서버를 구매하고 관리한 다는 것은 비용이 매우 비싸기 때문입니다.

또, 하나의 물리 서버가 1TB라 했을 때, 그 중 일부분만 실제 서버에 사용될 수 있기 때문입니다.

 

이러한 이유 때문에 물리 서버를 논리적으로 분할해서 사용하는 기술을 사용하는데, 그 기술에는 크게 두 가지가 있습니다.

첫 번째는 가상머신이고, 두 번째는 컨테이너입니다.

두 가지 기술의 가장 큰 차이점은 아래 그림과 같이 중간 운영체제의 유무입니다.

가상머신은 각각의 서비스가 독립적인 운영체제를 가질 수 있습니다.

하지만, 오베헤드가 매우 큽니다.

컨테이너는 도커엔진을 통해 모든 서비스가 공통의 운영체제를 공유합니다. 즉, 운영체제에 독립적일 수 없습니다.

하지만, 오버헤드가 작습니다.

 

컨테이너는 가상머신과 달리 오버헤드가 작고, 애플리케이션 실행에 필요한 모든 것을 하나의 이미지 파일로 만들어 동일 OS를 가지는 도커엔진만 있다면 어디서든 실행시킬 수 있다는 장점이 있습니다. 이외에도 컨테이너가 가지는 많은 장점이 있기 때문에 클라우드 네이티브는 가상머신이 아닌 컨테이너 기술을 사용합니다.

 

2. 마이크로 서비스

마이크로 서비스는 애플리케이션을 이루는 서비스들을 기능 단위로 분할해서 구축하는 것을 의미합니다. 여기서 파생된 아키텍처가 MSA(Micro Service Architecture)입니다.

 

예를 들어, 회원과 게시판 기능이 있는 서비스가 있다고 하겠습니다. 기존의 모놀리틱(monolithic)한 방식은 하나의 서버 내부 서비스에 회원과 게시판 기능이 있었습니다. 하지만, 마이크로 서비스 방식은 회원 서비스를 하는 서버 따로, 게시판 서비스를 하는 서버 따로 분리합니니다.

이 각각의 서버는 API로 통신을 해 사용자의 요청을 처리합니다.

 

3. CI/CD

CI/CD는 지속적인 통합, 배포를 의미합니다. 개발 프로세스를 더욱 효율적으로 만들기 위해 이 CI/CD를 사용하는데, 각각이 의미하는 것은 아래와 같습니다.

  • CI(Continuous Integration - 지속적 통합)
    • 여러 명의 개발자들이 함께 작업하는 경우, 코드 변경 사항을 정기적으로 통합하는 과정입니다.
    • 개발자들이 작성한 코드를 주기적으로 공유 레포지토리에 병합하고, 빌드 및 자동화된 테스트를 수행합니다.
  • CD(Continuous Delivery, Countinuous Deployment - 지속적 배포)
    • Continuous Delivery(CD): 소프트웨어를 지속적으로 제품으로 만들어내는 프로세스를 의미합니다.
    • Continuous Deployment(CD): 지속적으로 통합된 코드를 자동으로 프로덕션 환경에 배포하는 프로세스를 의미합니다.

즉, CI를 사용해 서로 다른 개발자들이 만든 코드를 통합하여 CD를 사용해 자동으로 서비스를 제공할 수 있게 하는 것이 CI/CD의 핵심입니다.

이로서 개발자들은 개발에만 집중할 수 있으며 빌드, 테스트, 배포와 같은 부분은 Jenkins와 같은 CI/CD의 툴에 맡길 수 있게 됩니다.

 

4. DevOps

DevOps는 개발(Development)과 운영(Operation)의 합성어로,

개발부터 운영에 이르는 전체 프로세스의 품질 및 속도를 향상하기 위한 방식입니다.

과거 개발과 운영은 서로 단절 되어있던것과 달리,

개발과 운영 간의 프로세스를 통합 후 서로 협업하여 빠른 개발과 운영을 할 수 있게 하는 것이 DevOps입니다.

 

개발 계획, 비즈니스 타당성 검토, 개발, Build, Release, 서버 쪽에 Deploy Operation, Monitoring 일련의 과정은 뫼비우스 띠 처럼 순환하여 공동 작업을 합니다.

이렇게 하면 개발-운영의 프로세스가 자동화 될 뿐만이 아니라 생상성이 극대화되는 이점이 있습니다.

이 일련의 과정중 개발-배포까지 자동화 하는 것이 CI/CD 입니다.

'삽질' 카테고리의 다른 글

오픈소소는 공짜가 아니다.  (0) 2023.11.29
헥사고날 아키텍처  (0) 2023.11.28
REST API와 HTTP Header  (0) 2023.10.31
Mybatis selectKey 사용 방법  (0) 2023.10.26
Spring Web의 두 가지 기본 Context  (0) 2023.10.22