AWS SAA 준비 - (4) 비용에 최적화된 아키텍처 설계

AWS에서 제공하는 SAA 준비 교육 영상 컨텐츠를 글로 적었습니다.

https://explore.skillbuilder.aws/learn/course/6452


1. 비용에 최적화된 아키텍처

이 모듈에서는 비용 최적화에 대해 설명한다.
비용에 최적화된 아키텍처 및 애플리케이션 설계의 몇 가지 모범 사례가 나와 있다.

비용에 최적화된 스토리지를 설계하는 방법을 결정한 다음 비용에 최적화된 컴퓨팅을 설계하는 방법을 결정한다.


AWS 요금 개요

비용 최적화의 핵심 개념은 사용한 만큼 지불하는 것이다. AWS에서는 사용한 만큼만 지불한다.
EC2 인스턴스를 끄면 비용 지불도 중단된다.

예약하는 경우 비용이 감소하고 예약을 통해 할인을 받을 수 있으며 예약을 하면 용량 우선 순위를 높일 수 있다.
많은 서비스 가격이 계층화되어 있으므로 대량 구매 할인을 받을 수 있다.
더 많이 사용할수록 서비스가 저렴해진다.


기본 요금 특성

AWS에서 요금이 부과되는 세 가지 기본 특성

주로 비용을 지불하는 것은 컴퓨팅, 스토리지, 데이터 전송이다.
컴퓨팅 요금은 어떻게 정해질까?


다음은 컴퓨팅 비용을 평가할 때 고려해야 할 몇 가지 사항이다.
비용은 컴퓨팅 인스턴스가 실행된 시간이 기준이 된다.
시스템 구성에 따라 비용이 달라질 수 있다.
GPU 인스턴스는 비GPU 인스턴스보다 비용이 많이 든다.
예약 인스턴스 또는 스팟 인스턴스로 시스템을 온디맨드로 구입할 수 있다.
이로 인해 비용이 달라질 수 있다.
인스턴스 수는 가격에 영향을 미친다.

로드 밸런싱과 Auto Scaling은 인스턴스 수를 동적으로 늘리고 줄일 수 있다.
탄력적 IP는 사용하지 않아도 비용이 발생한다.
세부 모니터링은 세분화된 CloudWatch 지표를 제공하며 비용이 적게 든다.
마지막으로 운영 체제와 소프트웨어 패키지도 비용이 들 수 있다.


Amazon EC2 요금 요소

인스턴스 스토리지는 무료지만 휘발성이다.

기본 테넌시이건 전용 테넌시이건 EC2 요금은 인스턴스 패밀리와 관련된다.
마지막으로 선택하는 요금 모델도 연관된다.


Amazon EC2: 비용을 절약할 수 있는 방법

예약 인스턴스

스팟 인스턴스

예약 인스턴스는 온디맨드보다 최대 75% 저렴할 수 있다.
예약 인스턴스는 아파트 월세를 내는 대신 아파트 임대 계약을 한다고 생각하면 된다.
임대 할인 혜택이 제공된다.

예약 인스턴스 안에도 몇 가지 유형이 있다.
컨버터블 에약 인스턴스는 다른 인스턴스 유형 및 크기로 전환할 수 있다.
정기 예약 인스턴스는 매주 몇 시간 식으로 특정 기간 동안 예약된다.

EC2 비용을 절감하는 또 다른 방법은 스팟 인스턴스를 사용하는 것이다.
스팟 인스턴스는 동적인 스팟 시장 가격을 기준으로 가격이 책정된다.
다만 입찰 가격 이상으로 가격이 올라가면 인스턴스를 잃을 위험이 있다.

하지만 이 문제를 해결할 몇 가지 방법이 있다.
입찰 가격 이상으로 가격이 오른 동안 최대 절전 모드를 사용하여 인스턴스를 절전 상태에 둘 수 있다.
또 다른 옵션은 스팟 시장에서 최대 6시간까지 시간 블록을 예약할 수 있는 스팟 블록이다.


예시문항 1

잉요일 밤마다 일괄 작업을 실행해야 한다고 합시다. 이 작업은 90분 내에 완료되며 연기가 불가능합니다.
어떤 EC2 결제 모델을 사용해야 합니까?

