AWS/Technical Essentials
AWS 컴퓨팅
AWS Technical Essentials 트랙의 두 번째 단원 학습 정리 내용
서비스형 컴퓨팅
기본적인 수준에서 가상 머신(VM), 컨테이너 서비스, 서버리스라는 3가지 유형의 컴퓨팅 옵션을 사용할 수 있습니다.
서버
- 대개 HTTP 요청을 처리하면 클라이언트-서버 모델을 따라 응답을 클라이언트에게 보낸다.
- API 기반 통신도 해당 모델에 속함
- 사용자 요청 처리 및 응답을 위해 CPU, 메모리, 네트워킹 기능을 제공하여 애플리케이션을 구동한다.
- HTTP 서버 예시) IIS와 같은 Windows 옵션, Apache HTTP Server, Nginx, Tomcat과 같은 Linux 옵션
적합한 컴퓨팅 옵션 선택
- 기본적인 수준에서 가상 머신(인스턴스), 컨테이너, 서버리스 중 선택할 수 있다.
- 인프라에 관한 지식이 있다면 가상 머신(VM)
- 호스트 머신에 하이퍼바이저1를 설치하고 가상 머신을 실행
- AWS에서는 EC2라는 서비스를 제공하고 있다.
Amazon EC2 시작하기
어떤 애플리케이션이든 가용성이 높게 아키텍팅할 때는 2개의 각기 다른 가용 영역에 최소한 2개의 EC2 인스턴스를 사용하는 것을 고려하십시오.
Amazon EC2
- 클라우드에서 안전하고 크기 조정이 가능한 컴퓨팅 용량을 제공하는 웹 서비스
- EC2 인스턴스 생성을 위한 구성 요소
- 하드웨어 사양: CPU, 메모리, 네트워크, 스토리지
- 논리적 구성: 네트워킹 위치, 방화벽 규칙, 인증, 원하는 운영 체제
Amazon Machine Image
- EC2 인스턴스를 시작할 때 첫 번째로 설정하는 것이다.
- 원하는 운영 체제 구성, 스토리지 매핑, 아키텍처 유형, 시작 권한, 그리고 사전 설치된 추가 소프트웨어 애플리케이션이 포함된다.
- AMI는 재사용이 가능하고 새로운 EC2 인스턴스를 구성할 때 활용할 수 있다.
AMI와 EC2 인스턴스 간 관계
- EC2 인스턴스는 AMI에 정의된 내용이 실제로 인스턴스화된 것이다.
- 케이크로 비유하자면 케이크는 케이크 레시피가 실제로 인스턴스화된 것이다.
AMI 찾기
- Quick Start AMI, AWS Marketplace AMI, 내 AMI, 커뮤니티 AMI, 사용자 지정 이미지 등
- AWS Management Console의 각 AMI에는 AMI ID가 있고, 접두사
ami-를 갖는다.
EC2 구성
- EC2 인스턴스 생성을 위해 인스턴스 유형, 네트워크, 스토리지 등의 구성을 설정해야 한다.
- 온프레미스의 경우 서버 용량 결정을 위한 초기 자본이 들어가겠지만 클라우드 기반 서비스는 간단한 API 호출로 변경 가능하다.
Amazon EC2 인스턴스 유형
- EC2 인스턴스는 가상 프로세서(vCPU), 메모리, 네트워크, 그리고 경우에 따라 인스턴스 스토리지 및 그래픽 처리 장치(GPU)의 조합이다.
- 인스턴스 유형의 이름은 다음과 같이 분석할 수 있다.
- 첫 번째 자리: 인스턴스 패밀리
- 두 번째 자리: 인스턴스의 세대
- 마침표 앞에 있는 나머지 문자: 스토리지 같은 추가 속성
- 마침표 다음: 인스턴스의 크기
인스턴스 패밀리
- 각 인스턴스 패밀리는 각각의 사용 사례에 맞게 최적화되어 있다.
- 자세한 내용은 해당 링크에서
EC2 인스턴스 위치
- 달리 지정하지 않는 한 EC2 인스턴스를 시작하면 인스턴스가 기본 VPC(Virtual Private Cloud)2에 배치된다.
- 기본 VPC에 넣은 모든 리소스는 퍼블릭으로 설정되고 인터넷에서 엑세스할 수 있기 때문에 고객 데이터 또는 개인 정보를 이러한 VPC에 배치하면 안된다.
고가용성을 위한 아키텍팅
- 네트워크에서 인스턴스는 선택한 가용 영역에 상주한다.
- EC2 인스턴스는 큰 인스턴스 몇 개 보다 작은 인스턴스를 많이 사용하는 것이 아키텍쳐 설계에 유리하다.
- 인스턴스를 분리하여 설계할 경우 하나가 다운되도 가용성에 영향을 덜 받는다.
Amazon EC2 인스턴스 수명 주기
EC2 인스턴스는 인스턴스를 생성하는 순간부터 종료될 때까지 여러 상태를 거칩니다.
EC2 인스턴스 수명 주기
- 인스턴스를 시작하면 Pending 상태로 진입한다. 대기 중인 경우 요금이 부과되지 않으며 실행 중 상태로 들어갈 준비를 한다.
- 인스턴스가 Running 상태면 사용할 준비가 된 것이고, 요금 부과가 시작되는 단계다.
- 인스턴스를 재부팅하면 중지 작업 다음 시작을 수행하는 것과는 다르다. 운영 체제를 재부팅하는 것과 동일하며 퍼블릭 DNS 이름, 프라이빗 및 퍼블릭 IPv4 주소를 유지한다.
- 인스턴스를 중지하면 Stopping 상태로 전환된 다음, Stopped 상태로 들어간다. 랩톱 종료와 동일하며 중지 후 시작을 하면 새로운 기본 물리적 서버에 배치될 수 있다.
- 인스턴스를 종료하면 인스턴스 스토어가 삭제되고 퍼블릭 IP 주소와 프라이빗 IP 주소가 모두 손실된다.
중지 및 중지-최대 절전 모드의 차이점
- 인스턴스 중지는 중지 중에서 중지됨 상태로 전환되는 것을 의미한다.
- 중지 후에는 사용량/데이터 전송 요금이 없지만, Amazon EBS 볼륨 요금은 계속 발생한다.
- 최대 절전 모드 중지는 EC2가 OS에 절전 모드 진입 신호를 전송하고 RAM 내용이 EBS 볼륨 루트에 저장된다.
- 최대 절전 모드 설정이 활성화되어 있고, 사전 조건을 충족해야 사용 가능하다.
요금
- 애플리케이션 실행 방식에 적합한 요금 옵션을 설정하면 비용을 절감할 수 있다.
- 온디맨드: 사용한 만큼만 시간/초 단위로 지불
- 스팟 인스턴스: 온디맨드 대비 최대 90% 저렴, 남는 요금을 경매식으로 사용
- 절감형 플랜: 1~3년 약정, 최대 72% 절감
- 예약 인스턴스: 최대 72% 할인 (1년/3년 약정)
- 전용 호스트: 온디맨드 또는 예약 구매 가능 (최대 70% 할인), 물리 서버 단위 제공 및 라이센스 BYOL 가능
컨테이너 서비스
모든 목적에 부합하는 컴퓨팅 서비스란 존재하지 않습니다. 요구 사항에 맞춰 선택해야 합니다. 핵심은 각 옵션이 무엇을 제공하는지 이해하는 것입니다.
- 컨테이너와 컨테이너를 실행하는 방법을 알아본다.
- 컨테이너는 웹 애플리케이션, 리프트 앤 시프트 마이그레이션, 분산 마이그레이션, 개발, 테스트 및 프로덕션 환경의 간소화 등 다양한 워크로드를 호스팅할 수 있다.
컨테이너
- 코드와 종속성을 함께 패키징한 표준화된 실행 단위
- 환경 간 이식성 보장과 독립된 실행 환경을 제공한다는 특징을 갖는다.
- 대표적인 컨테이너 플랫폼으로 Docker가 있으며 컨테이너의 생성, 패키징, 배포, 실행을 지원한다.
VM과 컨테이너의 차이점
| 항목 | 컨테이너 | 가상 머신 (VM) |
|---|---|---|
| 운영 체제 | 호스트와 운영 체제 및 커널을 공유 | 자체 운영 체제를 포함 |
| 무게/속도 | 가볍고 거의 즉시 가동 | 무겁고 부팅 시간 필요 |
| 자원 사용 | 효율적 (낮은 오버헤드) | 리소스 낭비 가능 (운영 체제 중복) |
| 확장성 | I/O 버스트 시 빠른 확장 가능 | 상대적으로 느림 |
| 유연성 | 제한적 (호스트 OS에 의존) | 더 많은 기능과 유연성 제공 |
| 적합한 용도 | 빠른 배포, 마이크로서비스 등 | 복잡한 애플리케이션, OS 종속 작업 등 |
컨테이너 오케스트레이션
- EC2 인스턴스 위에 여러 개의 컨테이너를 실행할 수 있으나, 단일 인스턴스는 고가용성 및 확장성이 부족하다.
- 컨테이너 배치 전략, 실패 시 대응 방식, 인스턴스 장애 시 복구 방식, 컨테이너 배포 상태 모니터링 방법 등의 고려사항이 존재
- 이러한 문제를 컨테이너 오케스트레이션 서비스로 해결
- AWS에서 제공하는 컨테이너 오케스트레이션 서비스로 Amazon ECS(컨테이너)와 AmazonEKS(쿠버네티스 기반)가 있다.
Amazon ECS로 컨테이너 관리
- Amazon ECS는 AWS에서 제공하는 E2E 컨테이너 오케스트레이션 서비스이며 컨테이너의 정의, 배포, 실행, 관리까지 전체 과정을 지원한다.
- 태스크를 AWS Fargate, EC2 인스턴스 클러스터 방식으로 실행할 수 있다.
| 용어 | 설명 |
|---|---|
| 컨테이너 (Container) | 실제로 실행되는 단위. 이미지 기반으로 실행됨. |
| 태스크 (Task) | ECS에서 실행되는 하나의 작업 단위이며, 하나 이상의 컨테이너를 포함할 수 있음. |
| 태스크 정의 (Task Definition) | 어떤 컨테이너들을 어떤 설정으로 실행할지를 정의한 JSON 형식의 청사진. |
| 서비스 (Service) | 태스크를 ECS 클러스터에서 지속적이고 안정적으로 실행하게 해주는 관리자 역할. |
Amazon EKS에서 Kubernetes 사용
쿠버네티스(Kubernetes)
컨테이너화된 워크로드와 서비스를 오케스트레이션하는 오픈 소스 플랫폼. 이동성과 확장성, DevOps 친화적인 구조를 갖춘 빠르게 성장 중인 에코시스템이다.
- AWS에서 Kubernetes를 관리형 서비스 형태로 제공
- 제어 플레인, 노드 설치·운영·유지보수를 AWS가 대신 수행
ECS와의 차이점
| 항목 | Amazon ECS | Amazon EKS |
|---|---|---|
| 인프라 | EC2 인스턴스 + ECS 에이전트 | EC2 인스턴스 또는 Fargate + Kubernetes 노드 |
| 실행 단위 | 태스크(Task) | 포드(Pod) |
| 기술 기반 | AWS 네이티브 | 오픈 소스 Kubernetes 기반 |
| 사용자 제어 | 상대적으로 단순함 | 세분화된 제어와 확장성 제공 |
서버리스 소개
가용성을 보장하고, 크기를 조정하고, 서버를 관리하는 데 시간을 할애하는 대신 애플리케이션을 차별화하는 작업에 시간을 할애하십시오.
차별성이 없고 부담스러운 작업 제거
- EC2에서의 실행 책임은 다음과 같이 구분된다.
- AWS가 책임지는 부분 → 물리적 하드웨어 (서버, 전원, 냉각, 랙 등)
- 사용자가 책임지는 부분 → 게스트 OS 관리, 보안 설정, 패치 적용, 네트워크 설정, 인스턴스 크기 조정 등
- ECS/EKS에서 컨테이너를 실행해도 AWS가 클러스터 배포, 컨테이너 스케쥴링 등 컨테이너 관리를 도와주지만, 여전히 인스턴스 유지 관리에 대한 작업을 해야한다.
- 서버리스 컴퓨팅을 통해 인스턴스 관리에 대한 부담을 줄일 수 있다.
서버리스로 전환
- 서버리스 컴퓨팅은 서버 인프라 관리 없이 애플리케이션을 실행할 수 있도록 해주는 클라우드 컴퓨팅 모델
- 핵심 특징 4가지
- 서버 프로비저닝 및 관리 불필요 → 서버 설정 및 유지보수가 필요 없고 실행만 하면 된다.
- 자동 확장 → 트래픽 변화에 따라 자동으로 리소스 크기 설정
- 유휴 상태에 대한 요금 없음 → 코드가 실행될 때에만 과금
- 내장된 가용성 및 내결함성 → 고가용성과 복원력을 자동으로 제공
AWS Fargate를 통한 서버리스
AWS Fargate가 인프라를 관리하고 크기를 조정하므로 개발자는 가장 잘할 수 있는 애플리케이션 개발 작업에 집중할 수 있습니다.
AWS Fargate를 통한 서버리스 컨테이너 탐색
- AWS Fargate는 컨테이너용 서버리스 컴퓨팅 플랫폼이며, ECS/EKS와 함께 사용할 수 있다.
- IAM 및 Amazon Virtual Private Cloud(Amazon VPC)와 네이티브 통합을 지원
- Amazon ECS 및 Amazon EKS 아키텍처를 모두 지원하며 워크로드 격리와 향상된 보안을 제공하도록 설계
AWS Lambda를 통한 서버리스
AWS Lambda를 사용하면 관리해야 할 서버가 없습니다. 1초보다 작은 단위로 요금이 측정되고 일관적인 성능을 발휘하며 지속적으로 크기가 조정됩니다.
AWS Lambda에서 코드 실행
- AWS Lambda를 통해 EC2 인스턴스 혹은 컨테이너 없이 코드 실행 가능
- 서버 프로비저닝 및 관리 불필요
- 다양한 애플리케이션/백엔드 서비스에서 코드 실행 가능
- 고가용성 인프라에서 코드 실행
Lambda 작동 방식
- Lambda 함수를 구성하는 옵션은 Lambda 콘솔, Lambda API, AWS CloudFormation, AWS Serverless Application Model(AWS SAM)이 있다.
- Lambda API를 통해 함수를 직접 호출하거나 이벤트에 대한 응답으로 호출하도록 구성할 수도 있다.
| 구성 요소 | 설명 |
|---|---|
| 함수(Function) | Lambda에서 실행할 코드 단위. 처음부터 생성하거나, 블루프린트/컨테이너 이미지/Serverless Repository로 생성 가능 |
| 트리거(Trigger) | Lambda 함수 실행 조건을 정의. 다른 AWS 서비스나 이벤트 소스(API, 스트림, 큐 등)와 연동 가능 |
| 이벤트(Event) | 함수가 처리할 데이터. JSON 문서 형식으로 런타임에서 객체로 변환 후 전달됨 |
| 애플리케이션 환경 | Lambda 함수가 실행되는 안전하고 격리된 런타임 환경. 필요한 프로세스와 리소스를 관리 |
| 배포 패키지 | Lambda 함수 배포 방식. .zip 파일(코드 + 종속성) 또는 컨테이너 이미지(OCI 호환) |
| 런타임(Runtime) | 코드가 실행되는 언어별 환경. 기본 제공 언어(Python, Node.js 등) 또는 사용자 정의 런타임 사용 가능 |
| 핸들러(Handler) | 이벤트를 처리하는 진입점 함수. 예: def handler(event, context): 형태로 정의됨 (Python 예시) |
세분화된 요금 청구
- 사용한 만큼만 비용을 지불하며, 코드 호출 횟수 및 밀리초 단위의 코드 실행 기간을 기준으로 요금 청구
- 기간이 100ms 미만인 함수 또는 지연 시간이 짧은 API와 같이 실행 시간이 매우 낮은 함수를 실행하는 것이 비용 효율적
"가장 관리하기 쉬운 서버는 존재하지 않는 서버이다." - Werner Vogels, Amazon CTO
Footnotes
Last updated on