클라우드 컴퓨팅과 네트워크
네트워크쪽 지식은 개발자에게 필수적이다.
우리는 대 인터넷 시대에 살고있으니 말이다.
애플리케이션의 규모가 커짐에 따라 클라우드 컴퓨팅의 중요도도 올라가고 있다.
3학년때 컴퓨터 네트워크라는 수업을 들으면서 기본적으로 지식을 익혔으나,
많이 까먹기도 했고 AWS 리소스들을 만들면서 헷갈리는 부분이 많아 정리하고자 한다.
VPC, Subnet 어디까지 알고있니?
AWS를 사용하면서 EC2, RDS, S3 등등 여러 리소스들을 생성했었지만
VPC와 Subnet은 따로 설정했었던 기억이 없다.
EC2 화면에서 항상 퍼블릭 IPv4 주소만 다뤘었고
프라이빗 IP, VPC, 서브넷등은 그런게 있나보다~ 라고 넘겼었다.
알고보니 그동안은 AWS에서 기본으로 제공하는 VPC와 Subnet을 사용하고 있었던 것이다.
콘솔에서 EC2를 생성할 때 자동으로 설정되었던 VPC와 Subnet에 대해 알아보자.
클라우드 네트워크 구성요소
가장 기본적인 네트워크 구성이다.
키워드만 뽑아보자면 Region, VPC, Available Zone, Subnet, NAT Gateway, Internet Gateway, Router등이 있다.
하나씩 알아보자.
Region
Region은 네트워크를 이루는 가장 상위 개념이다.
AWS는 전세계 곳곳에 IDC(Internet Data Center)를 설치했다.
AWS를 이용하기 위해 굳이 해저터미널을 타고 미국까지 가지 않아도 된다!
우리에게 친숙한 ap-northeast-2은 서울 리전이다.
리전마다 가격과 Ping 속도가 다르니 환경에 맞는 리전을 선택하자.
VPC
VPC는 Virtual Private Cloud로, 주로 퍼블릭 클라우드에서 사용하는 개념이다.
일종의 네임스페이스로 볼 수 있는데,
이름에서 알 수 있듯이 논리적으로 구분된 가상의 네트워크이다.
AWS는 VPC라는 공간을 제공해, 나만의 독립적인 네트워크를 구성할 수 있게 해준다.
맨 위의 구성요소 그림에서 알 수 있듯이, VPC는 Region에 종속적이다.
VPC를 이해하기 위해서는 CIDR, IP에 대한 이해가 필요하다.
CIDR
CIDR(Classless Inter-Domain Routing)은 컴퓨터 네트워크 시간 때 접했었다.
CIDR은 IP 주소 체계에서 IP 블록을 효율적으로 나타내기 위해 사용한다.
192.168.X.X/16 은 192.168.0.0 ~ 192.168.255.255 (65536개의 IP) 를 나타내는 CIDR 블록이다.
슬래시 뒤에 붙은 숫자는 서브넷 마스크로 호스트 주소를 식별하기 위해 존재한다.
보다 정확한 이해는 비트 단위로 생각하면 편한데
192.168.0.0을 비트 단위로 생각해보자.
11000000.10101000.00000000.00000000
이중, 16이라는 숫자는 왼쪽부터 16개의 비트를 호스트 주소로 사용하겠다를 의미한다.
11000000.10101000.00000000.00000000
반대로 해당 호스트 주소 아래에 내가 IP를 바꿀 수 있는 부분은 다음과 같다.
11000000.10101000.00000000.00000000
따라서 2^16=65536개의 IP를 갖게 되는것이다.
만약 192.168.X.X/20 이라면
11000000.10101000.00000000.00000000 이 호스트 주소가 되어
2^12 = 4096개의 IP주소를 가질 수 있다.
IP
CIDR은 IP주소들을 효율적으로 나타내기 위해 사용한다고 했다.
이때 나타내는 IP들중에 특별한 IP들이 있다.
IP는 다시 공인 IP와 사설 IP로 나뉘게 되는데
공인 IP
공인 IP는 전세계에서 고유하게 할당되는 IP로, 개인이 얻기 힘들다.
학교나 회사에서 하나씩 얻어서 사용하는 형태인데, 왜 얻기 힘든걸까?
IPv4는 2^32개의 IP주소를 가질 수 있는데, 이는 40억을 조금 넘는다.
단순히 생각해서 모든 지구인들이 하나씩 IP를 가지게 된다면 부족할것이다.
최근에는 IPv6가 등장했지만 아직까지 잘 사용은 안되는것같다.
이러한 문제는 사설 IP의 등장으로 해결되었다.
사설 IP
단순히 xxx.xxx.xxx.xxx 라는 IP 주소만 보고 해당 IP가 공인 IP인지 사설 IP인지 분간할 수 있겠는가?
이를 미리 방지하고자 사설 IP 대역대는 국제 표준에 의해 이미 예약되어있다.
- 10.0.0.0/8
- 172.16.0.0/12
- 192.16.0.0/16
각각의 대역대는 cidr블록으로 나타내져있다.
이중에 우리한테 익숙한것인
Docker 컨테이너의 내부 IP인 172.17.X.X
와이파이, 데탑 IP인 192.168.X.X
등이 사실은 사설 IP를 뜻하는것을 알 수 있다.
Avaliable Zone
Avaliable Zone은 줄여서 AZ라고도 표기한다.
이는 리전 및 VPC에 속하는 하위 개념으로, 서울 리전을 예로 들자면
강남 AZ, 강북 AZ, 강동 AZ등이 있을 수 있다.
AZ 끼리는 전용선으로 연결되어 같은 데이터를 가지고 있으며
Multi-AZ 서비스를 통해 만약 어떤 Zone에 지진이나 화재같은 이유로 물리적인 장애가 발생한다면
다른 Zone으로 서비스 할 수 있게 HA(High Availablity)를 제공할 수 있다.
Subnet
서브넷은 VPC에 속한 IP들을 더 세분화 할 수 있게 해준다.
이름에서 알 수 있듯이 sub - network이다.
서브넷은 AZ에 종속적이다.
다음과 같은 형태로 서브넷을 구축할 수 없다.
하지만 하나의 AZ에 여러 서브넷을 구성하는것은 가능하다.
네트워크를 서브넷으로 나누는것을 서브넷팅이라 하는데, 서브넷팅을 하면
더 빠르게 라우팅할 수 있으며 보안에도 좋은 효과가 있다.
그림에서 알 수 있듯이 서브넷은 다시 퍼블릭 서브넷과 프라이빗 서브넷으로 나뉜다.
Public Subnet
퍼블릭 서브넷에 속하는 개체들은 공인 IP와 사설 IP를 가진다.
공인 IP를 가진다는 말은 다시 말해 NAT Gateway를 거칠필요 없이 직접 외부(인터넷)와 통신 가능하다는 말이다.
사실 직접은 아니고 IGW(Internet Gateway)라는것을 거친다.
IGW는 공인 IP를 다시 사설 IP로 바꾸어주어 퍼블릭 서브넷에 속한 개체들이 외부와 통신할 수 있게 해준다.
Private Subnet
그렇다면 프라이빗 서브넷에 속하는 개체들은 당연히 공인 IP를 못가질 것이다.
프라이빗 서브넷은 그럼 왜 필요할까?
답은 공인 IP이다.
공인 IP는 IPv4의 특성상 부족하다고 했었다.
퍼블릭 서브넷으로만 VPC를 구성하고, 계속 공인 IP를 할당하다 보면 언젠간 부족할 것이다.
실제로 AWS는 계정당 공인 IP(Elastic IP)를 5개 까지만 부여한다.
프라이빗 서브넷에 속하는 개체들은 바로 IGW로 향하는것이 아닌
NAT Gateway로 향한다.
NAT Gateway는 사설 IP들을 하나의 공인 IP로 바꾸어주는 역할을 하는데 이는 밑에서 다시 다루겠다.
프라이빗 서브넷은 외부와 바로 통신할 수 없어(인바운드) 보안이라는 장점을 챙길 수 있다.
NAT Gateway
이 친구도 컴퓨터 네트워크 시간 때 보았었다.
NAT는 IP와 Port의 조합으로 사설 IP들이 외부와 통신할 수 있게 해준다.
예를 들어 NAT에 부여된 공인 IP가 1.1.1.1이라면, 1.1.1.1:80으로 들어오는 요청은 사설 대역에 있는
192.168.0.1:8080으로 보내고, 이 반대의 과정도 가능하다.
NAT를 통해서 공인 IP의 부족함을 해결할 수 있으며
일반적으로 가정이나 회사, 학교에서 사용하는 공유기에는 NAT 기능이 내장되어 있다.
따라서 Private Subnet은 NAT를 통해 외부 인터넷과 통신할 수 있다.
우리가 VPC를 구축하면서 생성하는 NAT Gateway는 퍼블릭 서브넷에 위치하여 공인 IP를 가질 수 있다.
Internet Gateway
인터넷 게이트웨이는 NAT와 비슷한 역할을 하지만 위치에 차이가 있다.
NAT는 퍼블릭 서브넷에 위치하지만, 인터넷 게이트웨이는 그보다 상위인 VPC 엔드포인트에 존재한다.
IGW는 VPC와 외부 인터넷의 통신을 담당하며, 공인 IP를 가지고 있다.
Flow를 보면 가장 끝단에 위치한것을 볼 수 있다.
Router
라우터는 네트워크 트래픽을 어떤 곳으로 보낼지를 결정한다.
이는 라우팅 테이블에 적힌 Rule을 따르며 AWS 콘솔을 통해 확인할 수 있다.
172.31.0.0/16에 해당하는 IP는 인터넷 게이트웨이로 바로 보내지 않고
local로 돌리는것을 보아 Private Subnet에 속한 사설 IP 대역임을 알 수 있다.
다시 말하면 Private Subnet의 라우팅 테이블 Rule은 NAT 게이트웨이로,
Public Subnet의 라우팅 테이블 Rule은 IGW로 설정되어 있다.
'Infra > AWS' 카테고리의 다른 글
[AWS] IAM과 Role, Policy (0) | 2023.07.28 |
---|---|
[AWS] ec2 하나의 인스턴스에서 여러 git repo에 접근 (0) | 2023.01.05 |