무료로 Node.js 백엔드 배포하기
애플리케이션 백엔드를 배포하면 의도한 사용자가 애플리케이션에 액세스할 수 있습니다. 하지만 적절한 지식과 도구가 없으면 로컬 호스트에서 클라우드로의 전환이 어려울 수 있습니다.
이 글에서는 번거로운 결제 없이 플랫폼을 먼저 살펴볼 수 있는 무료 티어 또는 무료 크레딧을 제공하는 다양한 플랫폼에 Node.js 백엔드를 배포하는 방법에 대해 알아봅니다.
Contents
1. Back4app 컨테이너
Back4app은 직관적인 UI, 전용 CLI 도구, AI 에이전트를 통해 다양한 스택의 웹 애플리케이션을 생성하고 호스팅할 수 있는 서비스형 플랫폼(PaaS) 클라우드 플랫폼입니다.
이 플랫폼은 Back4app 컨테이너로 알려진 서비스형 컨테이너(CaaS) 플랫폼을 비롯한 다양한 서비스를 제공합니다.
Back4app 컨테이너는 Back4app에서 제공하는 CaaS 서비스로, 도커 컨테이너를 사용하여 웹앱을 관리하고 배포할 수 있습니다.
Back4app 컨테이너는 병목 현상을 파악하고 애플리케이션 성능을 최적화하는 데 도움이 되는 CPU, RAM, Bandwith 및 애플리케이션 로그와 같은 중요한 메트릭이 포함된 실시간 애플리케이션 모니터링을 제공합니다.
또한 업데이트 시 다운타임이 전혀 없는 자동 배포를 제공합니다. 새 커밋을 배포하거나 컨테이너 구성을 변경할 때 새 컨테이너가 작동할 준비가 되어 있는지 확인하여 배포 중 서비스 중단을 방지합니다.
Back4app 컨테이너를 사용한 배포는 앱의 GitHub 리포지토리(도커파일 포함)를 Back4app Github 앱에 연결하고 환경 변수를 추가한 다음 배포 버튼을 클릭하는 간단한 프로세스입니다.
Back4app 컨테이너에 Node.js 백엔드를 배포하는 방법은 무엇인가요?
Back4app 컨테이너에 Node.js 애플리케이션을 배포하려면 다음이 필요합니다.
- Back4app 계정이 없는 경우 무료로 가입할 수 있습니다.
- GitHub 계정에 설치된 Back4App 컨테이너 GitHub 앱입니다.
Back4app 계정에 로그인하고 GitHub 계정에 GitHub 앱을 설치한 후 배포하려는 리포지토리에 대한 액세스 권한을 Back4app 앱에 부여합니다.
리포지토리에 Docker파일이 포함되어 있는지 확인합니다. 다음은 Node.js 앱에 사용할 수 있는 샘플 Docker파일입니다:
# Specify base image
FROM node:18-alpine
# Specify working directory
WORKDIR /app
# Copy package.json and package-lock.json
COPY package*.json ./
# Install dependencies
RUN npm install
# Copy source code
COPY . .
# Expose port 8080
EXPOSE 8080
# Run the app
CMD ["npm", "start"]
그런 다음 화면 오른쪽 상단의 “새 앱” 버튼을 클릭하여 새 Back4app 애플리케이션을 생성합니다. 그런 다음 아래 이미지와 같이 서비스형 컨테이너 옵션을 선택합니다.
Back4app GitHub 앱에 액세스 권한을 부여한 애플리케이션 목록에서 배포할 앱을 선택합니다.
애플리케이션과 관련된 환경 변수를 입력하고 앱 만들기 버튼을 클릭합니다.
앱 만들기 버튼을 클릭하면 배포 프로세스가 시작되고 실시간 배포 로그가 표시되어 배포 프로세스를 모니터링하는 데 도움이 됩니다.
배포 프로세스 중에 오류가 발생하면 Back4app AI 에이전트가 로그에서 오류를 분석하고 가능한 해결책을 제시하도록 허용할 수 있습니다. 또는 Back4app의 문제 해결 가이드를 참조할 수도 있습니다.
앱이 배포되면 대시보드 왼쪽 상단에 있는 라이브 URL을 통해 앱에 액세스할 수 있습니다.
Back4app 컨테이너의 무료 티어는 0.25 CPU, 256MB RAM, 100GB 전송을 제공하여 개발 및 학습에 이상적입니다. 프로덕션 앱의 경우 사용 가능한 유료 요금제 중 하나로 업그레이드하는 것이 이상적입니다.
2. Render
Render는 Node.js를 비롯한 다양한 개발 스택의 웹 애플리케이션을 배포하기 위한 서비스형 플랫폼(PaaS) 솔루션을 제공하는 클라우드 플랫폼입니다.
Render를 사용하면 평균 CPU 및/또는 메모리 사용량에 따라 서비스 규모가 확장 또는 축소되므로 트래픽이 많은 서비스를 예측하거나 오버프로비저닝할 필요가 없습니다.
또한 Render는 다운타임 없는 배포를 지원하므로 빌드가 중단되더라도 애플리케이션이 다운되지 않습니다.
새 버전의 앱을 배포할 때마다 상태 검사를 수행하여 새 버전이 상태 검사를 통과한 경우에만 이전 버전을 교체합니다.
Render에는 미리보기 환경, 전용 REST API, 영구 디스크, 프라이빗 네트워킹 등 다양한 기능도 포함되어 있습니다.
Render에서 앱을 배포하려면 GitHub/GitLab 계정을 플랫폼에 연결하고 앱의 환경 변수를 포함한 배포 세부 정보를 구성해야 합니다.
Render에 Node.js 백엔드를 배포하는 방법
Render에 애플리케이션을 배포하려면 활성 계정이 필요하며, 계정이 없는 경우 무료로 가입할 수 있습니다.
계정에 로그인하고 대시보드로 이동합니다. 대시보드에서 ‘웹 서비스‘를 클릭합니다.
다음으로 GitHub/GitLab 계정을 Render에 연결하거나 공개 Git 리포지토리를 제공하라는 메시지가 표시됩니다.
GitHub 계정을 연결하고 배포하려는 리포지토리를 선택하면 구성 양식으로 이동하여 앱 이름, 빌드 명령, 환경 변수 등과 같은 세부 정보를 입력해야 합니다.
필요한 세부 정보를 입력하고 “웹 서비스 만들기” 버튼을 클릭합니다. 그러면 배포 프로세스가 시작되고 배포 상태와 애플리케이션 로그를 실시간으로 모니터링할 수 있는 화면으로 이동합니다.
배포 중에 오류가 발생하면 배포 로그에서 오류를 분석하고 성공적인 배포를 위해 문제를 해결할 수 있습니다.
Render의 무료 요금제는 웹 서비스를 위한 512MB의 RAM과 0.1 CPU를 제공합니다. 애플리케이션에 더 많은 리소스가 필요한 경우 유료 요금제를 고려할 수 있습니다.
3. Fly
Fly는 글로벌 애플리케이션 전송 네트워크를 제공하는 클라우드 플랫폼입니다.
분산된 서버 네트워크를 활용하여 전 세계 사용자와 가까운 곳에 애플리케이션을 배포하고 실행할 수 있으므로 지연 시간을 크게 줄이고 서버의 성능을 개선할 수 있습니다.
Fly는 “Fly 머신”으로 알려진 완전한 Linux 마이크로-VM을 제공합니다. Fly 머신은 부팅 시간이 약 300밀리초로 비교적 빠릅니다. 또한 머신이 휴면 상태일 때 일시 중지하여 사용한 서비스에 대해서만 비용을 지불할 수 있습니다.
Fly에서 애플리케이션을 배포하려면 전용 CLI 도구로 몇 가지 명령을 실행하면 됩니다.
Fly에 Node.js 백엔드를 배포하는 방법은 무엇인가요?
Fly에 Node.js 앱을 배포하려면 다음이 필요합니다:
- Fly 계정이 없는 경우 무료로 가입할 수 있습니다.
- 로컬 컴퓨터에 설치된
flyctl
명령줄 도구.
시스템에 flyctl
CLI 도구가 설치되어 있지 않은 경우 아래 명령어를 사용하여 설치할 수 있습니다:
#macOS/Linux
curl -L https://fly.io/install.sh | sh
#windows
pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"
그런 다음 아래 명령을 실행하여 Fly 계정에 로그인합니다:
fly auth login
위의 명령을 실행하면 기본 브라우저가 열리고 Fly 계정에 로그인하라는 메시지가 표시됩니다.
로그인에 성공하면 배포하려는 애플리케이션의 디렉토리로 이동하여 아래 명령을 실행합니다:
fly launch
위의 명령을 실행하면 Fly가 자동으로 Node.js 앱을 배포하려는 것을 감지하고 배포를 설정합니다.
CLI 도구는 앱을 배포하기 전에 승인을 위한 앱 구성을 표시합니다. 구성이 만족스럽다면 메시지에 “Y” 라고 답하여 계속 진행하거나, 그렇지 않으면 “N”이라고 답할 수 있습니다.
N을 회신하면 아래 이미지와 같이 브라우저가 열리고 Fly에서 제공하는 기본 구성을 넘어 애플리케이션을 구성할 수 있는 페이지로 이동합니다.
하지만 이 글에서 다룬 다른 옵션과 달리 Fly는 애플리케이션을 배포하기 전에 카드 정보를 추가해야 합니다. 그래도 5달러 상당의 리소스를 초과할 때까지는 요금이 청구되지 않습니다.
4. Amazon Web Services (AWS)
Amazon Web Services (AWS)는 인터넷을 통해 기본적인 컴퓨팅 인프라 구성 요소를 제공하는 서비스형 인프라(IaaS) 제공업체입니다.
AWS를 사용하면 물리적 하드웨어에 투자하고 유지 관리할 필요 없이 가상화된 환경을 구축하고 관리할 수 있습니다.
AWS는 컴퓨팅 및 데이터베이스와 같은 인프라 기술부터 AI 및 ML과 같은 최신 기술까지 다른 클라우드 서비스 제공업체 중 가장 많은 기능을 제공합니다.
또한 300개 이상의 보안, 규정 준수 및 거버넌스 서비스 및 기능과 143개의 보안 표준 및 규정 준수 인증을 지원하는 심층적인 클라우드 보안 도구 세트로 뒷받침되는 가장 안전한 클라우드 컴퓨팅 환경입니다.
또한 AWS는 안정성, 보안 및 성능에 대한 입증된 실적(17년)을 보유한 성숙한 플랫폼입니다.
그러나 AWS에 애플리케이션을 배포하는 것은 Back4app이나 Render와 같은 다른 플랫폼보다 더 복잡합니다.
다양한 방법으로 이를 달성할 수 있지만, 이 튜토리얼에서는 가장 많이 사용되는 Amazon Elastic Compute Cloud(Amazon EC2)에 대해 설명합니다.
AWS에 Node.js 백엔드를 배포하는 방법은 무엇인가요?
EC2는 클라우드에서 인스턴스라고 하는 가상 서버를 대여할 수 있는 Amazon에서 제공하는 웹 서비스입니다.
EC2 인스턴스를 생성하려면 AWS 계정이 필요하며, 계정이 없는 경우 무료로 가입할 수 있습니다.
Amazon 계정에 로그인한 후 EC2 인스턴스를 생성합니다 (위에 링크된 문서의 마지막 단계는 건너뛸 수 있으며, SSH를 사용하여 EC2 인스턴스에 연결해야 합니다).
EC2 대시보드의 ‘인스턴스’에서 새로 생성된 인스턴스를 확인할 수 있습니다.
다음으로, EC2 인스턴스 콘솔을 사용하여 EC2 인스턴스에 연결합니다. 위에 링크된 지침의 단계를 수행하면 브라우저에 웹 터미널이 열립니다.
그런 다음 아래 명령을 실행하여 루트 사용자로 변경합니다:
sudo su -
위의 명령을 실행하면 사용자 컨텍스트가 상승된 권한이 있는 루트 사용자로 전환됩니다.
이 명령은 수퍼유저 기능을 위한 “sudo”, 사용자 전환을 위한 “su”, 하이픈(“-“)으로 구성되어 있으며 루트 사용자의 환경 변수 및 구성을 로드합니다.
다음으로 아래 명령을 실행하여 노드 버전 관리자(NVM)를 설치합니다:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
다음으로, 아래 명령을 실행하여 현재 터미널 세션에서 NVM을 활성화합니다:
. ~/.nvm/nvm.sh
그런 다음 아래 명령을 실행하여 NVM을 사용하여 Node.js를 설치합니다:
nvm install node
다음으로 아래 명령을 실행하여 Git을 설치합니다:
sudo yum update
sudo yum install git
아래 명령을 실행하여 EC2 인스턴스에 Node.js와 Git이 성공적으로 설치되었는지 확인할 수 있습니다:
node -v && git -v
설치에 성공했다면 아래 이미지와 같이 콘솔에 버전 번호가 인쇄된 것을 볼 수 있습니다.
다음으로, GitHub SSH 키를 EC2 인스턴스에 연결합니다. SSH 키를 성공적으로 구성하고 추가했으면 아래 명령을 실행하여 리포지토리를 EC2 인스턴스에 복제합니다:
git clone <YOUR_APPLICATION_URL>
위의 명령은 애플리케이션을 EC2 인스턴스에 복제합니다.
cd를
EC2의 애플리케이션 디렉터리에 넣고 아래 명령을 실행하여 모든 프로젝트 종속성을 설치합니다.
npm install
다음으로 아래 명령을 실행하여 환경 변수를 추가합니다:
nano .env
위의 명령은 빈 .env
파일을 만들어 열고, 환경 변수를 복사하여 파일에 붙여넣은 다음, Control + X를 누른 다음 Y를 눌러 파일을 저장하고 닫습니다.
마지막으로 애플리케이션의 시작 스크립트를 실행합니다(일반적으로 아래 명령어):
npm start
위의 명령을 실행하면 애플리케이션이 시작됩니다. 인스턴스 대시보드에서 찾을 수 있는 공개 DNS 주소를 사용하여 배포된 애플리케이션에 액세스할 수 있습니다.
AWS의 EC2 인스턴스용 무료 티어는 지역에 따라 Linux, RHEL 또는 SLES를 실행하는 t2.micro 또는 t3.micro 인스턴스에 대해 매월 750시간을 제공합니다.
마찬가지로 Windows 인스턴스의 경우 지역에 따라 t2.micro 또는 t3.micro 인스턴스의 경우 월 750시간을 제공합니다.
또한 인스턴스 유형에 관계없이 공용 IPv4 주소의 경우 월 750시간이 포함됩니다.
단, 무료 티어는 AWS 가입일로부터 12개월 동안 신규 AWS 고객만 사용할 수 있습니다.
5. DigitalOcean
DigitalOcean은 애플리케이션을 지원하는 기본 가상 머신에 액세스하여 디스크 공간을 구성하고, 메모리를 할당하고, 네트워크를 설정할 수 있는 서비스형 인프라(IaaS) 플랫폼입니다.
DigitalOcean은 리눅스 가상 머신인 드롭렛과 같은 다양한 클라우드 컴퓨팅 제품을 제공합니다. 드롭렛 외에도 관리형 쿠버네티스 서비스 및 서버리스 기능을 제공합니다.
DigitalOcean은 또한 클라우드 방화벽, 로드 밸런서, 가상 사설 클라우드, 유동 IP, DNS, IPv6 및 DDoS 보호 기능을 통해 네트워크 보안을 제공합니다.
DigitalOcean에 Node.js 애플리케이션을 배포하는 것은 다른 IaaS 옵션에 비해 비교적 간단한 과정입니다.
여기에는 Droplet 생성, 구성, 가상 Linux 머신 설정, 필요에 맞는 역방향 프록시 설정이 포함됩니다.
DigitalOcean 드롭렛에 Node.js 백엔드를 배포하시나요?
플랫폼에 Node.js 앱을 배포하려면 DigitalOcean 계정이 필요하며, 계정이 없는 경우 무료로 가입할 수 있습니다.
그런 다음 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 사용합니다.
프로젝트 대시보드에서 화면 오른쪽 상단의 ‘만들기‘ 드롭다운을 클릭하고 ‘물방울‘을 선택하여 새 물방울을 만듭니다.
다음으로, 드롭렛에 가장 가까운 배포 지역을 선택합니다.
다음으로, 이미지로 “Ubuntu” OS를 선택하고 드롭다운 유형으로 “기본”을 선택합니다.
그런 다음 선호하는 CPU 옵션을 선택합니다.
그런 다음 인증 방법으로 ‘비밀번호’를 선택합니다. 또는 인증 방법으로 SSH를 선택할 수도 있습니다.
마지막으로, 드롭렛 번호로 ‘1’을 선택하고 호스트 이름을 지정합니다.
필요한 세부 정보를 입력한 후 ‘드롭렛 만들기‘ 버튼을 클릭합니다. 그러면 대시보드로 리디렉션됩니다.
대시보드에서 방금 만든 드롭렛을 선택하고 아래 이미지와 같이 드롭렛 콘솔 드롭렛을 실행합니다.
드롭렛 콘솔을 실행하면 아래 이미지와 같이 브라우저에 Ubuntu 웹 터미널이 열립니다.
그런 다음 아래 명령을 실행하여 Node.js 설치 스크립트를 설치합니다:
curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -
그런 다음 아래 명령을 실행하여 Node.js를 설치합니다:
apt-get install nodejs -y
그런 다음 아래 명령어를 사용하여 GitHub 리포지토리를 복제합니다:
git clone <YOUR_GITHUB_REPOSITORY_LINK>
아래 명령을 실행하여 프로젝트 종속성을 설치하세요:
npm install
다음으로 아래 명령을 실행하여 환경 변수를 추가합니다:
nano .env
위의 명령은 빈 .env
파일을 만들어 열고, 환경 변수를 복사하여 파일에 붙여넣은 다음, Control + X를 누른 다음 Y를 눌러 파일을 저장하고 닫습니다.
그런 다음 PM2를 설치하여 서버를 백그라운드에서 계속 실행합니다:
sudo npm i pm2 -g
그런 다음 아래 명령을 실행하여 PM2로 서버를 시작하세요:
pm2 start main.js
그런 다음 아래 명령을 실행하여 앱이 다시 시작될 때마다 서버가 다시 시작되도록 합니다:
pm2 startup ubuntu
이제 애플리케이션이 실행 중이며 드롭렛(로컬 호스트)에서 수신 대기 중입니다. 공개적으로 사용할 수 있도록 하려면 Nginx를 역방향 프록시로 설정합니다.
아래 명령을 실행하여 Nginx를 설치합니다:
sudo apt install nginx
Nginx를 사용하기 전에 애플리케이션을 보호하고 승인된 트래픽만 웹 서버에 도달할 수 있도록 Ubuntu ufw(복잡하지 않은 방화벽)를 조정해야 합니다.
아래 명령을 실행하여 ufw를 활성화합니다:
ufw enable
그런 다음 아래 명령을 실행하여 SSH, HTTP 및 HTTPS를 허용합니다:
ufw allow ssh && ufw allow http && ufw allow https
위의 명령은 Ubuntu 서버의 방화벽(UFW)이 포트 22(SSH용), 80(HTTP용), 443(HTTPS용)에서 들어오는 연결을 허용하도록 설정합니다.
다음으로 아래 명령을 실행하여 기본 Nginx 구성 파일을 엽니다:
sudo nano /etc/nginx/sites-available/default
구성 파일 내에서 위치
객체를 찾아 아래 코드 블록으로 바꿉니다:
location / {
try_files $uri $uri/ =404;
proxy_pass http://localhost:5050;#Replace with the port your app is running on
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
참고: proxy_pass의
경우 앱이 실행되는 모든 포트로 값을 바꿀 수 있습니다.
파일을 닫고 저장합니다(control + X, Y, ENTER). 위의 코드 블록으로 구성 파일을 편집하면 포트 80(HTTP의 경우)으로 요청할 때 포트 5050(또는 기본 포트)에서 실행 중인 앱이 요청을 처리하도록 리버스 프록시가 설정됩니다.
다음으로 아래 명령을 실행하여 Nginx 구성 파일이 올바르게 설정되었는지 테스트합니다.
sudo nginx -t
구성 파일이 올바르게 설정되었다면 아래 이미지와 같은 응답이 표시되어야 합니다.
마지막으로 아래 명령을 실행하여 Nginx를 다시 시작하여 구성 파일에 대한 변경 사항이 적용되도록 합니다:
sudo service nginx restart
이제 드롭렛의 공용 IPv4 주소를 사용하여 앱에 요청할 수 있습니다.
DigitalOcean의 무료 티어는 신규 사용자가 모든 서비스를 이용할 수 있도록 $200의 크레딧을 제공합니다.
배포 옵션 비교
이 문서에서는 Node.js 애플리케이션을 위한 5가지 배포 옵션을 다루었습니다. 아래는 다룬 모든 플랫폼을 표로 비교한 것입니다.
플랫폼 | 카테고리 | 개발 도구 | 무료 티어 리소스 | 결제 정보 |
Back4app 컨테이너 | PaaS | Docker, GitHub 앱, Back4app AI 에이전트. | – 0.25 CPU – 256MB RAM – 100GB 전송 | 필수 사항 아님 |
Render | PaaS | GitHub/GitLab 앱, 공용 리포지토리 링크 | – 512MB RAM – 0.1 CPU | 필수 사항 아님 |
Fly | PaaS | Fly CLI 도구 | 5달러 상당의 리소스/사용량 | 필수 |
Amazon Web Services (AWS) | IaaS | AWS EC2 인스턴스 | – Linux, RHEL 또는 SLES t2.micro 또는 t3.micro 인스턴스 월 750시간. – Windows t2.micro 또는 t3.micro 인스턴스 월 750시간(지역에 따라 다름). – 월 750시간의 공용 IPv4 주소. | 필수 |
DigitalOcean | IaaS | DigitalOcean 드롭렛 | 신규 사용자를 위한 $200 무료 크레딧. | 필수 |
전반적으로 Back4app, Render, Fly와 같은 PaaS 플랫폼은 확장성, 유연성, 빠른 개발 및 배포 주기를 필요로 하는 애플리케이션에 가장 적합합니다.
반면, DigitalOcean 및 AWS와 같은 IaaS 플랫폼은 물리적 하드웨어를 관리할 필요 없이 기본 인프라, 맞춤형 구성 및 확장성을 보다 효과적으로 제어할 수 있는 애플리케이션에 가장 적합합니다.
결론
이 문서에서는 Back4app 컨테이너, Render, Fly, AWS 및 DigitalOcean을 사용하여 Node.js 애플리케이션을 배포하는 방법을 살펴보고 배웠습니다.
논의된 각 옵션에는 장점과 장단점이 있습니다. PaaS 플랫폼의 경우 배포 프로세스가 더 쉽습니다.
하지만 기본 인프라에 대한 대부분의 제어권을 잃게 됩니다. IaaS 플랫폼에서는 배포 프로세스가 복잡하지만 물리적 서버가 없어도 기본 인프라를 완벽하게 제어할 수 있습니다.
어떤 옵션을 선택하든 사용자 정의 도메인 네임을 구매하여 연결해야 사용자가 실제로 액세스할 수 있습니다.
이 글이 마음에 드셨다면 PostgresSQL 데이터베이스로 웹 애플리케이션을 만드는 방법도 알아보세요.