Categories: 미분류

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와 연계하면 더욱 효율적인 콘텐츠 배포도 가능합니다.


huniverse4

Recent Posts

연료첨가제는 정말 엔진 세정에 좋은지 실제 연구결과가 있는지 알아보자

자동차를 사랑하는 많은 운전자들이 한 번쯤 고민해본 문제가 바로 연료첨가제입니다. 주유소에서, 온라인 쇼핑몰에서, 자동차용품점에서 "엔진을…

2개월 ago

남자 옷핏이 예뻐보이는 몸무게를 알아보자

"옷이 날개"라고 하지만, 정작 그 날개가 제대로 펼쳐지려면 적절한 몸무게가 필요합니다. 남자들의 영원한 고민 중…

2개월 ago

제로 탄산음료는 많이 마셔도 될까? 몸무게별 섭취 상한선 알아보자

다이어트 열풍과 함께 '제로 칼로리'를 내세운 탄산음료가 폭발적으로 인기를 끌고 있습니다. 하지만 "제로 탄산음료는 많이…

2개월 ago

달을 보기 위한 망원경의 최소 성능 및 스펙은?

달 관측은 천체 관측의 첫걸음이자 가장 매력적인 경험 중 하나입니다. 하지만 달을 보기 위한 망원경의…

2개월 ago

아이폰 14 프로맥스 배터리 오래사용하는 방법 총정리

최신 아이폰 14 프로맥스는 강력한 성능과 함께 뛰어난 배터리 용량을 자랑하지만, 올바른 사용법을 모르면 배터리…

2개월 ago

윈드라이브 동기화 용량 초과 시 대처법

윈드라이브(OneDrive)를 사용하다 보면 어느 순간 “동기화 중지됨”, “저장소 가득 참”이라는 메시지를 마주할 수 있습니다. 이는…

6개월 ago