[AWS TechCamp] AWS 핵심 서비스로 웹 애플리케이션 구축하기 - VPC, EC2, AMI

yricog·2024년 9월 10일
0

AWS TechCamp - AWS 핵심 서비스로 웹 애플리케이션 구축하기

3일동안 진행되는 온라인 AWS TechCamp를 신청했다. 실무에서 사용해오던 AWS 핵심 서비스들에 대한 깊은 이해와, 아직 사용해보지 않은 서비스들에 대한 지식의 확장을 기대하면서!

모든 과정은 이론+실습으로 진행되며 오전/오후 각각 다른 과정들이 다양한 레벨로 진행된다. 이번 기초 과정은 그동안 실무에서 가장 빈번하게 사용해왔던 서비스들이지만 조금씩 놓치고 있던 부분들이 있어 다시 한번 큰 흐름으로 개념 정리를 해보려고 한다.

  • 실습 구성도 아키텍쳐
    AWS 구성도 아키텍쳐

AWS 리전과 가용영역

AWS는 전세계적으로 호스팅되며, 이 호스팅되는 위치를 지리적 관점으로 구분하고 리전(region)이라 부른다. 각 리전은 완전히 독립되어 있기 때문에 한 리전에서 만든 리소스를 다른 리전에서 사용할 수 없다. 하나의 리전은 고가용성 및 확장성을 위해 물리적으로 분리된 최소 3개 이상의 가용 영역(Availability Zone)으로 구성된다. (현재 서울에는 총 4개의 가용 영역이 존재한다)

각 가용영역 간 모든 트래픽은 암호화 되며, 서로 100km 이내 거리에 위치한다. 또한 각 가용 영역은 하나 이상의 개별 데이터 센터로 구성되고, 데이터 센터는 보통 50,000~80,000대의 물리적 서버가 존재한다.


1. 네트워크 구성

VPC(Virtual Private Cloud) 개요

VPC(Virtual Private Cloud)란, 사용자가 정의한 논리적으로 격리된 가상의 프라이빗 네트워크 환경이다. 자체 데이터 센터에서 운영하는 기존 네트워크 환경과 유사하게 사용이 가능하다. 여기서 '논리적으로 격리' 란 예를들어 집 주소 중 A동 303호만 알려주는 격으로, 퍼블릭 주소가 있어야만 앞의 주소를 알려주어 찾아오게 할 수 있다.

이해가 쏙 갔던 강연자님의 인상적인 한 마디 -

📢 "땅 없이 아파트를 올릴 수 없듯, 네트워크(VPC)를 구성해야 서버(EC2)를 올릴 수 있다!"

VPC는 아래 예시와 같이 구성하게 된다. VPC에는 하나의 리전의 각 가용성 영역 안에 하나의 서브넷이 있고, 각 서브넷 안에 EC2 인스턴스가 있다. 그리고 VPC 리소스와 인터넷 간의 통신을 허용하는 Internet Gateway가 있게 된다.
VPC

VPC 구성

VPC 구성

1. IP 주소 범위 설정

VPC의 IP범위는 RFC 1918(사설 아이피 대역)에 맞춰서 구축해야 한다. 사설 아이피(프라이빗 IP)란 인터넷을 위한 사용이 아닌 사용자간 사용하는 아이피 주소 대역을 말한다. 즉, 네트워크 내부에서 서로의 위치를 찾아갈 때 사용한다.

📢 다른 집 찾아갈 땐 퍼블릭아이피! 같은 집 안에서는 사설아이피!

IP 주소 범위 설정 시 주의사항

  • CIDR(Classless Inter-Domain Routing) 블록 설정
    • CIDR : 클래스 없이 네트워크에 유연하고 효율적으로 IP주소를 할당하는 방법
  • RFC 1918의 사설 IP 대역 사용 권고
  • VPC의 네트워크 범위는 /16~/28까지 가능
  • CIDR는 생성 후 변경 불가능
  • 향후 직접 연결할 가능성이 있는 네트워크와 주소가 중복되지 않도록 할당이 권고됨
    IPv4 CIDR 블록 설정

2. 서브넷 정의

서브넷은 VPC의 IP 주소 범위이다. VPC 안에는 여러개의 서브넷이 있을 수 있는데, 더 많은 네트워크망을 만들기 위해 서브넷을 나누게 된다. 서브넷은 VPC보다 더 작은 단위이므로 IP범위 또한 더 작은 값을 갖게 된다. 서브넷을 추가하면 EC2와 같은 리소스를 배포할 수 있다.

3. 라우팅 테이블 구성

네트워크 요청 시 데이터는 라우터(목적지)로 향하게 되는데 각각 정의된 라우팅 테이블(이정표)에 따라 작동된다. VPC의 각 서브넷은 라우팅 테이블에 연결되어야 하며, 라우팅 테이블에서는 서브넷에 대한 라우팅을 제어한다. 이 때, 서브넷을 특정 라우팅 테이블과 연결하지 않으면 VPC와 함께 자동으로 제공된 기본 라우팅 테이블과 연결된다.

