이 글은 양승도 아키텍터가 AWS컨퍼런스에서 발표한 강의를 참고하였다.
엄청 좋은 강의인 것 같아서 VPC를 공부하시는 분들께 추천한다.
또, 인프런에 있는 노마드 컨텐츠 랩의 AWS강의를 참고하였다.
(나는 3가지 모두 해당함 🤭)
VPC는 Vitual Private Cloud의 약자이고, 독립적인 가상의 네트워크 공간
의 의미를 갖는다.
좀 더 쉽게 얘기한다면 가상의 데이터 센터
라고 생각하면 된다.
'데이터 센터'라는 것은 우리가 흔히 접하는 사내 전산망과 같은 것이라고 보면 된다. 여러 데이터들이 저장되어 있고, 다양한 프로그램들이 돌아가고 있고, 외부에서 접속하려면 정해진 포트와 규칙으로만 접근이 가능한 폐쇄된 공간.
VPC는 위와 같은 구조를 갖는다.
아마존에 가입하면 먼저 VPC를 할당을 해주고, 내가 RDS나 EC2등등의 서비스를 이용하면, 설정에 맞게 나의 VPC안에 있는 서브넷에 배치가 된다.
실제 시나리오로 설명을 한다면, 다음과 같다.
1. VPC 생성 > AWS내에서 '나'만이 사용할 수 있는 데이터 센터가 생김
2. 서브넷 생성 > 어떠한 규칙을 갖는 그룹을 갖게 됨
3. EC2 생성 > '나'의 vpc와 생성된 서브넷의 규칙속에서 어떠한 역할을 하는 프로그램 또는 서버가 돌아감
1,2번을 따로 하지 않고 바로 EC2를 만들더라고 1,2번을 설정하는 과정이 포함되어 있다.
10.0.0.0/16을 VPC의 CIDR로 설정했다고 가정해본다.
-> 슬래시뒤의 16이라는 숫자는 총 32비트로 구성되는 IP에서 앞에 16비트는 고정한다는 의미를 갖고 있다.
즉, 뒤에 16비트로 다양한 IP를 구성할 수 있고 결과적으로 65536개(2의 16승)의 IP를 구성할 수 있다.
-> 이 VPC는 65536개의 Private IP를 가질 수 있다.
16
을 권장함.10.0.0.0 ~ 10.255.255.255 -> 10/8prefix
172.16.0.0 ~ 172.31.255.255 -> 172.16/12prefix
192.168.0.0 ~ 192.168.255.255 -> 192.168/16prefix
VPC내부의 내부망이다. 같은 서브넷에 속한 인스턴스들 끼리 동일한 규칙이나 보안을 적용하기 위해서 사용된다.
VPC는 기본적으로 폐쇄된 네트워크 환경이다. 그래서 외부와 통신을 하려면 Internet gateway
라는 외부와 소통할 수 있는 길을 만들어줘야한다.
사람들에게 서비스할 웹서비스를 특정 EC2인스턴스에서 돌린다고 가정하면, 이 EC2인스턴스는 외부와의 통신이 허용된 Internet gateway
를 통해서 외부와 통신을 하게 된다.
vpc를 이해하기 쉽게 실생활에 비유해보겠다.
vpc: 사람이 사는 집
서브넷: 집 안에 있는 방
IG (Internet gateway): 현관문
EC2등등의 프로그램들: 집안 여기저기에 놓여있는 어떠한 역할을 하는 물건들 또는 가구들
VPC 대시보드 > VPC 생성
VPC의 이름과 사용할 IP의 대역폭을 설정한다.
여기서 설정한 IPv4 CIDR의 값에 따라서 최대로 할당할 수 있는 private IP의 갯수가 정해진다.
예를 들어서, 10.0.0.0/16
으로 설정했다면 이 VPC에서 사용할 수 있는 IP 대역폭은 다음과 같다.
10.0.0.0 ~ 10.0.255.255
나는 10.1.0.0/16
으로 값을 설정함
VPC 대시보드 > 메뉴에서 '서브넷'으로 이동 > 서브넷 생성
서브넷은 Public서브넷 2개, Private 서브넷 4개를 만들어줄 것이다.
서브넷을 생성하려고 하면 아래와 같이 이름, 가용영역, IPv4 CIDR블록을 설정해야한다.
6개를 아래와 같은 값들로 설정한다.
서브넷 이름: public-subnet-a1
가용 영역: ap-northeast-2a
IPv4 CIDR: 10.1.1.0/24
서브넷 이름: public-subnet-c1
가용 영역: ap-northeast-2c
IPv4 CIDR: 10.1.2.0/24
서브넷 이름: private-subnet-a1
가용 영역: ap-northeast-2a
IPv4 CIDR: 10.1.3.0/24
서브넷 이름: private-subnet-c1
가용 영역: ap-northeast-2a
IPv4 CIDR: 10.1.4.0/24
서브넷 이름: private-subnet-a2
가용 영역: ap-northeast-2a
IPv4 CIDR: 10.1.5.0/24
서브넷 이름: private-subnet-c2
가용 영역: ap-northeast-2c
IPv4 CIDR: 10.1.6.0/24
(값 들은 무조건 위의 형식을 따라야하는 것은 아니고, 사용할 수 있는 IP범위 안에서 자유롭게 설정할 수 있다.)
생성을 완료하면, 서브넷 대시보드에는 다음과 같이 Available
상태로 서브넷들이 생성된 것을 확인할 수 있다.
vpc 대시보드 > 메뉴에 '인터넷 게이트웨이' 클릭 > 인터넷 케이트웨이 생성
Igw의 이름을 간단히 짓고 바로 생성한다.
이제 위에서 만든 VPC를 Igw에 붙여주어야한다.
'vpc에 연결' 버튼을 눌러서 VPC와 연결해주자.
그러면 Igw의 상태가 Attached
로 변한 것을 확인할 수 있고, 이제 우리의 VPC는 인터넷과 통신할 수 있는 통로를 갖게 되었다.
Route table
은 네트워크 간의 통신에 있어서 목적지로의 데이터 패킷 이동 정보를 구성하는 규칙이다.
즉, EC2나 RDS와 같은 리소스들이 목적지에 따라서 어떤 경로를 타고 이동할 것인지 정의해주는 테이블이라고 할 수 있다.
VPC 대시보드 > 메뉴에 '라우팅 테이블' > 테이블 생성
라우트 테이블은 아래와 같이 이름과 VPC를 설정해주면 된다.
또, 이 라우트 테이블을 어떤 서브넷에 적용할지도 선택해줘야한다. 생성한 라우트테이블 페이지로 가서 '서브넷 연결 편집'을 클릭하자.
퍼블릭 라우트 테이블은 위에서 생성한 2개의 퍼블릭 서브넷에 모두 적용해주자.
또, 퍼블릭 서브넷들은 인터넷과 통신이 되어야하므로, 이 라우트 테이블의 경로에 위에서 설정한 Igw를 추가해주자.
이렇게 하면, 외부와 통신할 때는 맵핑한 igw를 통해서 통신하게 된다.
Private 서브넷들은 위와 같은 방식으로 각각 1개씩 RT를 구성해준다.
단, 인터넷과 통신은 직접하지 않을 것이므로 Igw를 맵핑하는 것은 생략한다.
현재까지 해준 작업들을 정리하자면 다음과 같다.
여기까지하면 사실 나만의 VPC를 구성하는 것은 완료가 된 것이다.
다음 스텝은 실제로 EC2같은 리소스들을 생성하고, 우리가 의도한대로 잘 동작하는지 한번 살펴보도록 하겠다.
EC2 인스턴스를 생성하는 페이지로 이동하자.
이번 실습은 웹서비스를 EC2로 돌린다는 가정을 하도록 하겠다.
인스턴스를 생성할 때는 서버 종류같은 거는 기본으로 세팅하면 되고, 아래의 3가지만 직접 설정해주면 된다.
인바운르 룰에는 ssh, http, https에 대한 룰을 추가해주면 된다.
여기서 MySQL같은 DB와 통신을 해야한다고 하면, MySQL에 대한 '유형'을 선택해주고 Source type은 해당 DB의 private IP를 세팅해주면 된다.
이전에 인스턴스를 생성해줄 때, 퍼블릭 Ip를 자동 할당하는 기능을 활성화하지 않았기 때문에 직접 Ip를 할당해주자.
자동 할당을 비활성화한 이유는 고정된 퍼블릭 Ip를 사용하기 위함이다.
탄력적 Ip 메뉴로 이동해서 아래와 같이 입력해주자.
모두 기본 값이고, 편의상 태그만 추가해주었다.
생성하면 이렇게 EIp가 하나 생성된 것을 확인할 수 있다.
그리고 아래의 Ip 연결 버튼을 눌러서 생성한 EC2에 연결시켜주자.
EC2 인스턴스 페이지에 접속한 후에 '연결'을 눌러서 ssh로 접속을 해보면, 이렇게 정상적으로 서버에 접속이 되는 것을 확인할 수 있다.
이로써 외부에 서비스할 수 있는 나만의 또는 우리 회사만의 데이터 센터를 갖게 되었다! 🤭
실습은 모두 마쳤지만, 생성한 것들을 그대로 두면 언제 어디서 어떻게 청구서가 날라올지 모른다 ㅎㅎㅎ
(다들 AWS 쓰다보면 이런 경험 한두번쯤은 해보셨쥬..? ㅠㅠ)
그래서 지금까지 생성했던 것들을 잊지말고 다 지워주자. 지우는 순서는 생성한 것을 역순으로 지워주면 되는데, 헷갈릴수도 있으니 아래에 지우는 순서를 정리했다.
1. EC2 인스턴스 종료
2. (몇 시간 후 인스턴스 목록에서 사라짐)
3. EIp(탄력적 ip) 릴리즈: EIp페이지로 가서 삭제할 Ip선택 후, '릴리즈'하면 됨
4. 키페어 삭제
5. 보안그룹 삭제
1. 라우팅 테이블(RT)에서 서브넷 연결 해제: RT 하나 하나마다 서브넷 연결을 해제해야함.
2. RT 삭제 (5개): 모든 서브넷 연결을 해제 했으면 RT를 삭제할 수 있다.
3. 서브넷 삭제 (6개)
4. VPC, Igw 삭제
이렇게 혹시 모를 과금 폭탄 방지도 완료! 🤭
막상 글을 쓰고 보니 내용이 너무.. 많은가 싶긴하다..ㅎㅎ;;
그래도 나는 이번 기회를 통해서 기본적인 VPC의 원리와 AWS 서비스들의 네트워크 흐름을 많이 익힌 것 같다.
이전에는 vpc나 서브넷같은 것에 대해서 개념이 없다 보니, AWS를 사용하는 게 좀 막연하고 와 닿지 않았었다.
이해를 잘 못하는 부분에서 설정이 잘못되면 한~참을 헤매기도 했었는데, 이제는 어떤 방식으로 동작하는지 알고 사용할 수 있으니까 이런 부분들이 많이 좋아지지 않을까 기대해본다.
그럼 이번 글은 여기서 마치겠다.
언제나 좋아요, 댓글, 피드백은 매우 환영이다.
글을 읽는 사람 모두에게 AWS를 이해하는데 조금이나마 도움이 됐으면 한다 🤭