Amazon EC2 ( Elastic Compute Cloud )
。Amazon에서 서비스중인 다양한 OS와 어플리케이션들을 호스팅하는 IaaS 클라우드 서비스
▶ 클라이언트에게 안전하고 필요한 컴퓨팅 자원만큼 가상머신( EC2 Instance )으로 가상화하여 제공하는 서비스
。클라이언트가 서버 어플리케이션 배포 시 AWS의 Virtual Machine인 EC2 인스턴스에 배포하도록 Provisioning하기 위한 서비스
。EC2 인스턴스는 EBS를 통해 데이터를 저장 / ELB를 통해 부하 분산 / ASG를 통해 자동으로 Scale up이 가능
。데이터베이스 서버, 웹서버, 백엔드 서버 등 서버가 필요한 모든 작업에 활용.
- 현업에서의
EC2의 서버배포
。보통 백엔드 API 서버 배포 시 EC2에서 서버를 배포
▶ 프론트엔드 서버를 배포하는 경우 vercel, netlify, AWS S3을 사용해서 배포.
인스턴스는 항상 고가용성과 Stateless를 유지하도록 설계해야한다.
。인스턴스는 갑작스러운 Fail에 대비하여 안정성을 위해 다음을 준수해야한다.
。 EC2 인스턴스가 Fail 시 자동으로 프로비저닝하는 방법이 필요
。 EC2 인스턴스를 AZ 별로 분산할 수 있는 방법이 필요
。 EC2 인스턴스 클러스터에 트래픽을 분산하는 방법이 필요
。 인스턴스 각자가 Stateless하여 언제나 추가될 수 있고 삭제되어도 무방하도록 설계
▶ Auto Scailing, Elastic Load Balancer , EFS를 통해 해결가능
고가용성 :
EC2 인스턴스 중 하나가 고장나도 자동으로 복구가능하도록 아키텍처 설계
Stateless :
EC2 인스턴스가 상태에 의존적이지 않음
▶ 어떤 특정 EC2 인스턴스에만 특정 정보( ex. 로그인 정보 )를 특별하게 저장하지 않는 성질
EC2의 기능
On Demand 요금모델을 통해 초 단위로 비용을 산정하여 HW 자원 제공
。EC2를 사용하기위해 약정할 필요없이 초 단위로 비용을 산정
확장성 ( Scalabilitiy )
。수백개의 EC2 instance를 임대하도록 설정 가능
EC2 instance를 생성 및 생명주기를 관리
- 여러
EC2 기반 AWS 서비스와 연동이 가능
¸ EBS, ELB ( Elastic Load Balancer ) , Auto Scailing , ...
EBS (Elastic Block Store)
。EC2 instance에 storage를 attach.
- 복수의
EC2 instance에 Load balancing을 설정
。많은 사람들이 사용하는 어플리케이션은 단일 EC2 instance에서 구동할 수 없고, 여러 EC2 instance로 구동하여 로드 밸런싱하여 사용.
Auto Scailing
어플리케이션에 많은 사용자가 사용 시 개발자가 능동적으로 Virtual Machine Instance의 수를 증가시켜서 Load Balancing을 수행.
EC2 Instance
。EC2에서 다양한 Type과 Size로 구성된 컴퓨팅을 담당하는 가상서버 역할의 가상머신
▶ 가상화된 EC2 인스턴스를 프로비저닝하여 해당 EC2 인스턴스 상에 서버 어플리케이션을 구동하여 배포를 수행.
。인스턴스 생성 시 키 페어를 정의하여 외부에서 인스턴스의 콘솔에 대해 접근 시 키 페어를 통해 검증을 수행
。단일 가용영역 ( AZ ) 내 존재하여 다른 리전에서 해당 EC2 인스턴스의 확인이 불가능하다.
▶ 서울 리전에서 구동중인 EC2 인스턴스를 버지니아 리전에서 확인 불가능.
▶ EC2 인스턴스의 EBS도 동일한 가용영역에 저장
。EC2 인스턴스는 IaaS이므로 직접 개발자가 OS 등을 설치해야하는 번거로움이 존재.
▶ EC2 인스턴스를 생성 시 템플릿 역할의 AMI에 정의된 OS, SW대로 설치하도록하여 이러한 단점을 해소
。기본적으로 EC2 인스턴스의 모든 포트는 비활성화
▶ 하나 이상의 보안그룹을 설정하여 트래픽이 송수신될 포트를 활성화
EC2 인스턴스 설정
。OS : Linux / Windows / Mac OS
。CPU / RAM : Instance Family
。저장장치 : EBS & EFS
。네트워크 : Public IP
。방화벽 : 보안그룹
。Bootstrap 스크립트 : EC2 User Data
EC2 인스턴스의 데이터 저장 방식
。EC2 Instance의 데이터 저장방식으로 EBS / Instance Store / EFS가 존재
▶ 저장방식이 간접적 / 직접적의 차이