라우팅 테이블을 통해, 로컬을 타겟으로 하는 IP범위를 갖는 네트워크 요청은 로컬 안에서 찾게 된다. 하지만 그 외의 외부로 통하는 트래픽은 인터넷 게이트웨이라는 관문이 필요하다.

📢 라우터는 목적지! 라우팅 테이블은 이정표!

4. Internet Gateway 설정

Internet Gateway는 VPC를 인터넷에 연결해주어 통신할 수 있게 해주는 장치이다. 외부 인터넷에서 Internet Gateway를 통해 라우팅 테이블에 있는 타겟을 확인하여 퍼블릭 서브넷 안에 있는 인스턴스에 접근이 가능해진다. 혹은 거꾸로! (프라이빗 서브넷은 Internet Gateway와 연결되어 있지 않다)
인터넷 게이트웨이

5. 프라이빗 서브넷과 NAT 게이트웨이

위에서 말한 것과 같이 Internet Gateway퍼블릭 서브넷과만 연결이 가능하다. 기본적으로 프라이빗 서브넷의 라우팅 테이블은 10.0.0.0/16 local을 타겟한다. 하지만 프라이빗 서브넷이 인터넷과 아웃바운드 통신이 필요하다면?

프라이빗 서브넷이 외부 요청에 의한 인바운드는 필요 없더라도, 인스턴스의 주기적인 업데이트와 같은 이유로 아웃바운드 통신만 허용해야되는 경우가 있다. 이 때 퍼블릭 서브넷에서 동작하는 NAT 게이트웨이가 프라이빗 서브넷에서 외부로 요청하는 아웃바운드 트래픽을 받아 Internet Gateway와 연결한다.

NAT 게이트웨이

6. VPC 액세스 제어 - NACL과 보안 그룹

  • NACL(Network Access Control List, 네트워크 액세스 제어 목록)
    • 서브넷 단위 방화벽
    • Stateless(상태 비저장)
    • Allow, Deny 설정 가능
  • 보안그룹(Security Group)
    • 인스턴스 단위 방화벽
    • Stateful(상태 저장)
    • Allow만 설정 가능

NACL(또는 네트워크 ACL)은 서브넷과 외부 트래픽을 제어하기 위한 방화벽 역할을 담당하는 보안 계층이다. 최소 1개 이상의 서브넷과 연동되어 사용되며 1:N 연동도 가능하다. 포트 및 아이피를 직접 Deny 설정 가능하며, 들어오고 나가는 트래픽을 구분하지 않는다. (NACL에는 규칙에 부여되는 고유 번호가 있는데, 낮은번호부터 우선순위를 갖게 되므로 주의할 것!)

보안그룹은 기본적으로 모든 설정이 차단되어 있어 필요한 설정을 Allow해주어야 한다. NACL과는 다르게 각각의 리소스 별로 별도의 트래픽을 설정할 수 있다. NACL과 보안그룹 충돌 시에는 보안그룹이 더 높은 우선순위를 갖게 된다.

NACL과 보안그룹

📝 [실습과정]
1. VPC 생성 : 초기 VPC 생성 시, VPC CIDR 블록 (10.0.0.0/16) 설정 후 1개의 가용영역 안에 1개의 서브넷을 같이 만든다. ( 서브넷 CIDR 블록 :10.0.10.0/24 )
2. 추가 서브넷 생성 : 위에서 만든 VPC 선택 후 다른 가용영역(ex. ap-northeast-2c) 안에 CIDR 블록 (10.0.20.0/24) 을 설정하여 생성
3. 라우팅 테이블 편집 : 기본 라우팅 테이블이 아닌 사용자 지정 테이블에 인터넷 통신 가능한 경로(ex. 0.0.0.0/0) 가 있는지 확인 후 지정
4. 보안 그룹 생성 : 위에서 생성한 vpc 선택 후 인바운드 규칙에 SSH, HTTP 를 추가하여 인스턴스의 보안그룹 생성


2. 웹 서버 생성

EC2(Elastic Compute Cloud) 개요

EC2는 AWS에서 제공하는 클라우드 컴퓨팅 서비스이다. EC2는 온디맨드(필요한 서비스를 실시간 제공) 확장 가능한 컴퓨팅 용량을 임대해주는 서비스로, EC2를 사용하여 원하는 수의 가상 서버를 구축하고 관리할 수 있다. 용량을 추가(스케일 업)하여 트래픽 급증 등의 사용량 많은 작업을 처리하고, 사용량이 감소하면 다시 축소(스케일 다운)할 수 있다.

  • EC2의 장점
    • 용량의 탄력성
    • 사용한 만큼만 비용 지불
    • 인스턴스 제어 가능
    • 보안 및 네트워크 구성, 스토리지 관리 용이

EC2 구성

1. Instance

