Azure App Service를 이용한 Node.js 배포하기

Node.js는 비동기 이벤트 기반의 구조 덕분에 웹 API, 백엔드 서버, 마이크로서비스 구현에 적합한 플랫폼입니다. 그런데 서버를 직접 구축하지 않고, 클라우드 환경에서 자동으로 실행되고, 스케일링되며, 보안도 갖춘 환경이 필요하다면? 이럴 때 사용하는 서비스가 바로 Azure App Service입니다.

이번 글에서는 Node.js 앱을 Azure App Service에 배포하는 전체 흐름을, GitHub 연동 없이 가장 기본적인 FTP/ZIP 배포 방식으로 설명합니다.


Azure App Service란?

Azure App Service는 웹 앱을 쉽게 배포하고 운영할 수 있는 **PaaS(Platform as a Service)**입니다. Node.js 외에도 .NET, Java, PHP, Python 등을 지원하며, 다음과 같은 장점이 있습니다:

  • 서버 인프라 관리 불필요
  • 자동 확장 및 로드 밸런싱
  • 사용자 지정 도메인 및 SSL 설정
  • GitHub, Git, FTP, ZIP, VS Code 등 다양한 배포 방식 지원
  • 무료 플랜 포함

1단계 – Node.js 애플리케이션 준비

예제는 간단한 Express 기반 Node.js 앱입니다.

예제 코드 (index.js):

const express = require('express');
const app = express();
const port = process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.send('Hello from Azure App Service!');
});

app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});

package.json 예시:

{
  "name": "azure-node-app",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "express": "^4.18.2"
  }
}
  • 폴더 구조는 index.js, package.json, node_modules, 기타 정적 파일로 구성

2단계 – Azure App Service 계획 및 Web App 생성

1. Azure 포털 접속 > App Services 검색 → 진입

2. + Create → Web App 생성

항목설정
Subscription기본 구독
Resource Groupnode-demo-rg (신규 또는 기존)
Namemy-node-app-demo
PublishCode
Runtime stackNode.js 18 LTS (또는 최신)
RegionKorea Central 또는 가까운 리전
Operating SystemLinux (권장)
Pricing planF1(Free) 또는 B1(Basic) 이상 선택 가능

Review + Create → Create 클릭


3단계 – App Service에 Node.js 앱 배포하기 (ZIP 방식)

1. 배포할 프로젝트 ZIP 파일 생성

  • node_modules는 포함하지 않고 ZIP 압축:
npm install
rm -rf node_modules
zip -r app.zip .

2. App Service → 개요(Overview) > 배포 센터(Deployment Center) 클릭

  • 배포 방식: ZIP
  • 도구: FTP 또는 로컬 Git 배포 선택 가능 → 여기선 FTP 추천

3. FTP 배포 정보 확인

  • 배포 자격 증명 생성 필요 (App Service > 배포 자격 증명 설정)
  • FTP 호스트 주소, 사용자명, 비밀번호 확인

4. FTP 클라이언트(FileZilla 등) 또는 Azure CLI로 업로드

az webapp deployment source config-zip \
  --resource-group node-demo-rg \
  --name my-node-app-demo \
  --src app.zip

→ 업로드 완료 후 자동으로 Node.js 애플리케이션이 실행됩니다.


4단계 – 웹 앱 접속 및 확인

  • App Service > 개요에서 사이트 주소 확인:
https://my-node-app-demo.azurewebsites.net
  • 접속 시 Hello from Azure App Service! 메시지가 정상적으로 출력되면 성공!

5단계 – Node.js 환경 설정 및 로그 확인 팁

Node 버전 변경

  • App Service > 설정 > 구성 > 일반 설정
  • Node.js 버전 선택 가능 (14.x, 16.x, 18.x 등)

환경변수 설정

  • 설정 > 구성 > 애플리케이션 설정
  • NODE_ENV, DB URL 등 환경변수 설정 가능

로그 보기

  • App Service > 진단 및 해결 > 로그 스트림
  • 또는 Azure CLI 사용:
az webapp log tail \
  --name my-node-app-demo \
  --resource-group node-demo-rg

Q&A

Q1. App Service에서 Node.js 실행 시 꼭 process.env.PORT를 써야 하나요?

네, Azure App Service는 내부적으로 포트를 지정해 전달하기 때문에, process.env.PORT를 사용하지 않으면 앱이 제대로 실행되지 않을 수 있습니다. 하드코딩된 포트(3000)만 사용하면 배포된 환경에서 서비스가 실패합니다. 항상 const port = process.env.PORT || 3000; 구조를 사용하세요.


Q2. ZIP 배포 외에 다른 방식도 있나요?

물론입니다. Azure App Service는 다음 배포 방식을 지원합니다:

  • GitHub Actions 자동 배포
  • 로컬 Git 연결
  • FTP 업로드
  • Visual Studio Code 확장으로 직접 배포
  • Docker 이미지 기반 배포

지속적 통합(CI/CD)이 필요한 경우 GitHub 연동이 매우 유용하며, 로컬에서 빠르게 테스트하려면 ZIP 방식이나 VS Code 확장이 편리합니다.


Q3. 무료 요금제로도 실서비스 가능한가요?

Azure의 F1(Free) 요금제는 테스트 및 학습용으로 적합하지만, 메모리/CPU 제한, 커스텀 도메인 불가, 성능 저하 등의 제한이 있습니다. 실제 서비스용이라면 B1 이상 요금제를 추천합니다. 또한, 프리 티어는 하루 요청 수 제한도 있으므로, 트래픽이 많아지면 과금되는 유료 플랜으로 전환이 필요합니다.


Q4. node_modules 없이 배포해도 되나요?

네, Azure App Service는 Node.js가 설치된 환경에서 앱을 실행할 때 자동으로 npm install을 수행합니다. 따라서 node_modules를 포함하지 않아도 되며, 오히려 포함하면 불필요한 용량 증가와 충돌 가능성이 있습니다. 꼭 package.json, package-lock.json만 포함된 상태로 배포하세요.


Q5. 정적 파일도 함께 배포할 수 있나요?

물론입니다. Express 앱 내에서 정적 디렉토리(/public, /static)를 설정하면 됩니다:

app.use(express.static('public'));

public/index.html, public/images/bg.jpg 등의 파일은 자동으로 서빙되며, Azure App Service는 정적 리소스도 빠르게 전송할 수 있도록 최적화되어 있습니다.

추가로 Azure CDN 또는 Blob Storage와 연계하면 더욱 효율적인 콘텐츠 배포도 가능합니다.