A. 온디맨드
B. 예약
C. 정기 예약 인스턴스
D. 스팟
E. 블록 기간이 95분인 스팟 블록


해설

A는 다른 옵션만큼 저렴하지 않기 때문에 제거한다.
B도 제거할 수 있다. 일주일 전체를 예약하는데 사용하지 않는 동안은 낭비이기 때문이다.
작업을 연기할 수 없기 때문에 D도 제거할 수 있다. 이것 역시 요구 사항 중 하나이다.
E도 제거할 수 있다. 시장 가격이 너무 높은 경우 작업을 연기할 수 없기 때문이다.
가격이 높지 않다면 괜찮은 옵션일 수 있다.

그러면 정답인 C. 정기 예약 인스턴스가 남는다.



2. 스토리지

Amazon EC2의 사용 비용을 추정하려면 다음을 고려한다.

스토리지 비용의 주요 요소는 스토리지 클래스, 스토리지 양, 요청 수, 전송되는 데이터 양이다.
하나씩 살펴보자.


Amazon S3 스토리지 클래스

데이터에 액세스하는 빈도에 따라 S3 Infrequent Access 또는 Glacier로 데이터를 옮겨 비용을 절약할 수 있다.
이러한 서비스의 비용은 상당히 저렴하다.
AWS는 2006년 이후 62차례 가격 인하를 단행했는데 이는 다양한 스토리지 클래스를 사용하여 비용을 절감하는 방법을 알려 주기 위함이었다.
현재 S3 및 Glacier 가격은 AWS 요금 페이지를 확인하자.


Amazon EBS 요금

EBS에 저장된 데이터 비용은 어떻게 절감할 수 있을까?

Amazon EBS의 사용 비용을 추정하려면 다음을 고려한다.

EBS의 비용의 주요 요소는 다음과 같다.
프로비저닝하는 볼륨의 유형과 수, 요청한 IOPS 유형, 스냅샷을 생성하는 빈도, 스냅샷을 저장할 기간, 마지막으로 스냅샷을 다른 리전으로 이동하는 경우 데이터 전송 비용이 있다.

EBS 볼륨의 두 가지 유형은 SSD와 HDD이다.
HDD, 즉 하드 디스크 드라이브 볼륨은 더 저렴하지만 IOPS는 낮고 순차적 데이터에 유용하다.
SSD는 더 높은 IOPS를 제공하지만 더 비싸며 랜덤 액세스에 유용하다.


예시문항 2

PDF 파일을 웹에서 공개적으로 사용할 수 있도록 해야 하는 경우가 있습니다. 고객은 브라우저를 사용하여 수백만 번 이 파일을 다운로드할 것입니다.
어떤 옵션이 가장 비용 효과적입니까?

A. S3 Standard에 파일 저장
B. S3 Standard IA에 파일 저장
C. Glacier에 파일 저장
D. EFS에 파일 저장


해설

B는 제외해도 된다. 검색 비용이 저렴한 옵션이 필요하고 이 파일은 많이 다운로드된다.
Glacier에서는 파일에 쉽게 엑세스할 수 없기 때문에 C도 제거할 수 있다.
EFS는 블록 스토리지이고 퍼블릭 파일을 직접 지원하지 않는다.
파일 액세스를 중재하고 제공하려면 EC2 인스턴스가 필요하다.

그러면 A만 남는데 A는 꽤 좋은 옵션이다.
S3 Standard에 파일을 저장할 수 있다.



3. 서버리스 아키텍처

비용을 절감하는 또 다른 중요한 방법은 서버리스 아키텍처를 사용하는 것이다.
서버리스 아키텍처를 사용하면 EC2 인스턴스 유휴 시간에 대한 비용을 지불하지 않는다.

서버리스 아키텍처를 통해 컴퓨팅 워크로드를 줄일 수 있는 기회다.

컴퓨팅 로직이 Lambda 함수인 경우 호출당 비용을 지불한다.
그러면 리소스를 훨씬 효율적으로 활용할 수 있다.

정적 파일에는 S3를 사용할 수 있고 Lambda는 DynamoDB를 사용하여 상태를 저장할 수 있다.

API 게이트웨이를 사용하면 REST 엔드포인트를 Lambda에 연결하여 브라우저나 DP 클라이언트에서 웹을 통해 호출할 수 있다.

