EC2란?

EC2는 Elastic Compute Cloud의 약자로 C2는 두 개의 C를 의미합니다. AWS 에서 컴퓨트 서비스를 제공하는 상품을 의미하며, 일반적인 호스팅 서비스에서, 서버 호스팅을 의미합니다. EC2는 일반적인 클라우드 처럼 자유롭게 크기 조정이 가능하고, 일반 온프레미스 호스팅에 비해 낮은 초기비용과 낮은 유지 보수 비용을 장점으로 갖습니다. 크게 3가지 형태의 비용 구조를 선택할 수 있는데, 이는 AWS에서 시작되어 다양한 클라우드로 확장된 정책이 많습니다.

  1. 온디맨드 (On-demand)
    1. 초기비용이 없는 가장 기본적인 비용 구조입니다. 2. 제약이 없어 유연하게 조정이 가능한 상품으로 원하는 때에 언제든 해지, 확장, 축소할 수 있습니다.
  2. 예약 인스턴스 (RI – Reserved instance) & Savings Plan
    1. 사용양이 안정화된 컴퓨팅 자원을 1년 또는 3년간 사용하기로 약정하는 비용 구조입니다.2. RI는 전액 선불, 일부 선불 등으로 할인율 조정이 가능하며, 최대 70% 가까이 할인을 받을 수 있습니다.3. RI와 Savings Plan 모두 약정한 비용을 내야하는 만큼 사용량이 검증되지 않은 서비스에는 사용이 어렵습니다.
  3. 스팟 인스턴스
    1. 일종의 경매 방식으로, 운영 가능한 EC2 스펙 중 AWS가 저렴한 가격에 판매하는 인스턴스를 구매하는 방식입니다.2. 사용 중이던 인스턴스를 임시로 빌려 사용하는 구조이기 때문에 언제든 종료 가능한 서비스만 적용하는 것이 좋습니다.3. 비용이 절대적으로 저렴한 편이라, 서버 용량이 갑자기 급하게 필요하거나, 수익이 없는 이벤트성 서비스 등에 적합합니다.

EC2는 일반적인 클라우드 서비스에서의 컴퓨팅 자원에 해당하는 서비스이기 때문에 구매하려는 인스턴스의 세부 사항을 사용자가 선택하여 구매합니다. 처음 AWS를 사용하는 경우 free-tier 모델로 1core 1GB의 작은 인스턴스를 Amazon이 제공하는 OS 기반으로 무료 운영할 수 있습니다. 실제 서비스 구축을 위해서는 인스턴스 타입(type), OS, Disk, 보안그룹 설정을 사용자가 선택하는 것이 좋습니다.

EC2 구성 순서

OS -> AMI

AWS는 인스턴스 구성 시에 다양한 OS를 선택하여 구성할 수 있도록 다양한 이미지 옵션을 제공합니다. 기본적으로 클라우드 컴퓨팅의 구조는 물리적으로 결합된 하드웨어 자원을 가상화하여 분리하고, 분리된 자원을 하나의 자원처럼 사용할 수 있도록 제공하는 구조입니다. 다시말하면, 물리적인 자원의 일부를 가상으로 그룹화하여 여기에 OS를 포함한 클라우드 리소스를 설치하고 이 서버를 고객에게 제공하는 서비스입니다. 이 과정에서 OS와 클라우드 리소스를 설치하기 위해 패키징된 이미지(Docker Image와 같은 개념)을 Amazon Machine Image – AMI 라고 부릅니다.

안정적인 클라우드 자원 이용을 위해 AWS는 가상화에 적합한 AMI를 선별하여 제공하며, 이 선별된 AMI외에도 가상화된 자원에서 구동 가능한 이미지들을 Marketplace 형식으로 함께 제공합니다.

