퀴즈 플랫폼 서비스를 만들기 위해 인프라 구축의 전반적인 흐름을 파악하고자 합니다. 현재 목표는 웹 서버와 DB 서버를 구축하고 배포하는 것입니다. 또한, 서버의 보안을 강화하고 네트워크 제어를 최적화하는 것에도 중점을 두고 있습니다.
먼저 저희 서버들 간의 원활한 통신을 위해 독립적인 가상 네트워크 환경이 필요합니다. 이를 위해 클라우드 서비스에서 제공하는 VPC(Virtual Private Cloud)를 활용하려고 합니다.
출처: https://medium.com/harrythegreat/aws-가장쉽게-vpc-개념잡기-71eef95a7098
VPC는 클라우드 내에서 사용자가 독립적으로 제어할 수 있는 네트워크 공간입니다. vpc는 사설 IP를 가지는데 이 사설 IP를 활용하여 가상 네트워크에서 서버끼리 원활하게 통신을 할 수 있습니다.
VPC는 사설 IP를 적절히 활용하여 외부와 통신할 수 있는 환경과 내부에서만 통신할 수 있는 환경으로 네트워크를 분리할 수 있습니다. 외부와 통신할 수 있는 환경을 퍼블릭 서브넷이라고 하고, VPC 내부 네트워크에서만 통신하도록 설정된 환경을 프라이빗 서브넷이라고 합니다.
퍼블릭 서브넷에는 퍼블릭 IP가 할당된 인스턴스를 배치하여, 인터넷 게이트웨이를 통해 외부와 통신할 수 있도록 합니다. 프라이빗 서브넷에 위치한 인스턴스들은 퍼블릭 IP 없이 사설 IP만을 가지도록 하여 외부에서 접근이 불가능합니다. 이를 통해 VPC 내부에서만 통신이 필요한 데이터베이스를 안전하게 활용할 수 있습니다.
https://medium.com/harrythegreat/aws-가장쉽게-vpc-개념잡기-71eef95a7098
subnet이란 네트워크를 여러 개의 작은 네트워크로 나누어 관리하기 위해서 생긴 개념입니다.
저희가 vpc를 통해 10.0.0.0/16
범위의 네트워크를 할당 받았다고 가정하겠습니다. 여기서 IP 범위를 나누어 퍼블릿 서브넷(10.0.1.0/24
)과 프라이빗 서브넷(10.0.2.0/24
)으로 나누어 관리할 수 있습니다. 서브넷을 분리하여 서브넷 별로 외부와의 통신을 제어할 수 있습니다.
저희는 퍼블릭 서브넷에 외부와 통신이 필요한 웹 서버를 배치하고, 프라이빗 서브넷에는 외부와의 통신이 불필요한 Redis와 MySQL 같은 데이터베이스 서버를 배치할 예정입니다.
서브넷을 분리했더라도, 각 서브넷에는 네트워크 트래픽의 경로를 결정하는 라우팅 테이블이 필요합니다. 라우팅 테이블은 서브넷 내 리소스들이 어디로 통신할 수 있는지를 규정하는 라우팅 규칙을 정의합니다. 서브넷은 각자 고유한 라우팅 테이블을 가질 수 있으며, 이를 통해 내부 통신과 외부 통신을 세부적으로 제어할 수 있습니다.