시작
새로운 프로젝트를 들어가며 AWS에 서비스, 개발 서버를 배포하기위해 aws의 인프라에 대해서 공부하게 되었다. 이에 대해 공유하고자 한다.
본 게시글에서는 어떻게 직접 구현하는지 보다는 여러가지 리소스에 대한 개념적인 내용에 대해서만 정리하도록 한다.
VPC (virtual private cloud)
VPC에 대해 알기 전 네트워크에 대해 알아야 한다.
네트워크란?
인프라 관리자가 주체가 되어 관리하는 장소이다. 네트워크 내의 기기는 서로 자유롭게 통신이 가능해야 하며 이런 네트워크를 우리는 LAN(local area network)라고 부른다.
VPC
VPC는 물리적인 기기를 이용하지 않고 가상의 네트워크를 구축하는 것이다. 사용자가 설정한 IP주소 범위 내에서 격리된 네트워크를 생성한다. VPC는 리소스를 담을 수 있는 큰 상자에 비유하면 좋다.
IP주소와 CIDE
IP주소는 네트워크 상의 기기가 통신할 때 도착지가 되는 정보이다.
CIDR는 IP주소가 관리하는 범위를 결정하는 방법의 하나이다. 일반적으로 IP주소는 범위가 넓은 편이 같은 네트워크 알에 많은 IP주소를 제공할 수 있다.
가용영역과 서브넷
가용영역이란?
물리적으로 분리된 데이터 센터(=한 공간)이다. VPC의 밖에는 리전이라는 국가단위 데이터센터가 있다. 이 리전마다 선택할 수 있는 가용영역이 다르다. 가용영역은 독립된 네트워크 연결성을 갖고있다. 따라서 고유한 IP주소 범위를 갖는다. 독립적이고 분리되어 있기에 한 가용영역이 다운 되어도(죽어도) 다른 가용 영역은 여전히 서비스를 제공한다.
서브넷이란?
서브넷은 가용영역 내에 생성된다. 앞서 VPC에서 IP주소는 도착지의 정보라고 하였다. 서브넷은 이 IP주소의 범위를 나누는 단위로, VPC의 IP주소 범위 내에서 고유한 IP주소 범위를 갖는다. IP주소를 나누는 이유는 다음과 같다.
역할 분리
외부에 공개하는 리소스(로드밸런서, DB서)의 여부를 구별한다.
리소스마다 담당하는 역할에 따라 분리한다. 각 리소스에 적용되어야 할 규칙을 개별적으로 할당하지 않고, 리소스가 포함된 그룹 전체에 대해 할당할 수 있도록 한다.
기기 분리 :
AWS안에서의 물리적인 이중화(다중화)를 구행한다.
가용영역을 구분(독립)하여 서브넷을 제공한다.
인터넷 게이트웨이
VPC에서 생성한 네트워크와 인터넷 사이의 통신을 가능하게 하는 것이다. 인터넷 게이트웨이가 없다면 인터넷과 VPC안의 리소스는 서로 통신 불가능하다. 인터넷에서는 public IP주소로 내부 인스턴스에 접근한다.
NAT (network address translation)
VPC에서 생성된 네트워크 안에 만들어진 리소스는 외부 네트워크와 직접 통신하므로 공개 IP(public IP)를 갖는다. 이는 인터넷에 직접 공개된다는 의미이고 인터넷 게이트웨이에서 설명한 역할이다. 하지만 private subnet에는 외부에서 직접 접근할 수 없어야 한다. 따라서 이 NAT는 인터넷과 직접 연결되는 부분, 예를들어 public subnet에 존재하며, private subnet은 인터넷과 연결되기 위해 public subnet에 존재하는 NAT를 경유하여 인터넷에 연결된다.
이때의 이점은 NAT를 경유하며 private subnet의 private IP주소가 public IP를 포함한 정보로 변환하기에 통신을 하는 외부에서는 변환된 주소를 얻기에 보안적인 측면이 강화된다.
라우팅 테이블
라우팅 테이블은 VPC내에서 패킷의 전송 경로를 결정하는 역할을 한다. 인터넷 게이트웨이를 통해 VPC 외부와의 통신을 설정하고, 라우팅 테이블을 통해 VPC 내부에서 리소스들 끼리 통신할 경로를 설정해주는 것이다. VPC 내부에서 통신할 때는 VPC 내부에서 자동으로 라우팅이 처리되지만 인터넷과 통신할 때는 라우팅 테이블에 경로를 명시하여야 한다.
여기서 이런 궁금증이 생길 수 있다.
Q. 인터넷과 통신하는 게이트웨이, NAT 설정을 했는데 왜 라우팅 테이블이 또 필요함?
A. 라우팅 테이블은 네트워크에서 패킷이 어떻게 전달되는지 결정하는 요소이다. 인터넷 게이트웨이, NAT는 네트워크 트래픽을 외부로부터 전송받기 위해 사용되지만, 게이트웨이에게 패킷을 어떻게 전달할지 결정하는 역할은 라우팅 테이블이 담당한다.
보안 그룹
VPC 리소스 보호를 위해 외부로부터의 접근에 제한을 걸 수 있다. 이때 필요한 것이 보안 그룹이다. 마치 가상 방화벽의 역할을 한다. 각 보안그룹은 특정 포트 및 프로토콜에 대한 액세스를 허용하거나 차단할 수 있는 규칙을 가지고 있다. 예를 들어, 웹 서버를 실행하는 인스턴스를 보안그룹으로 구성하면, HTTP (포트 80) 및 HTTPS (포트 443) 요청만을 수신할 수 있도록 규칙을 구성할 수 있다. 또한, SSH (포트 22)를 허용하여 원격으로 인스턴스에 액세스할 수 있다. 즉 보안그룹을 통해 필요한 포트와 프로토콜만 허용하고 나머지는 차단하여 보안 그룹을 강화한다.
로드 밸런서
스케일 아웃 (scale out) : 웹 서버 여러대를 준비해 성능을 높이는 방법
트래픽이 늘어나면 스케일 아웃을 통해 성능을 높일 수 있다. 웹 서버가 늘어나면서 트래픽을 분산해주기 위해 필요한 것이 로드 밸런서이다. 로드 밸런서는
- 요청 분산 : 인터넷에서 전송되는 요청을 여러 웹 서버에 균등하게 분산
- SSL 처리 : 데이터 암호화하는 SSL처리, HTTPS
- 부정 요청 대응 : 웹 서버가 예상치 못한 작동을 일으키는 부정 요청에 대한 방지
AWS ELB에는 내부적으로 ALB. NLB, CLB가 존재한다.
- ALB(Application Load Balancer) : HTTP, HTTPS를 이용한 접근을 분산하는데 최적화된 로드 밸런서. SSL 처리 수행 혹은 URL패턴 과 같은 복잡한 조건에서 분산 대상자를 바꾸는 등의 기능 제공.
- NLB(Network load balancer) : 기본적인 분산 처리, 다양한 통신 프로토콜에 대응하는 로드밸런서. 특히 실시간 게임 등의 양방향 통신의 소켓 통신 등을 분산시킬 때 사용.
- CLB(Classic load balancer) : ALB, NLB 등장 전 쓰이던것으로, 특별한 경우 아니면 쓰이지 않는다.
웹을 공개할때 보통 HTTP 80, HTTPS 443을 쓴다. 로드 밸런서가 이 설정을 수행하나 로드 밸런서 내부 웹 서버는 반드시 이 설정에 맞출 필요는 없다. 실제로는 HTTP(포트번호 1024이상)라는 조건을 이용해 로드밸런 서로부터 요청 받는다. 로드 밸런서는 공개한 프로토콜, 포트번호의 조합을 내부 웹 서버가 받는 프로토콜과 포트번호로 변환하는 기능을 제공한다. 이를 요청 라우팅이라고 한다. 관습적으로 사용하는 포트 번호가 있다. 자바기반 8080, 루비 기반 3000
'Infra' 카테고리의 다른 글
[Docker] compose, 개발과 운영 환경 (0) | 2023.07.31 |
---|---|
[Docker] 이미지와 volumn (0) | 2023.07.26 |
[Docker] docker 개념 잡기, 명령어 (0) | 2023.07.26 |