인스턴스는 서버의 컴퓨팅(CPU/RAM)에 해당하는 가상 컴퓨터로, CPU 및 메모리, 그래픽카드 등의 연산을 위한 하드웨어 부분을 담당한다. AWS EC2는 각 쓰임새에 맞는 최적화된 다양한 인스턴스 유형을 제공한다.

  • 인스턴스 유형
    마치 게임에서 힘/민첩/지능 중 어느걸로 할지 결정하는 것처럼, EC2 인스턴스도 유형을 선택하고 사이즈를 골라 사용 목적에 맞게 생성 가능하다. CPU / 메모리 / 그래픽 카드 중 어떤 것에 힘을 실을지 성능 목적에 따라 여러가지 타입이 존재한다.
    인스턴스 타입

  • 인스턴스 사이즈
    인스턴스의 사이즈는 CPU의 갯수, 메모리 크기 및 성능 등으로 결정된다. CPU나 메모리 사이즈가 클수록 성능이 빨라지고 요금도 더 많이 부과된다.
    아래 예시에서, 아래로 갈수록 사이즈가 커지는 것을 볼 수 있다.
    인스턴스 사이즈

  • 인스턴스 타입 읽는 법

    • 인스턴스 패밀리(타입) : ex_범용 애플리케이션 서버용
    • 인스턴스 세대
    • 추가 기능(접두사) : 무슨 기반의 CPU 프로세서 사용?
    • 인스턴스 크기(사이즈)
      인스턴스 타입 읽는 법

2. EBS(Elastic Block Storage)

서버의 하드디스크에 해당하는 가상 하드디스크로써 데이터를 저장하는 역할을 한다.
EBS는 네트워크로 별개로 연결된 서비스이기 때문에 EC2 인스턴스가 종료되어도 별개로 작동한다.

  • EBS 볼륨
    EBS 볼륨이란 EBS로 생성한 디스크 하나하나의 저장 단위를 말한다.
    하드 저장 디스크가 SSD,HDD로 나뉘는 것처럼 EBS 볼륨에도 총 5가지의 타입이 있다.
    • 범용(General Purpose of GP3) : SSD
    • 프로비저닝 된 IOPS(Provisioned IOPS or io2) : SSD
    • 쓰루풋 최적화(Throughput Optimized HDD or st1)
    • 콜드 HDD(SC1)
    • 마그네틱(Standard)

3. AMI(Amazon Machine Image)

AMI란 EC2 인스턴스의 OS 및 소프트웨어 등 설정 상태를 저장하는 기능이다. AMI를 이용하여 새 인스턴스를 만들면 이미지에 저장된 설정과 같은 환경의 컴퓨터를 빠르게 생성 가능하다. 빠른 개발 및 배포가 가능한 것이 장점이다.

📝 [실습과정]
1. 인스턴스 생성 : OS 이미지 선택 후, 위에서 만든 VPC / 서브넷 / 보안그룹 등을 설정해준다.

  • 인스턴스 생성 후 퍼블릭 IPv4 주소로 아래와 같은 웹 화면을 확인할 수 있다
  1. AMI 생성 : 이미지로 만들 인스턴스 클릭 후 작업 메뉴 > 이미지 및 템플릿 > 이미지 생성 에서 이미지를 생성한다.
  2. AMI 기반 인스턴스 생성 : EC2 > AMI 메뉴에서 위에서 만든 AMI 선택 후 AMI로 인스턴스 시작 버튼을 눌러 새 인스턴스를 생성한다.
  • 해당 실습에서 EBS에 대해선 다루지 않았다

3. 로드 밸런서 구성

ELB(Elastic Load Balancing) 개요

로드 밸런서는 부하를 적절하게 분배해주는 장치인데, AWS에서는 로드 밸런서를 ELB라는 서비스를 통해 제공한다.
ELB는 둘 이상의 가용영역에서 트래픽을 자동으로 분산한다. 또한 등록된 대상의 상태를 모니터링하면서 상태가 양호한 대상으로만 트래픽을 라우팅해준다. ELB 사용 시 안정적인 서버 환경을 운영할 수 있다.

  • ELB 특징
    • 네트워크 트래픽 분산을 통한 애플리케이션 확장성 개선
    • 여러 가용 영역을 기반으로 고가용성 제공
    • 트래픽에 따라 자동 조정
    • 트래픽을 받는 대상 : EC2 인스턴스 / 컨테이너 / IP주소 / Lambda 함수 등

📝 [실습과정]
1. 로드밸런서 생성하기 클릭 후 트래픽을 라우팅할 VPC와 가용영역(서브넷)을 지정한다. 이 때 가용영역은 2개 이상 선택하는 것이 좋다.
2. 새 보안그룹 생성에서 위에서 지정한 VPC를 선택하고, 인바운드 규칙으로 HTTP를 추가해준다.
3. 리스너 및 라우팅 항목에서 대상 그룹 생성 클릭 후 대상 유형으로 인스턴스를 선택한다. 이후 대상 등록에 보이는 두 개의 인스턴스를 보류 중인 대상으로 등록한다.
4. 리스너 및 라우팅로 돌아와 생성된 대상 그룹을 지정해준다.
5. 웹 서버가 로드 밸런서의 트래픽만 받게 하기 위해서, 해당 서버의 보안 그룹의 인바운드 규칙 편집 후 HTTP 소스를 위에서 만든 보안그룹으로 지정해준다.


참고

profile
의미와 가치를 쫓는 개발자 ✨

0개의 댓글