AWS VPC, EC2

현지·2025년 12월 31일

AWS를 이용해서 서버를 띄우기 전에 기본적인 지식을 공부하였다.
강의는 https://www.youtube.com/@AWSClassroom 에서 들었는데 여타 유료 강의 못지않게 설명을 잘 해주신다.

기본 지식

[들어가기전 기본 용어 정리]
EC2 : AWS에서 제공하는 가상 서버 대여 서비스의 이름이다.
인스턴스 : EC2서비스를 사용해서 만들어진 실제 가상 서버 한 대 단위를 이르는 말

스케일링 - 자원을 늘리는 것
vertical scale 수직적 스케일링 - 하나의 자원 자체의 '성능'을 높이는것
horizontal scale - 자원의 규모, 수를 늘리는것
- 대게 이걸 씀 (탄력적으로 쪼개기 쉬움)
- 대신 아키텍처 복잡

-> Auto Scaling - horizontal scaling 자동화
EC2 Auto Scaling - 정확한 수의 EC2인스턴스를 보유하도록 보장
- 최소, 최대 숫자 인스턴스 설정 가능
- CPU 부하에 따라 인스턴스 크기 조정
- 가용 영역에 인스턴스가 골고루 분산되도록 인스턴스 분배

NAT(Network Address Translation) - 사설 IP를 공용 IP로 변환해주는 방법
- Dynamic NAT - NAT Pool에서 현재 사용가능한 공용 IP하나 가져다 씀
- Static NAT - 이미 사설과 공용 IP가 1:1 매칭이 되어 있음(수가 같음)
- PAT(Port Address Translation)
- 가장 많이 쓰이는 형식
- 하나의 공용 IP가 사설망 전체를 대표함
- 포트별로 PC를 다르게 구분함
- 포트 포워딩(Port Forwarding) - PAT 원리를 수동으로 설정하여 특정 포트에 특정 기기를 연결시키는 설정작업
- 보통 공유기가 이 역할을 함

CIDR는 그냥 IP주소 표기법. 클래스 단위로 빌리면 너무 비싸기 때문에 정교하게 수를 조정가능한 CIDR표기법이 생긴것. 할당받은 공용 IP 개수에 x 사설 IP주소로 해서 인터넷 연결 가능한 기기를 많이 만들 수 있음.


출처 : https://www.youtube.com/watch?v=IJgAIbxxJCE

보통 EC2 인스턴스로 서버를 띄운다고 한다면, 그 기본 틀의 구조는 위와 비슷하다. 각 구성요소를 하나씩 알아보자

VPC(Virtual Private Cloud)

  • 외부와 격리된 가상 네트워크 단위. 쉽게 말해 사설망
  • 원칙상으론 퍼블릭 인터넷에서 접근불가,(하지만 인터넷 게이트웨이를 통해 접근 가능) AWS내부에서도 외부를 통해 접근해야함
  • 다양한 서브넷 구성 가능
  • 인터넷에 노출되지 않는 EC2구성 등 보안 설정 가능
  • 하나의 VPC는 하나의 리전밖에 커버하지 못하기 때문에 리전과 리전 사이를 하나의 VPC가 커버할 수는 없음. 리전의 수만큼 VPC가 존재해야 함.
  • EC2를 띄우려면 필수적으로 VPC도 설계해야함 애초에 계정을 만들면 디폴트 VPC가 자동으로 생성된다.

왜 VPC가 필요할까?
서버를 냅다 아무 환경에나 띡하고 띄울 순 없다. 일단 네트워크 환경을 만들어주어야 한다. VPC는 쉽게 말하면 거대한 공용 클라우드(AWS)에서 나만의 울타리를 치는거다. 이 울타리가 없으면 밖에서 내 사설 IP주소만 알게 되면 그냥 바로 침범이 가능해진다. 그러나 VPC라는 울타리를 치면 내가 허락한 문(인터넷 게이트웨이)과 규칙(보안 그룹)등을 통과해야지만 들어올수 있기 때문에 보안을 위해서는 필수적이다. 또한 사설 IP대역(내 정원의 크기)도 마음대로 지정이 가능해진다. 그리고 내가 소유한 땅이나 다름없으니 거기 안에서 역할에 따른 구역(서브넷)을 자유롭게 나눌수도 있다. 그렇기 때문에 VPC는 EC2뿐만 아니라 RDS, Lambda등 대부분의 서비스에서도 필수적인 요소이다.

