본문 바로가기
개발/Infra, AWS

NCP로 난생 처음 서버 배포하기-1

by mixxeo(믹서) 2025. 3. 16.

서론

같이 일하는 동료분께서 너무 좋은 아이디어를 가져와주셔서, 비사이드에서 진행하는 온라인 해커톤 포텐데이에 참가하며 사이드프로젝트를 진행하고있다. 회사에서 근무하며 자동배포 시스템이 이미 잘 되어있는 프로젝트에 참여하여 작업한 결과물을 배포한 적은 있지만, 부끄럽게도 직접 서버를 구성하고 서비스를 배포해본 경험이 아직 없었다.

포텐데이에 참여하면 네이버 플라우드 플랫폼(Naver Cloud Platform, NCP)의 크레딧을 받을 수 있는데, 이 크레딧을 활용하여 NCP에서 서버를 구성하고 서비스를 배포하는 경험을 정리해보려고 한다.

첫번째 글에서는 네트워크를 구성하고, 보안 설정을 하고, 네트워크에 서버를 배치시키는 과정에 대해 정리할 것이다.

 

 

 

사전 지식

1. VPC (Virtual Private Cloud)

VPC는 논리적으로 격리된 네트워크 환경을 제공하는 가상 네트워크이다. 격리된 네트워크 환경을 제공하기 때문에 클라우드 내에서 안전한 네트워크 운영이 가능하다. VPC를 생성할 때 VPC 내부에서 사용할 Private IP 주소의 범위(네트워크 크기)를 설정한다. (ex, 10.0.0.0/16)

이는 VPC 안에서 사용할 Private IP의 개수를 정하는 것으로, 내부에서 운용할 리소스의 개수를 고려하여 범위를 정하면된다.

 

 

NCP에도 VPC 서비스가 있고, VPC와 Subnet, ACL 등을 설정 및 구성할 수 있다.

💡 Private IP
- 내부 네트워크에서만 사용되는 IP 주소
- 인터넷과 직접 통신할 수 없고 네트워크 내에서만 유효한 IP 주소
- EC2같은 리소스들이 Private IP를 사용해 서로 통신하도록 한다.

 

2. 서브넷 (Subnet)

서브넷은 VPC 내부에서 IP 주소를 나누어 분할한 네트워크의 단위이다. 즉, VPC 내부를 작은 네트워크 여러개로 나눠 네트워크를 효율적으로 관리하는 역할을 한다. 서브넷은 퍼블릭 서브넷과 프라이빗 서브넷으로 나뉘어진다.

 

[퍼블릭 서브넷]

  • 인터넷과 연결할 수 있는 서브넷으로, 인터넷 게이트웨이를 통해 인터넷과 통신한다.
  • 웹 서버, 로드밸런서 같은 외부 연결이 필요한 리소스를 배치한다.

 

[프라이빗 서브넷]

  • 내부 네트워크용으로 인터넷과 직접 연결되지 않는 서브넷이다.
  • 데이터베이스, 내부 API 서버, Redis 캐시 등 보안이 중요한 리소스를 배치한다.

 

예를 들어, 10.0.0.0/16 범위로 구성한 VPC의 서브넷을 아래와 같이 구성할 수 있다.

  • 10.0.1.0/24 웹 서버용 퍼블릭 서브넷
  • 10.0.2.0/24 데이터베이스 서버용 프라이빗 서브넷

 

3. ACL (Access Control List)

ACL은 서브넷 수준에서 동작하는 네트워크 방화벽이다. 즉, 서브넷에 들어오거나 나가는 트래픽을 필터링하는 기능을 하며 서브넷 내부에 배치되어있는 리소스들에 모두 영향을 미친다. ACL은 다음과 같은 특징이 있다.

  • 인바운드, 아웃바운드 트래픽을 모두 제어할 수 있다.
  • Stateless(요청과 응답이 독립적) 하기 때문에, 인바운드 트래픽을 허용하더라도 아웃바운드 트래픽도 따로 허용해야한다.

 