。EBS 방식 : EC2 인스턴스와 EBS를 동일 AZ의 네트워크를 통해 연결
▶ EC2 인스턴스 삭제하더라도 EBS를 통해 데이터를 보존가능
▶ 네트워크로 연결되어 속도가 느린 단점이 존재.
。Instance Store 방식 : EC2 인스턴스를 삭제 시 데이터도 함께 삭제
▶ 물리적으로 연결되어 속도가 빠른 장점이 존재.
EC2 Instance 유형 :
。EC2 Instance의 용도에 따른 유형 별로 사용목적에 따라 최적화한 HW 구성
▶ CPU / Memory / Storage / Network / EBS 전송률를 사용목적별로 최적화한 조합을 제공

Instance Type :
。 EC2 Instance 생성에 활용할 HW를 선택.
。type 별로 이름이 존재
▶ t유형, m유형, inf유형 등이 있으며 세대별로 숫자 부여
ex. m5 : m유형 인스턴스의 5세대
Instance Type 종류
- General Purpose
。컴퓨팅 / 메모리 / 네트워크 간 전체 HW 자원의 균형을 유지하는 범용 인스턴스 유형
▶ 웹 서버 구동 용도로 적합
ex ) t3, t2, m4 , ...
Compute Optimized
。고사양의 CPU를 활용하여 컴퓨팅에 집약적인 작업에 최적화된 인스턴스 유형
▶ 고성능 웹서버 / 배치 작업 / 머신러닝 등의 CPU 연산이 많이 요구되는 작업에 적합
ex ) c (CPU)로 시작하는 인스턴스 유형 : c6g , c5 , ...

Memory Optimized
。고사양의 메모리를 활용하여 대규모 데이터셋을 활용하는 작업에 최적화된 인스턴스 유형
▶ 인메모리 DB, 캐시저장소, 실시간 대규모 비정형 데이터 처리 어플리케이션 등의 용도로 사용됨
ex ) r (RAM)로 시작하는 인스턴스 유형 : r6g , r5 , ...

Storage Optimized
。Local Storage에서 대규모 데이터셋에 접근 시 적합한 인스턴스 유형
▶ OLTP, RDBMS, NoSQL , 분산 파일 시스템 등에 사용
ex ) i, d , h1 로 시작하는 인스턴스 유형 : i3 , d2, h1 , ...

Instance Size :
。각 Instance Type에서 제공하는 다양한 크기
▶ Instance Type 별로 Instance Size를 설정하여 사용할 CPU 수, 메모리 크기 등을 결정
ex ) 인스턴스타입.nano / .micro / .small / .medium / .xlarge / .4xlarge / 16.xlarge / 8xlarge ...

▶ 메모리 최적화 Instance Type인 r5가 Instance Size도 크면서 다른 인스턴스 유형에 비해 압도적으로 많은 RAM 용량을 가진 것을 확인 가능.
EC2 인스턴스 생명주기
。생명주기에 따른 EC2 인스턴스 상태의 변화

실행대기 ( Pending )
。초기 EC2 인스턴스를 가상화할 경우 Pending 상태로 가상화되어 생성되며 이후 Running 상태로 전환
실행 ( Running )
。EC2 인스턴스가 구동되어 프로비저닝 중인 상태
。EC2 인스턴스 비용이 청구되는 시점
재부팅 ( Rebooting )
。EC2 인스턴스의 OS를 재부팅
▶ EC2 인스턴스 자체를 재실행하는게 아니므로 Public IPv4 Address가 재설정되지 않는다.
중지 ( Stopped )
。 EC2 인스턴스의 구동이 정지된 상태
▶ Running 상태에서 Stopping 상태를 거쳐서 정지됨
▶ 재실행 시 다시 Pending 상태를 거쳐서 Running 상태로 전환
。EC2 인스턴스의 요금은 미청구되나, 연관된 다른 AWS 서비스 ( EBS 등 )은 계속 청구.
。중지 후 재시작 시 할당된 EC2 인스턴스의 ENI의 Public IPv4 Address가 재설정.
。Instance Store 방식으로 저장된 EC2 인스턴스는 중지가 불가능
종료 ( Terminated )
。EC2 인스턴스가 완전히 종료되어 제거된 상태