<구성 요소들>

1. 서브넷

  • VPC의 하위 단위. VPC에 할당된 IP를 작은 단위로 분할한 개념. 서브 네트워크
  • 하나의 서브넷은 하나의 가용영역 안에 위치
  • 사용 가능한 IP개수는 -5개
  • 외부에서 접근이 가능한 퍼블릭 서브넷은 웹서버 등의 용도로, 외부와 아예 차단된 프라이빗 서브넷은 데이터베이스, 로직 서버등의 용도로 사용됨.(라우트 테이블에 밖으로 나갈 수 있는 IP자체가 없음)
  • 가장 작은 서브넷 단위는 CIDR단위 /24(11개, 16-5)

2. 인터넷 게이트웨이

  • 기본적으로 외부와 통신이 안 되는 VPC가 외부의 인터넷과 통신할 수 있도록 경로를 뚫어주는 리소스(쉽게 말해 가상환경에 현실세계로 향하는 포탈 뚫어주는 역할)
  • 공유기처럼 사설IP와 공용IP간의 변환 역할을 수행함. 다만 공유기와 IGW의 차이라면 공유기는 자신의 고유 IP로 변환해서 내보내고 IGW는 해당 리소스에 할당된 공용 IP와 매핑해서 보냄
  • 이름에서 알 수 있듯이 폐쇠적으로 인터넷 필요없이 운영할 서비스면 굳이 필요없기도 함
  • 무료임

IGW(인터넷 게이트웨이)도 공유기처럼 그냥 IGW자체가 공용 IP소유하고 있으면 편하지 않나?
공유기는 대게 안에서 밖으로 나가는 요청이 먼저 시작되므로 라우트 테이블에 먼저 어떤 사설IP가 어떤 포트로 나갔는지 기록이 가능함. 그러나 IGW로 연결된 서비스는 대게 웹 서버와 같은 외부에 노출되어야 하는 서비스다. 그런데 만약 인바운드 요청이 아웃바운드 요청보다 먼저 들어오게 된다면, 아직 라우트 테이블에는 아무 기록이 없으니 어디로 매핑을 해줘야 할지 모르게 된다. 그러므로 외부에서 내부로 들어오는 요청이 원활하게 이루어져야 하기 때문에 그냥 리소스 자체에 공용 IP를 박아서 바로 연결이 되도록 한 것이다.

3. 보안그룹

  • 방화벽의 역할을 하는 서비스
  • 기본적으로 모든 포트 비활성화
  • 특정 포트 허용만 가능, Deny는 불가능
  • 인스턴스에 붙어있음. 하나의 인스턴스에 여러개의 보안그룹 설정 가능
  • 보통 8080번 포트와 3000번 포트 (TCP)를 열어두는데 우리는 웹 애플리케이션 및 API 서버를 주로 만들기 때문에 이와 관련된 통신을 허용하기 위함임
  • 보안그룹은 인바운드 들어왔던걸 기억해서 아웃바운드가 자유롭지만(StateFul), NACL은 인바운드가 통과되었던 것이라도 아웃바운드 할 때 또 체크해야함(Stateless)

4. NACL

  • 서브넷 단위(서브넷 들어가기전에 NACL을 거쳐야함)
  • 포트 및 IP 직접 Deny가능(특정 IP 블락 가능)
  • 규칙번호 100번 단위, 작은 수부터 규칙 적용

