클라우드 컴퓨팅이란?
클라우드 컴퓨팅은 IT 리소스를 인터넷을 통해 온디맨드로 제공하고 사용한 만큼만 비용을 지불하는 것을 말한다.
* 온디맨드: 공급 중심이 아닌 수요에 반응해서 서비스를 제공하는 것
클라우드 컴퓨팅의 장점
- 자본지출(CAPEX)을 운영지출(OPEX)로 대체
a. 데이터 센터 구축 비용, 서버 구매 비용 => 운영비
b. 막대한 초기비용 대신 쓰는 만큼 비용 지불
- 규모의 경제로 얻게 되는 이점
a. 한 개를 사는 것 보다 100개를 사는게 단가가 낮음 => 규모의 경제
b. AWS의 규모의 경제로 인한 이득을 누릴 수 있음
- 용량 추정 불필요
- 속도 및 민첩성 개선
a. 몇 번의 클릭으로 바로 리소스를 확보 가능
b. 개발비용 절감
- 데이터 센터 운영 및 유지 관리에 비용 투자 불필요
a. 인프라 관리가 아닌 비즈니스에 자원 집중 가능
- 빠른 확장성
a. 몇 번의 클릭으로 전 세계에 서비스 가능
클라우드 컴퓨팅 모델
IaaS: Infrastructure as a Service&
- 인프라만 제공
- OS를 직접 설치하고 필요한 소프트웨어를 개발해서 사용
- 즉 가상의 컴퓨터를 하나 임대하는 것과 비슷함
- 예: Amazon EC2
PaaS: Platform as a Service
- 인프라 + OS + 기타 프로그램 실행에 필요한 부분(런타임)
- 바로 코드만 올려서 돌릴 수 있도록 구성
- 예: Firebase, Google App Engine 등
SaaS: Software as a Service
- 서비스 자체를 제공
- 다른 세팅 없이 서비스만 이용
- 예: Gmail, DropBox, Slack, Google Docs
클라우드 컴퓨팅 배포 모델
공개형(클라우드)
- 모든 부분이 클라우드에서 실행
- 낮은 비용
- 높은 확장성
폐쇄형
- 모든 부분을 사설 데이터센터에서 실행
- 높은 수준의 커스터마이징 가능
- 초기 비용이 비쌈
- 유지보수 비용이 비쌈
- 높은 보안
혼합형(하이브리드)
- 폐쇄형과 공개형의 혼합
- 폐쇄형에서 공개형으로 전환하는 과도기에 사용
- 혹은 폐쇄형의 백업으로 사용
클라우드 컴퓨팅의 용어 및 개념
고가용성(High Availability)
- 장애 상황을 해결하고 서비스를 지속할 수 있는 능력
- 장애 상황의 준비가 되어있는 아키텍쳐가 필요
장애 내구성 or 내결함성(Fault Tolerance)
- 장애 상황에도 서비스를 지속할 수 있는 능력
- 장애 상황에 영향을 받지 않는 아키텍쳐가 필요

- 타이어 하나가 터지면 운전 불가능
- 고가용성(X), 장애 내구성(X)

- 하나의 타이어가 터지더라도 운행자가 내려서 수리 후 운전 가능
- 단, 내려서 수리하는 동안에는 운전 불가능
- 고가용성(O), 장애 내구성(X)

- 엔진 하나가 고장 나더라도 계속 비행 가능
- 고가용성(O), 장애 내구성(O)
* 장애내구성 확보
- 일반적으로 완전한 장애내구성 위해서는 한 개 이상의 예비 인프라가 필요 => 비용 x2
- 이외에 두 개 이상의 인프라를 활용하기 위한 추가적인 아키텍처가 필요 => 복잡함 증가
- 고가용성 / 장애 내구성 중 어떤 것을 확보할 지 고민이 필요함
확장성(Scalable)
- 쉽고 빠르게 규모를 늘릴 수 있는 능력
- 주로 수요에 따라 컴퓨팅 파워 혹은 용량 확장
탄력성(Elastic)
- 수요에 따라 컴퓨팅 파워/용량을 확장 하거나 축소할 수 있는 능력
- 불필요한 자원을 사용하지 않고 비용 최적화에 필수적인 능력
긴밀한 결합(Tight Coupling)
- 다른 주체에 대해서 단단하게 얽힌 상태
- 주체끼리 높은 의존성을 가지고 있어 변경이 쉽지 않음
느슨한 결합(Loose Coupling)
- 다른 요소에 대해 얽히지 않고 연결되어 있는 상태
- 주체끼리 낮은 의존성을 가지고 있어 쉽게 변경할 수 있고 유연함
가상화
- 단일 컴퓨터의 하드웨어 요소를 일반적으로 가상 머신(VM)이라고 하는 다수의 가상 컴퓨터로 분할할 수 있도록 해주는 기술
온프레미스
- 자체적으로 데이터센터 혹은 전산실에 서버를 설치해 운영하는 방식
프로비전
가상화란?
1세대: 완전 가상화(Fully Emulated)

- 모든 시스템 요소가 에뮬레이터 안에서 돌아감
- 즉 CPU, 하드디스크, 마더보드 등 모든 요소를 에뮬레이터로 구현하여 Guest OS(가상화 환경의 OS)와 연동
- 엄청느림
2세대: Paravirtualization

