1. 클라우드 네이티브(Cloud Native)
- 클라우드 컴퓨팅 환경에서 현대적 애플리케이션을 구축, 배포 및 관리하는 접근 방식
- 클라우드 이점을 최대한 활용할 수 있도록 애플리케이션을 구축 및 운영하고, 고객의 요구에 맞게 신속하게 업데이트할 수 있는 확장성, 유연성 및 복원력이 뛰어난 애플리케이션을 구축 및 운영한다.
(1) 전통적인 애플리케이션 vs 클라우드 네이티브 애플리케이션
전통적인 애플리케이션 | 클라우드 네이티브 애플리케이션 | |
구축/운영 | 온프레미스(Data center) 환경 | 클라우드 환경 |
아키텍처 | 모놀리스 | 마이크로 서비스 |
컴퓨팅 기술 | 물리적 서버(+가상화) | 컨테이너 |
조직/프로세스 | 역할별 분리 (개발, 운영, QA 등) | DevOps |
빌드/배포 | 수작업 | CI/CD, 자동화 도구 |
=> 한개로 전체를 통합 vs 여러 개로 작게 쪼겜
(2) Monolithic 아키텍처 vs Microservices(MSA) 비교
Monolithic | Microservice | |
장점 | - 단일 코드 베이스로 애플리케이션 개발이 용이 (어떤 기능이든 개발 환경이 같아서 복잡X) - 실행 파일 또는 디렉토리가 하나여서 배포가 용이 - 분산된 애플리케이션에 비해 테스트를 더 빠르게 수행 - 내부 프로세스 간 통신 지연시간 최소화 |
- 기능이 추가되거나 수정해야 할 서비스만 빠르게 빌드, 배포할 수 있음(독립성) - 전체 애플리케이션이 중단될 위험 없이 특정 서비스에 대한 변경 사항을 배포(안정성) - 일부 기능 오류가 있으면 해당 기능만 오류가 발생하고, 그 부분만 빠르게 고쳐서 정상화가 가능(높은 유지 관리성) - 해당 기능에 적합한 기술, 언어, 버전, DB 등을 선택하여 사용할 수 있음(기술 유연성) |
단점 | - 대규모 애플리케이션인 경우 많은 양의 코드를 개발자가 모두 이해하기 어렵기 때문에 추가 개발 및 유지보수가 어려움 - 일부분의 기능 오류가 전체 애플리케이션에 영향, 개별 컴포넌트 쉽게 확장할 수 없음 (안정성, 확장성 저하) - 작은 수정사항이 있어도 전체를 다시 빌드하고 배포를 해야 함 (변경이 어려움) |
- 여러 팀이 작은 수많은 서비스를 만들기 때문에 관리하기 어려움 (무분별한 개발 확산의 위험, 표준화 부족 등) - 서비스들끼리 네트워크 상에서 서로 통신을 하는 과정에서 모놀리식 아키텍처에 비해 통신관려 오류 발생 多 - 각각의 서비스별로 테스트 도구, 호스팅 인프라, 모니터링 도구 등에 대한 자체적인 비용이 발생 |
=> 하지만, MSA 도입이 필수적인 것은 아니다. 조직의 필요와 기술 환경에 따라 선택할 수 있다.
- 위 장단점을 보았을 때
- MSA는 애플리케이션의 복잡성이 높고 규모가 큰 곳, 팀이 분산되어 있고 독립적인 작업을 선호, 빈번한 배포와 확장이 필요한 환경, 다양한 기술 스텍과 도구를 활용해야 하는 경우 알맞다.
(ex. Neflix : 전 세계 사용자를 위한 고가용성과 확장성을 확보, 각 서비스는 독립적으로 배포 및 확장이 가능)
- Monolithic의 경우, 작은 규모의 포르젝트이거나 초기 단계에서 빠른 개발이 중요한 경우, 팀 리소스가 제한적이거나, MSA 운영 경험이 부족한 경우, 애플리케이션의 요구 사항이 단순하고 변경이 적은 곳에서 활용하는 것이 알맞다.
(ex. 스타트업 : 빠른 제품 출시가 목표이며, 초기 복잡성을 줄이고, 사용자가 증가하면서 MSA로 전환한다.)
2. 컨테이너
- 운영 체제에서 실행되는 프로세스를 격리하여 별도의 실행 환경(SW 서비스 구동을 위한 격리환경)을 제공하는 운영체제 수준의 가상화 기술
- 이식성(이동성), 경량성, 확장성, 운영 효율성 측면에서 장점을 보유한 기술이다.
- 마이크로 서비스 아키텍처(MSA)를 채택한 애플리케이션에 이상적인 선택이다.
- 개발, 테스트, 운영 환경에 설치되어 있는 라이브러리 버전이 다를 경우, 로컬에서 개발할 때는 잘 실행되던 애플리케이션이 다른 환경에서는 구동되지 않는 문제가 자주 발생한다.
- 컨테이너는 애플리케이션 코드, 런타임, 라이브러리, 구성을 하나의 객체로 패킹한 것으로,
- 리소스가 격리된 프로세스 형태로 실행되어 서로 다른 환경에서도 빠르고 안정적으로 실행이 가능하다.
(1) 가상머신과 컨테이너 비교
가상 머신 | 컨테이너 | |
시작 시간 | 수분 | 수초 |
이미지 크기 | GB 단위 | MB 단위 |
플랫폼 | 하이퍼바이저(Hypervisor) | 도커(Docker) |
Guest OS | Linux/Windows 등 다양 | Host OS 활용 |
(2) 컨테이너 실행
- Docker file(컨테이너 이미지를 만드는 명령이 포함되어 있는 템플릿)을 생성한 후 이를 빌드하여 컨테이너 이미지(컨테이너 실행에 필요한 파일과 설정 값 등을 포함) 생성
- 컨테이너 이미지를 Docker Hub와 같은 공용 레지스트리나 Amazon ECR과 같은 프라이빗 레지스트리 저장소로 푸시
- 레지스트리에서 컨테이너 이미지를 가져와서 컨테이너를 실행
=> 단일 호스트에서 소수의 컨테이너를 실행하고 관리하는 것은 쉽지만 수십 개 호스트 위에 수백~수천 개 컨테이너가 구동되는 애플리케이션 운영 환경에서는 어떻게 관리해야 할까?
3. 쿠버네티스
- 컨테이너 오케스트레이션 도구(또는 컨테이너 관리 플랫폼)는 컨테이너 관리, 배포, 확장 등을 자동화하는 데 사용되며 Kubernetes, Docker Swam 등 다양한 제품이 있는데,
- 그 중 쿠버네티스는 벤더나 플랫폼에 종속되지 않고 오픈 소스 생태계의 광범위한 제품과 결합하여 활용할 수 있어 클라우드나 온프레미스 환경에서 널리 활용 중이다.
(1) Control Plane & Data Plane
① Control Plane
- 클러스트와 워커 노드 내 Pod을 예약, 상태 감시 및 제어, 관리하는 역할을 담당
② Data Plane
- 컨테이너화된 애플리케이션의 구성 요소인 Pod을 호스팅하는 워커 노드를 생성 및 관리
구분 | 컨트롤 플레인 | 데이터 플레인 |
역할 | 클러스터 상태 관리, 지시 | 작업 실행 및 실제 워크로드 처리 |
구성 요소 | API 서버, 스케줄러, 컨트롤러, etcd | 노드, kubelet, kube-proxy, 컨테이너 런타임 |
책임 | 의사 결정, 상태 감시 및 복구 | 파드 실행, 네트워크 및 데이터 처리 |
비유 | 항공 관제탑 | 항공기 및 승무원 |
- 퍼블릭 클라우드의 관리형 쿠버네티스 서비스는 고객이 직접 구축 및 관리하기 어려운 쿠버네티스의 Control plane과 Data plane을 설치, 관리하는데 최적화된 환경을 제공해준다.
- 퍼블릭 클라우드 내 다양한 연계 서비스와 유기적으로 통합되어 있어 보다 편리한 쿠버네티스 운영 환경을 제공하며 최근 서버리스 형태로 계속 발전해가고 있다.
'클라우드 서비스' 카테고리의 다른 글
[클라우드 서비스] Loosely Coupled Arch. _ 20241205 (0) | 2024.12.08 |
---|---|
[클라우드 서비스] Elasticity & HA _ 20241205 (2) | 2024.12.08 |
[클라우드 서비스] Database Service _ 20241204 (2) | 2024.12.06 |
[클라우드 서비스] Storage Service _ 20241204 (4) | 2024.12.06 |
[클라우드 서비스] Computing Service _ 20241203 (4) | 2024.12.05 |