AWS가 추천하는 AMI 타입은 Amazon Linux 2 형식으로 EC2에 최적화된 Linux kernel 5.10을 사용하는 등 클라우드 컴퓨팅에 적합하게 구성되어 있습니다. 그 외에도 서버 OS로 자주 사용되는 OS의 최신 버전들을 빠른 시작 상품으로 제공합니다.

  1. Amazon Linux 2
  2. macOS Monterey
  3. Red Hat Enterprise Linux 8
  4. Ubuntu 18.04, 20.04
  5. Debian 10
  6. Windows Server 2019

빠른 시작에 있는 AMI를 사용할 경우 대부분의 상황에서 EC2에 기술적인 장애가 발생하지 않습니다. 이 외에도 AWS Marketplace와 커뮤니티 AMI 를 통해 다양한 AMI를 이용해 인스턴스를 시작할 수 있는데, 이러한 AMI들은 OS 커뮤니티 또는 개인/기업들이 제공하는 AMI이기 때문에 정해진 인스턴스 타입만을 이용해야 하거나, 예기치못한 가상화 장애가 발생할 수 있습니다.

AMI는 구축하려는 서비스에 적합한/개발팀에 친숙한 OS의 최신 버전 AMI를 이용하여 진행하는 것이 권장되며, 구버전 OS를 사용할 경우, os repository 경로가 만료됬거나, 지원이 종료되었을 수 있으니 조심하는 것이 좋습니다.

Ex) Cent OS 7의 경우 aarch64용 저장소와 x86_64용 저장소 경로가 다르지만, aarch64용으로 고정되어 있는 경우가 존재.

AMI를 결정하면 인스턴스 타입을 선택하도록 이동됩니다.

인스턴스 타입

EC2는 형태 – 세대 – 특성 의 순으로 인스턴스 타입을 네이밍합니다. T2 타입과 T3 타입은 같은 인스턴스 구조에 2세대, 3세대 인스턴스 타입을 의미합니다. 예를 들어 T2 상품군은 AWS Nitro System을 사용할 수 없지만, T3는 사용할 수 있으며, 두 타입은 모두 Turbo 형식의 인스턴스 가속을 이용할 수 있습니다.

경우에 따라 특정 AMI는 특정 인스턴스 타입만을 사용하도록 강제되니(HVM 등) 이점을 주의하여 인스턴스 타입을 결정해야 합니다. 예를 들어 Ubuntu 20.04 LTS HVM AMI는 C6g 상품을 이용할 수 없습니다. (x86_64를 지원하지 않음)

인스턴스 타입 – 형태

인스턴스 타입을 아래와 같이 단어로 연결해서 이해해볼 수 있습니다.

  1. T: Turbo – 부스트 가능한 서비스
  2. M: Most Scenarios – 범용
  3. C: Compute – 컴퓨팅 연산 위주 (컴퓨팅 최적화)
  4. R: RAM – 메모리 사용량 위주
  5. X: eXtra large memory – 엄청난 크기의 메모리 사용량
  6. H: HDD – 하드 공간 위주
  7. I: I/O – IO 작업이 많은 NVMe 위주

구축하려는 서비스의 특성에 맞추어 인스턴스 타입을 적절하게 고르는 것이 중요합니다. 특히 T 타입의 경우 일반적인 범용 서비스이긴 하지만 CPU 사용량이 적은 비활성 기간이 길면 CPU 크레딧이 쌓이고, CPU 사용량이 늘어날때 해당 크레딧을 소모하며 부스팅할 수 있습니다. C 타입의 경우 항상 최적화된 컴퓨팅 연산을 제공하지만 T타입에 비해 비용이 높습니다. T4g.large(2core 8GB)와 C4.large(2core 4GB)는 메모리 사용량이 적음에도 C4.large가 시간당 0.04달러 비싼 편입니다.

일반적인 웹 서비스/앱 서버를 EC2에서 처음 구축하는 경우 M 타입의 인스턴스를 사용하되, 사용되는 CPU, Memory 양을 바탕으로 인스턴스를 교체하는 것이 좋습니다.