- Guest OS는 하이퍼바이저와 통신
- 하이퍼바이저: OS와 하드웨어 사이에 존재하는 일종의 가상화 매니저
- 속도의 향상
- 몇 몇 요소의 경우 여전히 에뮬레이터 필요 = 느림
3세대: Hardware Virtual Machine(HVM)

- 하드웨어에서 직접 가상화를 지원
- 직접 Guest-OS가 하드웨어와 통신 = 빠른 속도(near bare-metal)
AWS의 구조
리전(region)
-
AWS의 서비스가 제공되는 서버의 물리적 위치
-
전 세계에 흩어져 있으며 큰 구분(동남아, 유럽, 북아메리카 등등)으로 묶여 있음
-
각 리전에는 고유의 코드가 부여됨
- 예: 서울 리전은 ap-northeast-2
- 예: 미국 동부(버니지아 북부)리전은 us-east-1
-
리전별로 가능한 서비스가 다름
* 리전을 선택할 때 고려할 점
- 지연 속도
- 법률(데이터, 서비스 제공 관련)
- 사용 가능한 AWS 서비스
가용 영역(Availability Zone)
- 리전의 하부 단위
- 하나의 리전은 3개 이상의 가용영역으로 구성
- AZ라고 줄여 부름
- 하나 이상의 데이터 센터로 구성
- AZ간의 연결은 매우 빠른 전용 네트워크로 연결
- 반드시 물리적으로 일정 거리(몇 KM 이상) 떨어져 있음
- 다만 모든 AZ는 서로 100KM 이내의 거리에 위치
- 여러 재해에 대한 대비 및 보안
- 각 계정별로 AZ의 코드와 실제 위치는 다름
엣지 로케이션(Edge Location)
- AWS의 CloudFront(CDN)등의 여러 서비스들을 가장 빠른 속도로 제공(캐싱)하기 위한 거점
- Global Accelerator와 유저를 연결하는 거점
- 전 세계에 여러 장소에 흩어져 있음
ARN(Amazon Resource Names)
- AWS의 리소스에 부여되는 고유 아이디
- arn:[partition]:[service]:[region]:[account_id]:[resource_type]/resource_name/{qualifier}
AWS 계정과 프리티어
AWS 계정
- AWS의 사용자와 리소스를 관리하는 단위
- AWS 계정에 AWS 리소스를 생성
- 이후 다양한 사용 주체(IAM 사용자, 역할 등)가 생성된 리소스를 사용
- 계정 != 사용자
Root 사용자
- 계정을 생성할 때 같이 생성되는 사용자
- 계정의 모든 권한을 가지고 있으며 계정 권한을 제한할 방법이 없음
- 탈취 당했을 때 복구가 매우 어려움 = MFA 필수
IAM 사용자
- IAM(Identity and Access Management)을 통해 생성한 사용자
- 생성 시 권한이 따로 부여되어 있지 않으며 정책 혹은 그룹을 통해 권한을 부여 받아 활동
- 사람이 아닌 어플리케이션 등의 가상의 주체를 대표할 수도 있음
- AWS의 관리를 제외한 모든 작업은 관리용 IAM User를 만들어 사용 권장
IAM 기초
IAM이란?
- AWS의 보안 및 관리를 담당하는 글로벌 서비스
- 주요 기능
- AWS 어카운트 관리 및 리소스/사용자/서비스의 권한 제어
- 임시 권한 부여
- 서비스 사용을 위한 인증 정보 부여
- 사용자의 생성, 관리, 계정의 보안
- 다른 계정과의 리소스 공유
- Identity Federation(Facebook 로그인, 구글 로그인 등)
IAM 구성
사용자
- 실제 AWS를 사용하는 사람 혹은 어플리케이션을 의미
그룹
- 사용자의 집합
- 그룹에 속한 사용자는 그룹에 부여된 권한을 행사
정책(Policy)
- 사용자의 그룹, 역할이 무엇을 할 수 있는지에 관한 문서
- JSON 형식으로 정의
- 그룹, 역할, 유저 등에 부여되어 각 주체가 행동 가능한 권한을 정의
- 구성
- Resource: 어떤 AWS 리소스에 대해서
- Action: 어떤 행동을
- Effect: 허용/거부
- Condition: 정책이 적용되는 조건
역할(Role)
- AWS의 권한의 집합
- 특정 사용자나 그룹에 연결되어 있지 않음
- 다양한 어플리케이션, 서비스, IAM 사용자가 역할을 받아 사용
AWS 사용과 인증
AWS 이용 방법
- AWS 웹 콘솔
- 프로그래밍 액세스
- Command Line Interface(CLI)
- Software Development Kit(SDK)
- 프로그램 방식 액세스 자격 증명을 사용하여 인증
콘솔 액세스 자격 증명
- Root Email/Password
- IAM 사용자 이름/Password
- MFA
프로그래밍 방식 액세스 자격 증명
- Acess Key Pair
- 하나의 IAM 사용자 당 2개의 Access Key 발급 가능
실습 - IAM 사용과 인증
액세스 키 할당
1. 사용자 생성 후 권한 부여
2. 액세스 키 생성(Access Key, Secret access key)
3. EC2 연결
4. CLI 창에 aws configure 입력
5. Access Key, Secret access key, default region 입력
* profile 설정 및 실행
aws confiure --profile user-a
aws iam list-users --profile user-a
참고
https://www.inflearn.com/course/%EC%89%BD%EA%B2%8C-%EC%84%A4%EB%AA%85%ED%95%98%EB%8A%94-aws-%EA%B8%B0%EC%B4%88/dashboard