KT AIVLE

KT AIVLE(KT 에이블스쿨) 5기 DX트랙_클라우드 서비스_(5)

gonii00 2024. 5. 21. 23:41
728x90

Microservices

Container & Kubernetes

클라우드 네이티브

: 클라우드 컴퓨팅 환경에서 현대적 애플리케이션을 구축, 배포 및 관리하는 접근 방식

- 클라우드의 이점을 최대한 활용

- 확장성, 유연성 및 복원력

 

  전통적인 애플리케이션 클라우드 네이티브 애플리케이션
구축/운영 온프레미스 환경 클라우드 환경
아키텍처  모놀리스 마이크로 서비스
컴퓨팅 기술 물리적 서버(+가상화) 컨테이너 
조직/프로세스 역할별 분리(개발, 운영, QA 등) DevOps
빌드/배포 수작업 CI/CD, 자동화 도구 

 

마이크로 서비스

Monolithic 아키텍처 

- 모놀리식(Monolithic)은 비즈니스 로직이 한 애플리케이션 안에 포함되어 있는 전통적인 소프트웨어 아키텍처 구조임

 

장점 단점
단일 코드베이스로 애플리케이션 개발이 용이함 대규모 애플리케이션인 경우 많은 양의 코드를 개발자가 모두 이해하기 어렵기 때문에 추가 개발 및 유지보수가 어려움
실행 파일 또는 디렉토리가 하나여서 배포가 용이함 안정성, 확장성 저하
분산된 애플리케이션에 비해 테스트를
더 빠르게 수행할 수 있음
변경이 어려움 
내부 프로세스 간 통신 지연시간 최소화  

 

Microservices 아키텍처 

- 하나의 큰 애플리케이션을 여러 개의 작은 서비스 유닛으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처

장점 단점
기능이 추가되거나 수정해야 할 서비스만 빠르게 빌드, 배포할 수 있음 (독립성) 여러 팀이 작은 수많은 서비스를 만들기 때문에 관리하기 어려움 (무분별한 개발 확산의 위험, 표준화 부족 등)
전체 애플리케이션이 중단될 위험 없이 특정 서비스에 대한 변경 사항을 배포 (안정성) 서비스들끼리 네트워크상에서 서로 통신을 하는 과정에서 모놀리식 아키텍처에 비해 통신관련 오류 발생 ↑
일부 기능 오류가 있으면 해당 기능만 오류가 발생하고 그 부분만 빠르게 고쳐서 정상화가 가능 (높은 유지 관리성) 각각의 서비스별로 테스트 도구, 호스팅 인프라, 모니터링 도구 등에 대한 자체적인 비용이 발생
해당 기능에 적합한 기술, 언어, 버전, DB 등을 선택하여 사용할 수 있음 (기술 유연성)  

 

컨테이너

: 운영 체제에서 실행되는 프로세스를 격리하여 별도의 실행 환경(SW 서비스 구동을 위한 격리환경)을 제공하는 운영체제 수준의 가상화 기술

장점: 이식성, 경량성, 운영 효율성 

- 애플리케이션 코드, 런타임, 종속 항목(library), 구성을 하나의 객체로 패키징한 것(이식성) 

기술

1. 이동성 

- 컨테이너화 플랫폼(ex. Docker)을 지원하는 모든 OS에서 컨테이너를 사용

- 서로 다른 버전과 종속성을 가진 애플리케이션을 동시에 실행할 수 있음

2. 확장성

- 컨테이너는 매우 가볍고 빠르게 실행되어 신속하게 시작하고 확장할 수 있음

- 뛰어난 리소스 활용도로 하나의 서버에서 많은 컨테이너 확장 가능

3. 효율적 배포 

- 개발, 테스트 및 프로덕션 환경에서 동일한 동작과 성능을 기대할 수 있음

- CI/CD 파이프라인과 쉽게 통합되고 배포 및 개발주기 단축

  가상머신 컨테이너
시작 시간 수분 수초
이미지 크기 GB 단위 MB 단위
플랫폼  하이퍼바이저 도커
Guest OS Linux/Window 등 다양  Host OS 활용 

 

- Docker는 오픈 소스 컨테이너화 플랫폼으로 애플리케이션을 컨테이너라는 표준화된 유닛으로 패키징하여

  신속하게 빌드, 배포 및 관리할 수 있도록 지원

