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 인스턴스 수명 주기

  1. 인스턴스를 시작하면 Pending 상태로 진입한다. 대기 중인 경우 요금이 부과되지 않으며 실행 중 상태로 들어갈 준비를 한다.
  2. 인스턴스가 Running 상태면 사용할 준비가 된 것이고, 요금 부과가 시작되는 단계다.
  3. 인스턴스를 재부팅하면 중지 작업 다음 시작을 수행하는 것과는 다르다. 운영 체제를 재부팅하는 것과 동일하며 퍼블릭 DNS 이름, 프라이빗 및 퍼블릭 IPv4 주소를 유지한다.
  4. 인스턴스를 중지하면 Stopping 상태로 전환된 다음, Stopped 상태로 들어간다. 랩톱 종료와 동일하며 중지 후 시작을 하면 새로운 기본 물리적 서버에 배치될 수 있다.
  5. 인스턴스를 종료하면 인스턴스 스토어가 삭제되고 퍼블릭 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 ECSAmazon 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

  1. 단일 물리적 컴퓨터에서 여러 개의 가상 머신을 실행할 수 있도록 하는 소프트웨어

  2. 자체 데이터 센터에서 운영하는 기존 네트워크와 아주 유사한 가상 네트워크. VPC를 추가하고 서브넷을 추가할 수 있다.

Last updated on