예를 들어, 웹 서버를 배치한 서브넷의 ACL 인바운드 룰을 다음과 같이 설정할 수 있다.

  • 인바운드 TCP 22 (SSH) 192.168.0.0/16(내 IP만) 허용
  • 인바운드 HTTP 80 (HTTP) 0.0.0.0/0(모든 IP) 허용
  • 인바운드 HTTP 443 (HTTPS) 0.0.0.0/0 (모든 IP) 허용

 

4. ACG (Access Control Group)

ACL의 서브넷의 방화벽이었다면, ACG는 개별 서버 인스턴스 단위에서 적용되는 방화벽이다. 즉, 각 서버에서 허용할 트래픽을 설정하는 기능을 한다. 서버 단위에서 적용하기 때문에 같은 서브넷에 있더라도 개별 서버마다 서로 다른 ACG를 설정할 수 있다. ACG는 다음과 같은 특징이 있다.

  • 인바운드 트래픽만 제어 가능하다.
  • Stateful 하기 때문에, 요청이 허용되면 응답도 자동 허용된다.

 

예를 들어, 웹 서버 인스턴스의 ACG 룰을 다음과 같이 설정할 수 있다.

  • 인바운드 TCP 22 (SSH) 192.168.0.0/16(내 IP만) 허용
  • 인바운드 HTTP 80 (HTTP) 0.0.0.0/0(모든 IP) 허용
  • 인바운드 HTTP 443 (HTTPS) 0.0.0.0/0 (모든 IP) 허용

그리고 웹 서버를 서브넷 내에 배치하고 SSH 통신을 해야한다면, 당연히 ACL과 ACG 모두에서 TCP 22 인바운드를 허용해야 한다.

 

 

 

서버 구성하기

서버 구성에 필요한 사전 지식을 정리했으니, 네트워크와 보안 규칙을 구성하고 웹 서버를 실행할 서버 인스턴스를 생성하는 과정을 진행한다.

* 리소스 이름에 등장하는 waa는 사이드 프로젝트 서비스의 이름입니다.

 

1. VPC 생성

 

2. ACL 생성 및 룰 설정

 

웹 서버가 HTTP(TCP 80)와 SSH(TCP 22) 트래픽을 받을 수 있도록 인바운드 룰을 설정했다.

 

3. ACG 생성

 

ACG 인바운드 룰도 ACL과 마찬가지로 HTTP, SSH 트래픽을 받을 수 있도록 추가했다.

 

4. VPC 내 퍼블릭 서브넷 생성

 

일반적인 운영 환경이라면, 보안을 위해 Bastion Server를 두고 웹 서버를 프라이빗 서브넷에 배치할 것이다.

하지만 사이드 프로젝트 환경이고 SSH 접속을 용이하게 하기위해 퍼블릭 서브넷에 배치하고, ACL에서 내 IP만 SSH 접속이 가능하도록 허용했다.

 

5. 서버 인스턴스 생성

 

서버 스펙은 아래와 같이 선택했다.

[Standard]
- Ubuntu 20.04
- vCPU 2개, 메모리 8GB, SSD 50GB

앞서 생성한 VPC의 퍼블릭 서브넷에 인스턴스를 배치시키고 ACG를 설정한다.

 

 

 

마무리

이번 글에서는 NCP에서 서버 인스턴스를 띄우기 위해

서버를 배치할 네트워크인 VPC와 서브넷, 보안 규칙인 ACL와 ACL의 개념을 간단히 정리하고 NCP 에서 실제로 이를 생성하는 과정을 살펴봤다. 다음 글에서는 서버에 로드밸런서를 연결하고 IP 및 도메인을 설정하는 과정에 대해 정리할 예정이다.

'개발 > Infra, AWS' 카테고리의 다른 글

[AWS] CloudFormation Lamda UPDATE_FAILED 에러  (0) 2024.05.13