- 백엔드, 데이터베이스 서버, 메시지 큐 등 어떤 프로그램도 컨테이너로 추상화 가능

- 도커 이미지를 생성한 후 이미지를 다운받아 컨테이너를 실행하면 되기 때문에 서로 다른 환경에서도

  애플리케이션을 빠르고 편리하게 배포할 수 있음

 

쿠버네티스

- 벤더나 플랫폼에 종속되지 않고 오픈소스 생태계의 광범위한 제품과 결합하여 활용할 수 있어 클라우드나 온프레미스 환경에서 널리 활용중임

 

1. Control Plane 

: 클러스터와 워커 노드 내 Pod를 예약, 상태 감시 및 제어, 관리하는 역할을 담당 

Kube API server 

- API server를 통해 서로 다른 컴포넌트가 필요한 정보를 주고받을 수 있음 

etcd 

- 쿠버네티스에서 필요한 모든 데이터를 키-값 형태로 저장하는 데이터베이스 역할 

Controller 

- 제어 루프를 통해 클러스터의 상태를 감시하고 클러스터의 현재 상태가 원하는 상태가 되도록 함으로써 Pod들을 관리 

Scheduler

- 클러스터 안에 배포된 노드 중 자원 할당이 가능한 알맞은 노드를 선택해서 새로운 Pod를 실행해주는 역할 

 

2. Data Plane 

: 컨테이너화된 애플리케이션의 구성 요소인 Pod를 호스팅하는 워커 노드를 생성 및 관리 

kubelet 

- 클러스터 내부 모든 워커 노드에서 실행되는 에이전트 

kube-proxy 

- 워커노드로 들어오는 네트워크 트래픽을 적절한 컨테이너로 라우팅하고 노드와 컨트롤 플레인간의 네트워크 통신을 관리 

컨테이너 런타임

- Pod 형태로 배포된 컨테이너를 실행시키는 컴포넌트이며 Docker를 가장 많이 활용 중임 

 

쿠버네티스 Service 유형 

1. Loadbalancer 

- 별도의 외부 로드 밸런서를 제공하는 퍼블릭 클라우드(AWS, Azure, GCP 등) 환경에서

  해당 로드 밸런서를 서비스로 활용

2. Nodeport 

- 각 노드에 할당된 특정 포트로 들어오는 외부 트래픽을 서비스 포트와 매핑하여 연결된 Pod로 전달

3. ClusterIP 

-  Pod가 클러스터 내부의 다른 리소스들과 통신할 수 있도록 해주는 기본적인 유형

 

컨테이너 서비스 

Image Registry (컨테이너 이미지 저장소)  Amazon ECR
Management (스케줄링, 배포, 스케일링)  Amazon ECS, Amazon EKS 
Hosting (컨테이너 구동) Amazon EC2, Amazon Fargate 

 

  Amazon ECS Amazon EKS 
일반 AWS 환경에 국한된 컨테이너 서비스 표준 쿠버네티스 기반의 컨테이너 서비스
마이그레이션 AWS에서만최적화되어있어다른 환경으로의서비스마이그레이션이 상대적으로어려움 오픈소스기반이므로타클라우드플랫폼, 온프레미스에서마이그레이션이쉬움
권장 사항 컨테이너구축, 배포및운영에대한 경험이없을경우ECS활용권장 오픈소스생태계도구에익숙하고이를 잘결합해서운영할노하우가있을경우

 

Serverless

Lambda, API Gateway

- 특징: 민첩성과 유연성을 고려하여 서버리스 기반 서비스 구축 사례가 늘어나고 있음 

- 장점

1_ 리소스를 상시 구동(활용)하는 방식이 아닌 요청이 있을 때에만 리소스를 할당하여 코드를 빠르게 실행하고 요청이 종료되면 중단하는 방식이므로 비용 절감 효과 ↑

2_ 자동 확장/축소가 가능하도록 설계되어 급격한 트래픽 변화에 유연한 대응이 가능

 

AWS Lambda

서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 이벤트 중심의 서버리스 컴퓨팅 서비스 

특징 

- Node.js, Java, Python, C#, Go, Ruby 등을 지원 

- Lambda API 호출 또는 이벤트에 대한 응답으로 코드 실행 

- 상태 비저장 코드 실행 

- 최대 명령 실행기간, 실행 시 메모리(최대10MB) 