5. 라우트 테이블

  • 트래픽이 어디로 가야 할지 알려주는 이정표
  • 0.0.0.0/0(외부 아이피 대역)이 목적지일 때, 인터넷 게이트웨이로 나가도록 설정된 라우팅 테이블을 서브넷에 붙이면, 해당 서브넷은 퍼블릭 서브넷이 되는것임

6. NAT Gateway

  • VPC의 프라이빗 서브넷에 있는 인스턴스에서 외부의 인터넷과 통신하기 위한 통로
  • 서브넷 단위(퍼블릭 서브넷에 있어야함)
  • NAT Gateway는 퍼블릭 서브넷에 위치해서 프라이빗 서브넷에 위치한 인스턴스 대신에 인터넷에 연결해 줌(업데이트나 다운로드 같은 외부 인터넷 연결이 필요할 때)
  • 보안을 위해 아웃바운드(안에서 밖으로 일방통행)만 가능

7. Bastion Host

  • Private Subnet의 자원에 접속이 되도록 도와주는 호스트
  • 이건 NAT Gateway랑 반대로 외부에서 프라이빗 서브넷에 접근하기 위한 EC2 인스턴스
  • 퍼블릭 서브넷에 위치해야함(프라이빗 서브넷 중개 역할이니까)
  • private서비스에 접근할땐 Session Manager를 사용하기도

8. Elastic Load Balancer

  • 다수의 트래픽을 분산 시켜주는 서비스
  • Health Check를 통해 트래픽을 발생시켜 Instance가 살아있는지 체크
  • 지속적으로 IP주소가 바뀌어 고정 불가능하기 때문에 항상 도메인 기반으로 사용
  • 서버가 죽으면 로드밸런서가 새로운 복제 서버를 만들어(AMI로) 요청을 거기로 우회시키고 기존 죽은 서버는 삭제시킴(고가용성 설계)
  • 얘도 Bastion Host랑 비슷하게 프라이빗 서브넷에 인바운드 요청 전용 길인건 맞지만, 로드밸런서는 외부 요청의 메시지만 서버에 전달하고 답을 받아다주고 외부와 직접 연결되는 것은 막음(reverse proxy). 다시 말해 외부 손님을 위한 길이나 마찬가지라 외부 요청인 HTTP/HTTPS만 알아듣고 80/443번 포트만 열려있음.
    이에 반해 Bastion Host는 관리자가 직접 서버 유지보수나 설정을 만지기 위해 길을 뚫어놓는 것에 가까움.(프라이빗 서브넷은 관리자도 함부로 접속 불가능하기 때문에) 그래서 보통 관리용 포트인 22(SSH)번 포트만 열어두고 특정 IP만 들어오게 해 둠.

왜 ELB의 IP는 유동적인가?
ELB의 IP는 계속해서 바뀌기 때문에 도메인 주소를 기반으로 작동함.
이유는 ALB도 결국 AWS가 관리하는 인스턴스(서버)인데 모든 트래픽이 ALB를 거쳐가기 때문에, 갑자기 트래픽이 늘어나면 AWS는 로드밸런서를 5대, 10대로 늘이고 이렇게 로드밸런서 서버를 늘릴 때마다 새로운 IP를 계속 추가함. 그리고 이 여러 개의 IP 주소를 하나의 DNS 이름(도메인) 아래에 묶어버림. 만약 IP가 하나뿐이라면 모든 트래픽이 거기로 몰려 병목현상이 일어날것임.

EC2

EC2(Elastic Compute Cloud) 구성요소

1. EBS

  • 하드디스크 역할
  • 종료 시 삭제 옵션(인스턴스가 종료될때 같이 삭제할 건지 여부)
  • 암호화(하드디스크 암호화해서 데이터 저장)

2. 스냅샷

  • 특정 시간의 EBS상태의 저장본(S3에 증분식 저장)

3. AMI

  • EC2인스턴스를 실행하기 위해 필요한 정보를 모은 단위
  • 인스턴스 복제할때 커스텀 AMI를 생성해서 복제가능
profile
헤맨만큼 내 땅이다

0개의 댓글