인스턴스 타입 – 세대

T, C, M 등의 형태 다음에 오는 숫자는 세대로 이해하면 좋습니다. 일반적으로 이전 세대 인스턴스 타입에 비해 최근 세대 인스턴스 타입의 비용이 5~9% 정도 더 저렴합니다.

위 표에서 보이듯 c4.large > c5.large > c6g.large 순으로 점점 시간당 요금이 줄어드는 것을 볼 수 있습니다.

AWS는 데이터센터의 관리 로드를 줄이기 위해, 최신 인스턴스 타입을 사용하도록 유도하는데, 이러한 인스턴스 타입 전환 등을 통해 이전 세대 인스턴스 타입은 신규 생성이 불가하도록 변경됩니다. 그럼에도 이전 세대 인스턴스를 사용하고 있는 고객에 대해서는 계속 이전 세대를 지원 중입니다.

대표적으로 종료된(신규 생성이 불가한) 인스턴스 타입은 C1, T1, M1, M2, M3 등이 있습니다. https://aws.amazon.com/ko/ec2/previous-generation/

인스턴스 타입 – 특성

AWS가 인스턴스 타입을 선택할 때는 형태, 세대, 특성 순으로 표기하는데 특히 특성은 소문자 표기를 활용합니다. C6g.large

이 마지막 소문자 알파벳은 아래 특성이 반영된 인스턴스 타입을 의미합니다.

  1. a: AMD CPU
  2. b: Block Storage optimized
  3. g: Graviton2 processors (AWS 프로세서)
  4. n: Networking Optimized

요약하면 인스턴스 타입을 결정할 때는 형태, 세대, 특성을 고려하여 구축하려는 서비스 특성에 적합한 인스턴스를 결정해야 하며, 이 과정에서 서비스 특성을 명확히 예측하기 어려운 경우 범용 인스턴스 타입(General Purpose – (T2, M5, M4, M3))을 선택하여 서비스 특성을 분석 후 적합한 인스턴스로 교체하여 비용을 아낄 수 있습니다.

인스턴스 타입을 모두 결정하면 바로 인스턴스를 실행할 수 있지만, 스토리지 및 보안 설정을 위해 인스턴스 세부 정보 구성 단계로 넘어가는 것이 좋습니다.

인스턴스 세부 정보 구성

인스턴스 세부 정보는 EC2의 가용 영역, 서브넷, 네트워크 환경(VPC), 종료 방식 등 다양한 세부 설정을 입력할 수 있습니다. AWS는 일반적인 사용자 선택과 보편성에 맞추어 설정값을 기본 제공하기 때문에, 처음 AWS를 이용하거나, 테스트를 하는 과정이라면 기본 설정을 그대로 하고 스토리지 추가로 넘어가는 것이 좋습니다.

스토리지 추가

EC2에 연결할 Elastic Block Storage (EBS)를 설정하는 화면입니다. 기본적으로 SSD/HDD 등을 선택해 추가할 수 있으며, 계정 당 최대 30GB의 EBS는 1년간 무료로 제공됩니다.

스토리지는 대부분 SSD를 기본 권장하도록 구성되며, 처리량이 많은 서비스는 IOPS가 높은 프로비저닝된 IOPS SSD를 쓰는 등 설정을 변경할 수 있습니다.

  1. 범용 SSD – gp2 – 일반 SSD
  2. 범용 SSD – gp3 – 일반 SSD gp2의 다음 세대
  3. 프로비저닝된 IOPS SSD – io1 – I/O 최적화가 이루어진 SSD
  4. 프로비저닝된 IOPS SSD – io2 – io1의 다음 세대
  5. 마그네틱 – 스탠다드

gp2상품과 gp3상품의 성능차이가 크게 유의미하지 않은데 반해 gp3는 IOPS를 추가 비용을 내고 가속화 할수 있는 상품이며, 기본 스펙은 더 저렴하게 이용 가능합니다.

