VPC는 클라우드 컴퓨팅 환경에서 가상 네트워크를 구축하는 기술로, 논리적으로 격리된 네트워크 환경을 제공하여 사용자가 가상 서버, 데이터베이스, 그리고 다양한 클라우드 리소스를 안전하게 배치하고 관리할 수 있도록 합니다. 운이 좋게도 최근 진행한 프로젝트에서 NCloud VPC를 활용하여 서버를 구축하는 기회가 있었습니다. 이를 통해 공부한 것들과 마주한 문제들을 이번 포스트에 정리하고자 합니다.



VPC 구조


VPC는 사용자의 클라우드 환경으로 격리된 네트워크를 말합니다. VPC는 인터넷 게이트 웨이를 통해 외부와 통신합니다. 그리고 VPC는 여러 개의 서브넷을 가질 수 있으며, VPC는 최소 하나 이상의 라우팅 테이블을 가집니다. 하나의 서브넷에는 여러 개의 호스트를 만들 수 있습니다.

  • NACL과 ACG

    NACLACG은 접근 제어 목록으로 외부와 통신 Inbound, outbound 제약을 설정할 수 있습니다. 이때, NACL은 서브넷 단위의 접근 제어이고 AGC는 서버 단위의 접근 제어입니다. 만약 하나의 서브넷 안에 여러 대의 서버가 있고, 해당 서브넷은 A라는 접근 제어로 설정되어 있다면, 해당 서브넷에 생성한 서버는 모두 A의 접근 제어에 걸립니다. ACG는 서버 단위로 좀 더 세세한 접근 제어를 설정할 수 있습니다.


  • Inbound와 outbound

    인바운드와 아웃바운드 기준은 요청하는 방향입니다. 예를 들어, 외부에서 서버로 요청이 들어온다면 인바운드 제약 조건에 걸리게 되고, 서버에서 외부로 요청을 한다면 아웃바운드 제약 조건에 걸리게 됩니다.



Public 및 Private 서브넷


Public 서브넷은 외부에서 접근 가능한 서브넷으로, 주로 Internet Gateway를 통해 외부와 통신합니다. Public 서브넷에 위치한 서버는 공인 IP를 할당 받을 수 있으며, 해당 공인 IP를 통해 외부에서 접근할 수 있습니다. 반면, Private 서브넷은 외부에서의 접근이 차단되어 있어 공인 IP를 할당받을 수 없습니다. Private 서브넷은 inbound 뿐만 아니라 outbound에 대해서도 차단되어 있기 때문에 일반적으로 외부 패키지나 모듈을 가져올 수 없습니다. Outbound 트래픽을 허용하려면, NAT Gateway를 생성하고 라우팅 테이블에 설정하면 됩니다. 중요한 점은 NAT Gateway를 설정했다 하더라도 inbound 트래픽은 허용되지 않습니다.



서버 구축 시 만났던 문제



  • 문제 상황

    서버 구축 시 public 서브넷에 app 서버를 만들고, 보안성을 높이고자 외부에서 접근할 수 없도록 만들기 위해 private 서브넷에 DB 서버를 만들 계획 하지만, DB 환경을 구축하기 위해서는 DB 서버에 접속했어야 했는데 Private 서브넷에 생성된 서버라 ssh 접속은 불가능

  • 해결 방법 1

    NCloud SSL VPN 서비스를 이용해서 local PC를 마치 VPC 네트워크 내에 있는 서버로 만드는 방법 → 하지만 금전적인 문제가 있었기에, 해당 방법 사용x

  • 해결 방법 2

    직접 해보지 않았지만 NCloud 서버 가이드에서 확인한 결과 1개 이상의 NIC을 할당 받을 수 있음 → 새로운 NIC을 할당 받아 public 서브넷 공인 IP를 매핑시켜 외부에서 접속

  • 해결 방법 3

    해결 방법 2는 사실 public 서브넷에 DB 서버를 구축하는 것과 다름이 없었기 때문에 해결 방법 2를 사용x → public 서브넷에 DB 서버를 만들고 ACG 제약을 app 서버에 대한 인바운드만 허용하고 app 서버에서는 사설 IP주소로만 DB 서버에 접속