이번 시간에서는 클라우드 네트워크 환경에 Linux 기반의 가상 서버에 Apache 웹 서버, MySQL 데이터 베이스, PHP 어플리케이션을 구성(LAMP)하고 Application Load Balancer를 이용하여 이중화된 네트워크를 구성합니다.
사용하는 AWS 서비스는 다음과 같습니다.
- Amzaon VPC(VPC, Subnet, Internet Gateway, Route Table, NAT Gateway)
- Amazon EC2
- Amazon EBS
- Amazon EFS
- Elastic Load Balancer - Application Load Balancer
웹서버와 웹서버를 운영하기 위한 네트워크 환경까지 모두 구성하므로 사용하는 서비스가 많습니다.
최종적으로 구축해야할 아키텍처는 위와 같습니다.
실습을 하기 전에 모르는 내용이 많아서 내용을 정리해보고 실습을 하도록 하겠습니다.
VPN은 한국어로 "가상 사설망"이라고 합니다. 앞에 가상이라는 단어에서 알 수 있듯 실제 사설망이 아닌 가상의 사설망입니다. 만약 회사의 네트워크가 구성되어있고 보안상의 이유로 직원간 네트워크를 분리하고 싶다면 기존 인터넷 선공사도 다시해야하고 건물의 내부선을 다 뜯어고쳐야하며 다시 전용선을 깔아주어야 합니다. 이를 위해 가상의 망 VPN을 사용합니다. VPN은 네트워크 A와 네트워크 B가 실제로 같은 네트워크상에 있지만 논리적으로 다른 네트워크인 것 처럼 동작합니다. 이를 우리는 가상 사설망이라고 부릅니다.
VPC가 없다면 EC2인스턴스들이 서로 거미줄처럼 연결되고 인터넷과 연결됩니다. 이런 구조는 시스템의 복잡도를 엄청나게 끌어올릴 뿐 아니라 하나의 인스턴스만 추가되어도 모든 인스턴스를 수정해야하는 불편함이 생깁니다.
VPC를 적용하면 위 그림과 같이 VPC별로 네트워크를 구성할 수 있고 각각의 VPC에 따라 다르게 네트워크 설정이 가능합니다. 또한 각각의 VPC는 완전히 독립된 네트워크처럼 작동하게 됩니다.
서브넷(Subnet)은 VPC를 쪼개는 과정입니다. 서브넷은 VPC안에 있는 VPC보다 더 작은 단위이기 때문에 연히 서브넷 마스크가 더 높게 되고 아이피 범위가 더 작은 값을 갖게됩니다. 서브넷을 나누는 이유는 더 많은 네트워크망을 만들기 위해서입니다.
네트워크 요청이 발생하면 데이터는 라우터로 향합니다. 라우터란 목적지이고 라우팅 테이블은 목적지에 대한 이정표입니다. 데이터는 라우터로 향하게 되며 네트워크 요청은 각각 정의된 라우팅 테이블에 따라 작동합니다. 서브넷의 라우팅 테이블은 VPC안의 네트워크 범위를 갖는 네트워크 요청은 로컬에서 찾도록 되어있습니다. 하지만 그 이외 외부로 통하는 트래픽을 처리할 수 없죠. 이때 인터넷 게이트 웨이를 사용합니다.
인터넷 게이트웨이는 VPC와 인터넷을 연결해주는 하나의 관문입니다. 인터넷과 연결된 서브넷을 퍼블릭 서브넷, 인터넷과 연결되지 않은 서브넷을 프라이빗 서브넷이라고 합니다.
Bastion은 내부 서버나 중요 리소스를 보호하기 위해 접근이 허락된 호스트이며 퍼블릭 환경에서 접근 가능한 네트워크위에 구축됩니다. 배스천 호스트의 정보는 일반 유저들에게 공개하지 않으며 접근 또한 제한된 리소스로부터의 요청만 허용합니다.
마지막으로 NAT게이트웨이를 이용하면 인터넷 게이트웨이가 연결되지 않은 인스턴스들이 특정 CIDR에 대해서 인터넷 엑세스를 할 수 있습니다.
이제 실습을 진행해 보겠습니다.
우선 기본 네트워크 환경을 구성해 주어야 합니다.(VPC/Subnet/Internet Gateway/Route Table)
- VPC 생성
- Subnet 생성
- Internet Gateway 생성
- Route Table 생성 및 Route 설정
AWS는 불특정 다수의 고객이 사용하는 공용의 공간이기 때문에 내가 사용하는 네트워크는 다른사람들과 사용하는 네트워크와는 분리되어 나눠지게 되는데 이렇게 나누어진 네트워크가 VPC입니다. VPC를 나눠놓은 하위 네트워크가 Subnet입니다.
참고
'개발이야기' 카테고리의 다른 글
객체지향의 사실과 오해 2장 (0) | 2022.06.21 |
---|---|
객체지향의 사실과 오해 1장 (0) | 2022.06.20 |
서버리스 정적 웹 사이트 호스팅 및 성능 가속화 (0) | 2022.06.13 |
Agile Development Principle (0) | 2022.05.17 |
Component Driven Development (CDD) (0) | 2022.05.13 |