- 구성: 이벤트 소스, Lambda 함수

 

AWS Step Functions 

: 일련의 단계로, 구성된 워크플로우를 설계하고 실행할 수 있도록 함으로써, 작업을 보다 쉽게 조정할 수 있게 하는 완전 관리형 서비스 

 

AWS API Gateway 

: 클라이언트가 백엔드 서비스에 액세스할 수 있게 해주는 "관문" 역할 수

 

Automation

CloudFormation, Elastic Beanstalk

인프라 자동화 

코드형 인프라: 코드를 통해 인프라를 배포하고 관리하는 방식

[IaC 활용 시 이점]

- 일관성: 동일한 인프라 환경을 일관되고 쉽게 구성할 수 있고 수동 구성 중에 자주 발생하는 오류나 구성 변경을 제거

- 효율성: 반복 작업을 자동화하고 운영자 한 명이 동일한 코드를 사용하여 100대 또는 1,000대의 시스템을 구축하고 관리

- 속도: 템플릿 기반으로 시스템을 빠르게 구성하고 유지 보수 및 관리가 간소화되어 DevOps를 통해 신규 소프트웨어를 훨씬 더 신속하게 출시할 수 있음

- 위험 감소: 다른 소프트웨어 소스 코드 파일과 마찬가지로 구성 파일이 소스 통제를 받을 수 있도록 버전 제어를 지원

 

AWS CloudFormation

: AWS 리소스를 코드 기반으로 모델링하고 자동으로 생성하여 리소스 프로비저닝 및 관리 시간을 줄이고 애플리케이션에 더 많은 시간을 활용하도록 해주는 인프라 자동화 서비스

작동방식 

- 필요한 AWS 리소스를 템플릿 파일로 작성하면, CloudFormation이 이를 분석해서 빠르게 리소스를 생성 (이렇게 생성된 리소스를 스택이라고 함)

- 템플릿은 YAML이나 JSON을 사용하여 작성할 수 있으며 작성된 템플릿을 로컬이나 S3 버킷에 저장한 후 파일의 위치를 지정하여 스택을 생성

 

AWS Systems Manager

대규모 인스턴스의 원격관리, OS 패치 적용, 구성 관리 등을 수행하기 위한 관리형 서비스 

 

주요기능 

Run Command - 서버에 로그인하지 않고 대규모 인스턴스를 원격으로 관리할 수 있는 기능
- 수십 또는 수백 개의 인스턴스 집합에서 애플리케이션 업데이트 또는 Linux 셸 스크립트 및 Windows PowerShell 명령 실행과 같은 온디맨드 변경을 수행
패치 관리자 - Amazon EC2 그룹 또는 온프레미스 인스턴스 전체에서 자동으로 운영 체제 및 소프트웨어 패치를 선택 및 배포하도록 지원
- 미리 설정된 시간에만 패치가 적용되도록 패치에 대한 유지 관리 기간 (Maintenance window)을 예약할 수 있음
상태 관리 - 관리형 인스턴스를 정의된 상태로 유지(설치, 삭제)하는 프로세스를 자동화
- 서버 구성, 안티바이러스 정의, 방화벽 설정 등과 같은 구성 정보를 제어

 

AWS Elastic Beanstalk

개발 코드를 업로드하기만 하면 인프라 프로비저닝, 로드 밸런싱, 오토 스케일링, 애플리케이션 상태 모니터링, 배포를 자동으로 처리하도록 구성 

 

장점 

1. 빠르고 간단한 시작 (몇 분 안에 애플리케이션 배포 환경을 구성하여 사용)

2. 개발자 생산성 향상 (코드 작성에 집중)

3. 완전한 자원 제어 (애플리케이션에 적합한 리소스를 선택)

4. 불필요한 자원 낭비 없음 (오토 스케일링을 통해 자동으로 확장하거나 축소)

5. 사용되는 AWS 리소스에 대해서만 비용을 지불

 

Cloud Architecture

아키텍처

: 비즈니스 요구사항을 만족하는 시스템을 구축하기 위해 필요한 전체 시스템에 대한 구조를 최적화하여 정의한 설계 문서

 

클라우드 아키텍처 설계 

핵심 요소 

1. 비용 최적화 

2. 성능 효율성 

3. 안정성

4. 보안

5. 운영 우수성 

 

< 총정리 >