태그 추가

EC2에 별도 관리를 위한 태그를 추가할 수 있습니다.

key에 name을 넣어 인스턴스에 이름을 지정하거나, key에 team을 넣어 조직별로 비용 구성을 분리하여 관리/조회할 수 있도록 셋팅할 수 있습니다.

보안그룹 구성

EC2 인스턴스 생성의 마지막 단계인 보안 그룹 구성입니다.

인스턴스에 접근 가능한 포트/프로토콜/IP를 지정하여 제한된 접속만 가능하게 할 수 있습니다.

보안 그룹은 이전에 다룬 네트워크(vpc, subnet)와 함께 인스턴스에 연결되는 네트워크를 통제하는 요소로써, 인스턴스 단위에서의 보안 설정을 구성하는 방식입니다. VPC의 네트워크 ACL과 다르게 네트워크 단계가 아닌, 인스턴스 단위에서 적용되는 요소이기 때문에, 인스턴스별로 다르게 설정(Web/App Server & DB Server & Cache Server)설정하여 보안을 강화하는 요소로 활용 가능합니다.

보안그룹 구성은 일반적으로 아래 요소들을 적용합니다.

  1. SSH – TCP – 22 – 0.0.0.0/0 : 모든 IP에서의 SSH 접속을 허가함 (public key 로 접근 제한)
  2. HTTP – TCP – 80 – 0.0.0.0/0 : 모든 IP에서의 HTTP 요청 허가
  3. HTTPS – TCP – 443 – 0.0.0.0/0 : 모든 IP에서의 HTTPS 요청 허가
  4. MYSQL/Aurora – TCP – 3306 – 제한된 IP : 정해진 IP에서 들어오는 Database 접근 허가 (DB 서버만 적용)

입력 화면의 유형을 선택하여 구성하려는 허가 범위를 설정하면 자동으로 기본 프로토콜과 포트 범위를 제공해줍니다. 필요한 경우 커스텀하여 직접 프로토콜과 포트범위를 입력하는 방법도 가능합니다.

동일한 역할의 인스턴스를 여러개 생성하고 있다면, 기존 보안 그룹 선택 버튼을 통해, 이미 구성된 보안 그룹을 불러와 적용할 수 있습니다.

EC2 돌아보기

EC2의 기본적인 개념과 EC2를 시작하기 위해 적용해야할 기본 사항을 알아보았습니다. 다른 클라우드 서비스나 소규모 클라우드(vultr, Digital Ocean 등)에 비해 EC2는 설정해야할 값이 많고 복잡해보이지만, 각각의 단계에서 해야할 일이 명확하기 때문에 잘 적응하여 활용하면 클릭 몇번만으로 내 개발 환경에 딱 맞는 클라우드를 구성할 수 있습니다.

Free Tier 상품으로 구성하면 별도 비용 청구 없이 무료로 이용해볼 수 있기 때문에, 바로 인스턴스를 구성해서 서비스를 개발하려고 하기 보다는 Free Tier 상품을 써보면서, VPC, EC2에 친숙해진 뒤 서비스를 구축하는 것이 더 권장됩니다.

또, EC2 자체만 구성해서는 바로 인스턴스에 접속이 불가한 경우가 많기 때문에 (VPC 설정) 가급적 VPC와 서브넷, 라우팅 테이블들을 구상하고 EC2를 구축하는 것이 더 좋습니다.

소개드린 EC2 인스턴스 자체 뿐 아니라 EC2 메뉴에는 로드 밸런싱 설정도 함께 제공됩니다. 본 시리즈 글이 마무리되면, 가상의 커머스를 EC2, VPC, RDB, ALB 등을 사용해가며 구성하는 과정을 글로 정리해보고자 합니다.

Categorized in:

개발,

Tagged in: