본문 바로가기
독서/AWS 구조와 서비스

6. 네트워크 용어 & VPC

by Thinking 2023. 12. 9.

 웹 서버는 어디에 존재하는 것일까? 웹 서버는 데이터 센터에 있을 수도 있고, AWS와 같은 클라우드 서비스에 있을 수도 있다. 웹 서버에 접근하기 위해서는 웹서버가 그곳에 있다는 특정 정보가 필요하다. 이것이 IP 주소다. 웹 사이트에 접속할 때는 이 IP 주소를 바탕으로 위치를 특정해 그곳에 있는 웹 서버에 접속한다. 일반적으로 IPv4가 표준으로 사용된다. 192.168.1.1 은 각각 0~256의 범위를 가지고 IPv4는 주소가 2^32개, IPv6는 2^128개 존재한다.

 

퍼블릭 IP 주소와 프라이빗 IP 주소

 IP주소는 2가지로 구분할 수 있다. 하나는 한국 또는 전 세계에서 '이 주소는 인터넷에서 이곳'이라고 특정할 수 있는 주소다. 이를 퍼블릭 IP주소 또는 글로벌 IP주소라고 한다. 다른 하나는 프라이빗 IP 주소다. 퍼블릭 IP 주소는 전세계에서 식별할 수 있는 주소지만, 프라이빗 주소는 닫힌 네트워크(근러기 통신-LAN) 내에서만 식별할 수 있는 IP 주소다.

CIDR 블록은 IP 주소를 이용해 네트워크 범위를 정의하는 것을 얘기한다. IP 주소를 나타내는 숫자열은 크게 네트워크 부분 호스트 부분으로 나눌 수 있다. 네트워크 부분은 문자 그대로 네트워크를 정의하고 호스트 부분은 그 네트워크 내의 호스트, 즉 안에서 접속할 수 있는 서버 등을 나타내는 부분이다.

 

172. 31. 0. 0 /16 이라면, '/16'을 서브넷 마스크라고 하며 IP주소를 사용해서 표기한다면

/16이면 상위 16비트가 네트워크 부분이다. 0이 호스트에 해당하며, /16의 경우 하위 16비트가 해당한다.

 

 

부하 분산을 위해 여러 서버에 접속을 분배

 많은 사용자가 사용하는 시스템을 구축한다면 부하 분산을 고려해야 한다. 시스템을 사용하는 사용자가 많아질수록 서버의 부담은 커진다. 서버 1대당 한 번에 처리할 수 있는 접속자 수는 정해져 있기 때문에 한번에 많은 사람이 몰리면 CPU나 메모리의 사용량이 증가해 서버가 느려지고 멈출 수 있다. 이렇게 부하를 분산시키기 위해서 일반적으로 로드 밸런서(Load Balncer)라는 장치를 사용한다.

 

라우팅 및 라우팅 테이블

 어떤 주소를 찾아가기 위해서는 그 주소까지의 경로를 알아야한다. 하지만 사용자는 이런 경로를 알 필요가 없다. 대신 라우터가 최적의 경로를 찾아서 경로를 결정하고 연결한다. 라우터가 IP 주소까지의 경로를 결정하는 것을 라우팅이라고 한다. 각 네트워크의 라우터가 목적지인 웹 서버의 IP 주소로 향하기 위한 최적의 경로를 선택하는데, 각 라우터는 소유한 경로 정보를 기반으로 목적지 IP 주소를 향해 이동해야 하는 네트워크를 결정한다.

 

 각 라우터는 소유한 경로 정보를 기반으로 목적지 IP 주소를 향해 이동해야 하는 네트워크를 결정한다. 이 경로 정보를 라우팅 테이블이라고 한다. 라우팅 테이블은 라우터가 소유한 네트워크의 지도와 같은 것이다. AWS에서 Amazon VPC의 라우팅 테이블이라는 기능이 이에 해당한다. 라우팅 테이블에는 인터넷이나 각 AWS 서비스에 어떤 엔드포인트를 경유할지와 같은 경로 정보를 관리할 수 있다.

 

 API가 두 시스템(어플리케이션)이 상호작용(소통) 할 수 있게 하는 프로토콜의 총집합이라면, ENDPOINT API가 서버에서 리소스에 접근할 수 있도록 가능하게 하는 URL이라 할 수 있겠다.

 

 

도메인 이름과 IP 주소를 연결하는 DNS

 일반적으로 어떤 웹 사이트에 접속하기 위해서는 'https://OO.com/'과 같은 URL을 사용한다. 이러한 'OO.com'을 도메인이라고 한다. 도메인은 점으로 연결된 문자열로 구성돼 있으며 기업 이름과 단체 이름을 표현하는 경우가 많다. 도메인 이름에는 IP 주소가 연결돼 있어 사용자는 이름만으로 사이트에 접속할 수 있다. DNS(Domain Name System)가 우리 대신 도메인 이름에 연결된 IP 주소를 찾아주기 때문이다. 이러한 DNS의 기능을 이름 해석이라고 한다.

 

 

Amazon VPC로 가상 네트워크 만들기

Amazon Virtual Private Cloud(VPC)는 AWS에서 생성할 수 있는 프라이빗 가상 네트워크 공간이다. 이 네트워크에 EC2와 같은 AWS 자원을 배치해 이용한다. 하나의 VPC를 논리적으로 나눠 분리할 수도 있고 여러 VPC를 연결할 수도 있다. 인터넷에서 공개하는 퍼블릭 VPC VPN(Virtual Private Network - 가상 사설 네트워크) 등을 이용해 접속하는 프라이빗 VPC도 구축할 수 있다.

 

 온프레미스로 네트워크 환경을 구축하는 경우 데이터 센터, 네트워크 기기나 서버 기기, 인터넷 회선 등 준비해야 할 것이 많아 준비 기간과 초기비용이 발생한다. 반면 AWS에서 VPC를 네트워크 환경으로 준비하는 경우 몇 가지 작업을 수행하면 몇 분안에 네트워크를 구축할 수 있다. 

                                  (10.0.0.0/16)                                                                         (10.0.0.0/28)

EX) 00001010 00000000 00000000 00000000              /         00001010 00000000 00000000 00000000

     [        네트워크 주소      ]   [         호스트 주소         ]                       [                    네트워크 주소                        ][호스트 주소]

 VPC를 만들 때 CIDR 블록(IP 주소 범위)를 지정하고, 지정한 CIDR 블록 네트워크를 확보한다. 예로 '10.0.0.0/16'을 지정하면 65,536개 IP주소를, '10.0.0.0/28'을 지정하면 16개의 IP주소를 사용할 수 있다.

 

 일반적으로 VPC 프라이빗 IP 주소를 사용한다. AWS 권고사항이며, 임의의 퍼블릭 IP 범위내에서 CIDR 블록을 지정할 수 있지만, 외부 퍼블릭 IP와 겹치면 통신할 수 없으므로 기본적으로 프라이빗 IP 주소 공간을 CIDR로 설정하는 것이 좋다. 프라이빗 IP주소의 범위라면 기본적으로 자유롭게 지정해도 되지만, 온프레미스 환경이나 다른 VPC 등 외부 네트워크와의 접속을 검토하고 있다면 접속할 네트워크와 VPC의 CIDR 블록이 중복되지 않게 주의해야 한다. CIDR 블록을 설정에 따라 확보할 수 있는 호스트 주소의 수가 달라지는데, 호스트 주소는 여유롭게 갖도록 가능한 많이 확보해 두는 것이 좋다. 

 

 

Amazon VPC의 주요 기능 사용법

 라우팅 테이블은 네트워크의 경로 정보다. 온프레미스 환경에서는 라우터와 같은 네트워크를 기기에 라우팅 테이블을 설정하지만, AWS는 VPC 라우팅 테이블을 생성하고 각 서브넷에 사용할 라우팅 테이블을 지정한다. VPC를 통해 흐르는 패킷은 이 라우팅 테이블의 정보를 기반으로 경로를 결정한다. VPC를 만들 때 기본적으로 하나의 라우팅 테이블이 만들어진다. 기본 상태에서는 VPC 내의 라우팅 정보만 있으므로 VPC 외부로는 통신할 수 없다.

 

 외부와 통신하려는 경우에는 외부 라우팅 정보를 추가해야 한다. 예로 대상 0.0.0.0/0 에 대해 인터넷 게이트웨이로 라우팅 테이블에 등록하면 인터넷 게이트 웨이를 통해 인터넷과 통신할 수 있다.

 

 

인터넷 게이트웨이

 인터넷 게이트웨이는 서브넷 안에 있는 EC2와 같은 자원이 인터넷과 통신할 수 있게 하기 위한 기능이다. 인터넷 게이트웨이를 생성하고 서브넷의 라우팅 테이블에 설정하면 인터넷과 VPC가 서로 통신할 수 있게 된다. 인터넷 게이트웨이로 가는 경로가 설정된 서브넷을 퍼블릭 서브넷이라고 한다. 반대로 게이트 웨이를 통해 인터넷과 통신할 수 없는 서브넷을 프라이빗 서브넷이라고 한다.

 

 EC2의 경우 퍼블릭 IP 또는 Elastic IP를 부여해 인터넷과 EC2가 통신할 수 있다. 퍼블릭 IP와 Elastic IP는 모두 EC2에 설정할 수 있는 퍼블릭 IP 주소다. 퍼블릭 IP는 자동으로 부여되는 IP 주소로 재부팅할 때마다 변경된다. Elastic IP는 정적 IP라고도 하며 영구적으로 사용할 수 있는 IP 주소다. 방화벽 등에서 IP 주소를 고정해 통신을 허가해야 하는 경우 Elastic IP를 사용한다. 퍼블릭 IP는 무료로 사용할 수 있지만, Elastic IP는 사용하지 않을 때 약간의 요금이 부과된다.

 

 프라이빗 서브넷에 있는 EC2와 같은 자원은 일반적으로 인터넷과 통신할 수 없다. 하지만 인터넷에 있는 소프트웨어 패키지의 다운로드와 같이 VPC내에서 인터넷과 통신해야 하는 경우가 있다. 이때 사용할 수 있는 것이 NAT 게이트웨이다. 인터넷 게이트 웨이와 달리 인터넷에서 VPC로 통신할 수 없는 단방향 통신이므로 AWS 외부와 더 안전하게 통신할 수 있다. NAT은 Network Address Translation의 약자로 프라이빗 IP 주소를 퍼블릭 IP로 변환하는 것을 의미한다. NAT 게이트웨이는 프라이빗 서브넷의 IP 주소를 NAT 게이트웨이의 퍼블릭 IP로 변환해 인터넷과 통신할 수 있게 해준다.

 

NAT 게이트웨이를 이용해 통신하기 위해서는 외부 통신을 수행하는 서브넷의 라우팅 테이블에 경로 정보(라우팅 정보)를 등록해야 한다.

 

 

VPC 접근 제어 및 통신 로그 확인

 VPC에는 서브넷 단위로 접근 제어를 설정할 수 있는 네트워크 접근 제어 목록(이후 네트워크 ACL)이라는 기능이 있다. 3장에서 소개한 보안 그룹과 조합해 접근 제어 설정이 가능하다. 기본 설정 상태에서 네트워크 ACL은 모든 통신을 허용한다. 서브넷 전체에서 네트워크 접근을 허용하거나 거부하려는 경우 보안 그룹에서 추가 설정을 해 더욱 안전한 네트워크를 구축할 수 있다. 네트워크 ACL이나 보안 그룹에서 허용되거나 거부된 통신 상황은 VPC 흐름 로그라고 하는 VPC내의 IP 트래픽 상황을 로그로 저장할 수 있는 기능이 있다.

 

 로그는 AWS 모니터링 서비스인 CloudWatch Logs 또는 S3에 저장할 수 있다. CloudWatch Logs에 저장하면 로그 내용에 따라 메일 알림을 보낼 수 있게 구성해 감시할 수 있다. 요금은 S3가 저렴하다. EC2와 VPC의 자원은 IP 주소마다 네트워크 인터페이스(ENI, Elastic Network Interface)를 가진다. 로그는 네트워크 인터페이스 별로 출력되며 Elastic Load Balancing, RDS, Redshift와 같이 VPC에서 실행되는 모든 서비스 로그도 출력된다. 도착지/출발지의 IP 주소와 포트, 전송 허용/거부 등의 정보가 포함된다.

 

 

VPC에서 VPC, 외부 서비스, 온프레미스와의 연결

VPC와 다른 VPC 외 다른 AWS 서비스와 연결하는 기능을 소개한다. 첫 번째는 VPC 피어링이다. VPC 피어링을 사용해 서로 다른 두 개의 VPC를 연결해 통신할 수 있다. 피어링은 두 개의 VPC 간의 수행되기 때문에 세 개의 VPC가 서로 통신하는 경우 각 VPC끼리 따로 피어링을 구성해야 한다. 연결된 VPC의 CIDR 블록은 겹치면 안되므로 주의해야 한다.

 

 두 번째는 AWS Transit Gateway다. Transit Gateway를 사용하면 하나의 중앙 허브에서 VPC 연결을 관리할 수 있다. VPC과 같이 온프레미스 환경과의 연결에도 사용할 수 있으므로 AWS 네트워크 연결을 중앙에서 관리할 수 있다. 많은 VPC를 사용해야 한다면 Transit Gateway를 사용해 중앙 관리를 하는 것이 좋다.

 

S3 등 VPC 외부에서 동작하는 AWS 서비스는 보통 인터넷을 거쳐 통신하지만 VPC 엔트포인트를 이용하면 프라이빗 네트워크로 통신하게 할 수 있다. VPC 엔트포인트를 설정한 VPC는 VPC 엔트포인트를 통해 S3와 같은 다른 AWS 서비스에 직접 접근할 수 있다. S3나 DynamoDB에서 사용하는 VPC 엔트포인트를 게이트웨이 엔드포인트라고 하며, AWS 서비스와의 통신은 퍼블릭 IP를 이용한다. 인터페이스 엔드포인트는 AWS PrivateLink라는 기능을 사용해 서브넷에 서비스 접속

 

 

VPC 구성

 AWS 서비스는 실행 위치에 따라 위 그림 3가지 유형으로 나뉜다. AZ 서비스는 VPC 안에서, 그 외의 서비스는 VPC 밖에서 실행된다.

 

[ 예시 1 - Web + DB + Amazon CloudFront ] 

온프레미스 환경의 웹 서버, DB 서버 환경을 AWS로 마이크레이션할 때 자주 볼 수 있는 구성이다. 하나의 리전에 프라이빗 네트워크로 VPC를 생성한 다음, 웹 서버(EC2) 및 DB 서버와 같은 자원을 배치한다. 서버 역할별로 서브넷을 생성하고 멀티 AZ 대응을 위해 역할별로 2개의 서브넷을 준비한다. VPC 외부로부터 통신을 수신하는 Application Load Balancer만 퍼블릭 서브넷에 배치한다. 다른 AWS 서비스를 VPC 내에서 사용하는 경우에도 역할당 2개 또는 3개의 서브넷을 준비한다. 또한 VPC 외부에 CloudFront를 이용해서 웹 콘텐츠를 캐싱해 사용자가 콘텐츠에 빠르게 접근할 수 있게 했다.

 

[ 예시 2 - VPC 엔드포인트를 사용하는 S3 연결 ]

 예시 1에서 VPC 엔드포인트와 S3 버킷을 추가한 구성이다. 데이터베이스에서 취득한 데이터를 S3에 저장하거나 S3에서 얻은 데이터를 다른 데이터베이스로 가져오는 프로세스를 가정한다.

 

[ 예시 3 - 온프레미스 환경에서 프라이빗 연결 ]

 Direct Connect와 Site-to-Site VPN을 모두 사용해 온프레미스 환경과 프라이빗 연결을 하는 구성이다. 온프레미스 환경 전용 프라이빗 네트워크다. VPC와 온프레미스 환경만 통신할 수 있고, 인터넷과 소통하지 않는 구성이라는 것이 큰 특징이다.

 

 

ELB로 부하를 분산시켜 가용성 향상

 ELB란 (Elastic Load Balancer) AWS에서 제공하는 로드 밸런서 서비스다. 로드 밸런서의 주요 기능은 응용 프로그램으로 트래픽을 로드 밸런싱 하는 것이다. 트래픽을 보내는 서버가 멈추지 않고, 실행 중인지 정기적으로 확인해 가용성을 확인할 수 있다.

 

부하 분산

트래픽을 여러 대상으로 전달하도록 지정하면 사용자의 접속을 자동으로 분산할 수 있다. 이렇게 설정하면 대량 접속이 발생하더라도 부하를 나눌 수 있다. 또한 각 대상을 다른 AZ에 배치할 수 있으므로 지리적으로 분산할 수 있어 재해가 발생했을 때의 가용성도 향상시킬 수 있다. ELB 자체는 부하 상황에 따라 자동으로 스케일 되므로 사용자는 ELB 성능 저하를 신경 쓸 필요없다.

 

대상 모니터링

ELB는 항상 대상에 대한 연결과 상태를 감시하고 있다. 이를 통해 요청 추적이나 CloudWatch 지표를 취득할 수 있으므로 언제든지 이를 확인할 수 있다. 감시를 통해 비정상적인 동작을 감지하면 자동으로 분리해 안정적인 작동을 유지할 수 있다.

 

보안 기능

ELB는 보안 그룹을 비롯한 AWS의 기본적인 보안 서비스를 적용할 수 있고 SSL/TLS 서버 인증서를 설정해 암호화 통신을 수행할 수 있다. NLB(Network Load Balancer)는 보안 그룹을 설정할 수 없다.

 

AWS에서 제공하는 ELB 유형은 크게 4가지가 있다.

1) Application Load Balancer(ALB) - http, https 트래픽 부하 분산이 가능, 레이어 7로 동작하여 마이크로서비스나 컨테이너 등 다양한 응용 프로그램에도 대응이 가능하다.

2) Network Load Balancer(NLB) - 레이어 4에서 동작하여 HTTP/HTTPS 외 TCP, UDP, TLS 트래픽 부하 분산이 가능하다.

3) Classic Load Balancer(CLB)

4) Gateway Load Balancer(GWLB)

'독서 > AWS 구조와 서비스' 카테고리의 다른 글

5. 스토리지 서비스  (0) 2023.12.08
4. 컨테이너의 구조와 특징 이해  (0) 2023.12.08
3. 컴퓨팅 서비스(하)  (0) 2023.12.06
2. 컴퓨팅 서비스(상)  (1) 2023.12.05
1. AWS 기초지식  (1) 2023.12.05