[클라우드 네이티브] 개념 정리
기존 로컬 PC저장소를 활용하던 시절과 달리 현재는 클라우딩 서비스가 대세를 보이고 있다
클라우드는 쉽게 설명하자면
외부에 있는 PC에 원격으로 접속해 PC자원을 사용하는 것이다.
그렇다면 클라우드 네이티브는?
- 클라우드 네이티브는 애플리케이션 개발을 위한 소프트웨어 방식으로서 확장성, 안정성, 고성능을 갖춘 기본적인 개발 방식과 그 특성을 의미하며, 애플리케이션과 서비스를 클라우드 아키텍처에 따라 조정하는 데 사용
=> 즉, 클라우드 환경에 맞춰 구축되어 클라우드의 장점을 발휘하는데 최적화된 상태를 의미
1. 클라우드 네이티브 ( Cloud Naitive )
- 핵심 기술
ㄴ 1) 컨테이너
ㄴ 2) 마이크로서비스아키텍처(MSA)
ㄴ 3) DevOps
ㄴ 4) CI/CD
1) 컨테이너
: 어플리케이션을 실행에 필요한 라이브러리, 구성 파일 등과 패키지로 묶어서 이미지 처럼 배포하는 것
- 기존의 비교 대상 기술
- 가상머신 ( Virtual Machine ) => 단점 : HostOS에 종속되어 분리한 어플리케이션마다 OS 할당해줘야함
- 관련 SW
- Docker ( 현재 높은 점유율)
- K8s (Kubernetes) ( 빠르게 상승중인 점유율 )
- 장점**
- 경량성
- 높은 이식성
(** 참고: [ Docker ] Docker Container vs Virtual Machine )
2) MSA (Micro Service Architecture)
: 하나의 애플리케이션을 여러 서비스로 작게 나누고 서비스들끼리 통신하는 형태의 아키텍쳐로 구축하는 것을 의미
- 기존의 비교 대상 기술
- 모놀리식 => 단점: 전체 어플리케이션이 하나로 구성되며 각 모듈이 연결되어 있어서 한부분이 전체에 영향을 끼침
- 장점
- 독립성 ( 한 기능에 문제가 생겨도 전체 시스템에 영향을 주지 않음 )
- 확장가능성 ( 각 서비스가 연결되어 있지 않아 서비스별로 분리해서 개발, 배포, 확장이 가능 )
- 유연성 ( 서비스 특성에 맞는 언어와 인프라를 사용할 수 있음 )
- 유지보수 용이
- 단점
- 복잡함
- 느린 속도 ( 서비스간 통신하는 구조로 인해 )
2) DevOps (Development +Operation)
: 소프트웨어 개발과 운영의 스피드와 품질 향상을 위해 개발과 운영 간의 프로세스를 통합 후 서로 협업하도록 하는 것
- 형태
- 개발 계획
- 비즈니스 타당성 검토
- 개발
- Build
- Release
- 서버쪽 Deploy
- Operation
- Monitoring
의 과정이 작동하여 공동작업을 수행
- 장점
- 개발-운영 프로세스 자동화
- 생산성 극대화
2) CI/CD (Continuous Integration / Continuous Delivery·Deployment)
: 지속적 통합과 지속적 배포를 의미
- CI : 개발자를 위한 자동화 프로세스로 개별 개발자가 작업한 코드가 자동으로 빌드 및 테스트 되는 것을 의미
- CD : 배포, 코딩 결과를 최종 사용자에게 넘겨주어 실행 가능하도록 하는 단계를 자동화하는 것을 의미
- 관련 SW
- Jenkins
- Bamboo
- 장점
- 시장 출시 시간 감소
- 소프트웨어 품질 개선
- 배포 파이프라인 효율 증
- 단점
- 복잡한 파이프라인 설계 과정 ( 설계에 따라 파이프라인이 느리게 구동됨)
- 인프라 리소스 소모 ( -> GitHub Actions 등 관리형 CI/CD 서비스 이용시 완화가능)
이외에도
+) 서비스 메시 :
- 여러 마이크로서비스 간의 통신을 관리하는 클라우드 인프라의 소프트웨어 계층
- 애플리케이션에 새 코드를 작성하지 않고도 추가 기능을 도입
+) 서버리스 (Serverless)
- 클라우드 제공업체가 기반 서버 인프라를 전적으로 관리하는 클라우드 네이티브 모델
- 클라우드 인프라가 애플리케이션 요구 사항에 맞게 자동으로 확장 및 구성
등이 있다.
2. 클라우드 네이티브의 장점
ㄴ 1) 보다 적은 컴퓨팅 리소스 사용
ㄴ 2) 즉각적인 배포 가능
ㄴ 3) 컴퓨팅 리소스의 효율적인 확장 가능
ㄴ 4) 더 빠른 개발
ㄴ 5) 플랫폼 독립성
ㄴ 6) 비용의 효율적인 관리 ( 실제 사용하는 리소스만 비용 지불 )
3. 클라우드 네이티브 스택
: 개발자가 클라우드 네이티브 애플리케이션을 구축·관리·실행하는 데 사용하는 기술 계층을 설명하는 용어
1) 인프라 계층
- 클라우드 제공업체가 관리하는 운영 체제, 스토리지, 네트워크 및 기타 컴퓨팅 리소스로 구성
- 예시) AWS, Azure 등
2) 프로비저닝 계층
- 클라우드 환경을 할당하고 구성하는 다양한 클라우드 서비스로 구성
3) 런타임 계층
- 컨테이너가 작동할 수 있는 클라우드 네이티브 기술을 제공
- 클라우드 데이터 스토리지, 네트워킹 기능, 그리고 컨테이너화된 리소스와 같은 컨테이너 런타임이 포함
4) 오케스트레이션 및 관리 계층
- 다양한 클라우드 구성 요소를 통합하여 하나의 유닛으로 작동하도록 하는 역할
- 개발자는 오케스트레이션 도구를 사용하여 다양한 시스템에서 클라우드 애플리케이션을 배포, 관리 및 확장
- 예시) Kubernetes
5) 애플리케이션 정의 및 개발 계층
- 클라우드 네이티브 애플리케이션을 구축하기 위한 소프트웨어 기술
- 개발자는 클라우드 기술을 사용하여 클라우드 애플리케이션을 구축
- 예시) 데이터베이스, 메시징, 컨테이너 이미지, 지속적 통합(CI) 및 지속적 전달(CD) 도구
6) 관측성 및 분석 도구 계층
- 클라우드 애플리케이션의 시스템 상태를 모니터링 및 평가하고 개선
- 개발자는 도구를 사용하여 지표를 모니터링함으로써 앱의 서비스 품질에 문제가 없는지 확인
- 예시) CPU 사용량, 메모리, 지연 시간