CloudFront는 비용 절감에도 도움이 된다.
데이터를 CloudFront에 캐싱하면 S3에서 데이터를 가져오지 않아도 된다.


스토리지: Amazon Cloud Front

S3와 CloudFront 간 데이터 이동은 데이터 전송 비용도 없다.
CloudFront를 사용하여 EC2 인스턴스에서 일부 작업을 오프로드할 수도 있다.


CloudFront를 통해 캐싱

Amazon CloudFront의 사용 비용을 추정하려면 다음을 고려한다.

CloudFront를 통한 캐싱은 성능과 비용 최적화에 모두 긍정적인 영향을 미칠 수 있다.

CloudFront 비용은 콘텐츠를 배포할 범위, 즉 전 세계에 배포할지 아니면 특정 지역에 배포할지를 기준으로 결정된다.
요청 수와 데이터 전송 비용도 기준이 된다.


시험에 대한 조언






정규표현식의 유용한 패턴
#집합찾기 #반복찾기 #역참조 #조건달기
A 액티비티에서 B 액티비티로 데이터 전달하기
#WorkflowFoundation #InArgument #OutArugment #Variables
Microsoft UI Automation Framework 이해하기
#AutomationElement #TreeWalker #ControlPatterns
AppDomain 탐구
#AppDomain #격리 #어셈블리별도실행 #플러그인시스템
Chrome Extension 활용하여여 웹 페이지 XPath 정보 가져오기
#ChromeExtension #크롬확장프로그램 #XPath
Workflow 디자이너와 액티비티의 관계
#WorkflowFoundation #Designer #Activity #ModelItem
ExpressionTextBox와 ModelItem의 바인딩 관계
#WorkflowFoundation #ExpressionTextBox #ModelItem #Binding
Windows 레지스트리 간단 정리
#Windows #Registry #레지스트리
WPF MVVM 패턴, 그리고 Binding
#WPF #MVVM #Binding #Modle #View #ViewModel
오라클 SQL 성능 최적화 - 바인드 변수와 Shared Memory 이해하기
#Oracle #바인드변수 #SharedMemory #LibraryCache #SqlPlan
ActivityDesigner와 CodeActivity 이해하기
#WorkflowFoundation #ActivityDesigner #CodeActivity
Selenium Implicit vs Explicit - 웹 요소 기다리기
#Selenium #IWebDriver #Implicit #Explicit
.NET에서 Selenium 활용하기 - 3가지 실전 예제
#Selenium #ChromeDriver #FindElements
.NET에서 CommandBinding 활용하기
#.NET #CommandBinding #디자인패턴
워크플로우 파운데이션(Workflow Foundation) 소개
#WorkflowFoundation #소개 #기본개념
AWS SAA 준비 - (4) 비용에 최적화된 아키텍처 설계
(정리) Exam Readiness - AWS Solutions Architect Associate
AWS SAA 준비 - (3) 안전한 아키텍처
(정리) Exam Readiness - AWS Solutions Architect Associate
AWS SAA 준비 - (2) 성능이 뛰어난 아키텍처 설계
(정리) Exam Readiness - AWS Solutions Architect Associate
AWS SAA 준비 - (1) 복원력을 갖춘 아키텍처 설계
(정리) Exam Readiness - AWS Solutions Architect Associate
15분 안에 ToC를 구현해보자!
Vanilla JS로 Table of Contents 구현하기
모듈
모던 자바스크립트 Deep Dive | 48장 | 모듈
에러 처리
모던 자바스크립트 Deep Dive | 47장 | 에러 처리
제너레이터와 async/await
모던 자바스크립트 Deep Dive | 46장 | 제너레이터와 async/await
프로미스
모던 자바스크립트 Deep Dive | 45장 | 프로미스
REST API
모던 자바스크립트 Deep Dive | 44장 | REST API
Ajax
모던 자바스크립트 Deep Dive | 43장 | Ajax
비동기 프로그래밍
모던 자바스크립트 Deep Dive | 42장 | 비동기 프로그래밍
타이머
모던 자바스크립트 Deep Dive | 41장 | 타이머
Set과 Map
모던 자바스크립트 Deep Dive | 37장 | Set과 Map
디스트럭처링
모던 자바스크립트 Deep Dive | 36장 | 디스트럭처링
브라우저의 렌더링 과정
모던 자바스크립트 Deep Dive | 38장 | 브라우저의 렌더링 과정
스프레드 문법
모던 자바스크립트 Deep Dive | 35장 | 스프레드 문법
이터러블
모던 자바스크립트 Deep Dive | 34장 | 이터러블
7번째 데이터 타입 Symbol
모던 자바스크립트 Deep Dive | 33장 | 7번째 데이터 타입 Symbol
String
모던 자바스크립트 Deep Dive | 32장 | String
RegExp
모던 자바스크립트 Deep Dive | 31장 | RegExp
Date
모던 자바스크립트 Deep Dive | 30장 | Date
Math
모던 자바스크립트 Deep Dive | 29장 | Math
DOM
모던 자바스크립트 Deep Dive | 39장 | DOM
Number
모던 자바스크립트 Deep Dive | 28장 | Number
배열
모던 자바스크립트 Deep Dive | 27장 | 배열
이벤트
모던 자바스크립트 Deep Dive | 40장 | 이벤트
ES6 함수의 추가 기능
모던 자바스크립트 Deep Dive | 26장 | ES6 함수의 추가 기능
클래스
모던 자바스크립트 Deep Dive | 25장 | 클래스
this
모던 자바스크립트 Deep Dive | 22장 | this
빌트인 객체
모던 자바스크립트 Deep Dive | 21장 | 빌트인 객체
strict mode
모던 자바스크립트 Deep Dive | 20장 | strict mode
클로저
모던 자바스크립트 Deep Dive | 24장 | 클로저
프로토타입
모던 자바스크립트 Deep Dive | 19장 | 프로토타입
함수와 일급 객체
모던 자바스크립트 Deep Dive | 18장 | 함수와 일급 객체
실행 컨텍스트
모던 자바스크립트 Deep Dive | 23장 | 실행 컨텍스트
생성자 함수에 의한 객체 생성
모던 자바스크립트 Deep Dive | 17장 | 생성자 함수에 의한 객체 생성
프로퍼티 어트리뷰트
모던 자바스크립트 Deep Dive | 16장 | 프로퍼티 어트리뷰트
let, const 키워드와 블록 레벨 스코프
모던 자바스크립트 Deep Dive | 15장 | let, const 키워드와 블록 레벨 스코프
전역 변수의 문제점
모던 자바스크립트 Deep Dive | 14장 | 전역 변수의 문제점
스코프
모던 자바스크립트 Deep Dive | 13장 | 스코프
함수
모던 자바스크립트 Deep Dive | 12장 | 함수
원시 값과 객체의 비교
모던 자바스크립트 Deep Dive | 11장 | 원시 값과 객체의 비교
객체 리터럴
모던 자바스크립트 Deep Dive | 10장 | 객체 리터럴
타입 변환과 단축 평가
모던 자바스크립트 Deep Dive | 9장 | 타입 변환과 단축 평가
제어문
모던 자바스크립트 Deep Dive | 8장 | 제어문
연산자
모던 자바스크립트 Deep Dive | 7장 | 연산자
데이터 타입
모던 자바스크립트 Deep Dive | 6장 | 데이터 타입
표현식과 문
모던 자바스크립트 Deep Dive | 5장 | 표현식과 문
변수
모던 자바스크립트 Deep Dive | 4장 | 변수
Iteration와 Generator
코드스피츠 77 ES6+ 3화 참조
WHATWG 탄생 배경
WHATWG, W3C, HTML의 관련에 대한 역사
프론트엔드(FE) 면접 질문 정리
FE관련 면접 질문 및 답변 정리한 내용입니다.
쿠버네티스(kubernetes, k8s) 용어 정리
쿠버네티스(kubernetes, k8s) 용어 정리
젠킨스(Jenkins) 정리
젠킨스(Jenkins) 정리
Docker 용어 정리
Docker 용어 정리
Git 용어 정리
Git 용어 정리
반응형 웹 디자인(Responsive Web Design)
CSS responsive 에 대하여
JS this에 대하여
this에 대해 알아보자
SQL*PLUS에 대하여
SQL*PLUS 정의 및 사용방법
Oracle에서 SQL Plan 확인하기
Oracle에서 SQL Plan을 확인해보자