Node.js는 비동기 이벤트 기반의 구조 덕분에 웹 API, 백엔드 서버, 마이크로서비스 구현에 적합한 플랫폼입니다. 그런데 서버를 직접 구축하지 않고, 클라우드 환경에서 자동으로 실행되고, 스케일링되며, 보안도 갖춘 환경이 필요하다면? 이럴 때 사용하는 서비스가 바로 Azure App Service입니다.
이번 글에서는 Node.js 앱을 Azure App Service에 배포하는 전체 흐름을, GitHub 연동 없이 가장 기본적인 FTP/ZIP 배포 방식으로 설명합니다.
Azure App Service는 웹 앱을 쉽게 배포하고 운영할 수 있는 **PaaS(Platform as a Service)**입니다. Node.js 외에도 .NET, Java, PHP, Python 등을 지원하며, 다음과 같은 장점이 있습니다:
예제는 간단한 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
, 기타 정적 파일로 구성App Services
검색 → 진입항목 | 설정 |
---|---|
Subscription | 기본 구독 |
Resource Group | node-demo-rg (신규 또는 기존) |
Name | my-node-app-demo |
Publish | Code |
Runtime stack | Node.js 18 LTS (또는 최신) |
Region | Korea Central 또는 가까운 리전 |
Operating System | Linux (권장) |
Pricing plan | F1(Free) 또는 B1(Basic) 이상 선택 가능 |
→ Review + Create → Create 클릭
node_modules
는 포함하지 않고 ZIP 압축:npm install
rm -rf node_modules
zip -r app.zip .
ZIP
az webapp deployment source config-zip \
--resource-group node-demo-rg \
--name my-node-app-demo \
--src app.zip
→ 업로드 완료 후 자동으로 Node.js 애플리케이션이 실행됩니다.
https://my-node-app-demo.azurewebsites.net
Hello from Azure App Service!
메시지가 정상적으로 출력되면 성공!NODE_ENV
, DB URL 등 환경변수 설정 가능az webapp log tail \
--name my-node-app-demo \
--resource-group node-demo-rg
process.env.PORT
를 써야 하나요?네, Azure App Service는 내부적으로 포트를 지정해 전달하기 때문에, process.env.PORT
를 사용하지 않으면 앱이 제대로 실행되지 않을 수 있습니다. 하드코딩된 포트(3000
)만 사용하면 배포된 환경에서 서비스가 실패합니다. 항상 const port = process.env.PORT || 3000;
구조를 사용하세요.
물론입니다. Azure App Service는 다음 배포 방식을 지원합니다:
지속적 통합(CI/CD)이 필요한 경우 GitHub 연동이 매우 유용하며, 로컬에서 빠르게 테스트하려면 ZIP 방식이나 VS Code 확장이 편리합니다.
Azure의 F1(Free) 요금제는 테스트 및 학습용으로 적합하지만, 메모리/CPU 제한, 커스텀 도메인 불가, 성능 저하 등의 제한이 있습니다. 실제 서비스용이라면 B1 이상 요금제를 추천합니다. 또한, 프리 티어는 하루 요청 수 제한도 있으므로, 트래픽이 많아지면 과금되는 유료 플랜으로 전환이 필요합니다.
node_modules
없이 배포해도 되나요?네, Azure App Service는 Node.js가 설치된 환경에서 앱을 실행할 때 자동으로 npm install
을 수행합니다. 따라서 node_modules를 포함하지 않아도 되며, 오히려 포함하면 불필요한 용량 증가와 충돌 가능성이 있습니다. 꼭 package.json
, package-lock.json
만 포함된 상태로 배포하세요.
물론입니다. Express 앱 내에서 정적 디렉토리(/public
, /static
)를 설정하면 됩니다:
app.use(express.static('public'));
public/index.html
, public/images/bg.jpg
등의 파일은 자동으로 서빙되며, Azure App Service는 정적 리소스도 빠르게 전송할 수 있도록 최적화되어 있습니다.
추가로 Azure CDN 또는 Blob Storage와 연계하면 더욱 효율적인 콘텐츠 배포도 가능합니다.
윈드라이브(OneDrive)를 사용하다 보면 어느 순간 “동기화 중지됨”, “저장소 가득 참”이라는 메시지를 마주할 수 있습니다. 이는…
윈드라이브(OneDrive)를 사용하다 보면, 기본으로 설정된 동기화 폴더 위치가 불편하거나 C드라이브 용량 부족 등으로 인해 다른…
윈드라이브(OneDrive)는 기본적으로 자동으로 파일을 클라우드와 동기화하도록 설정되어 있습니다. 문서를 수정하거나 사진을 추가하면, 몇 초 내로…
윈드라이브(OneDrive)는 자동으로 파일을 클라우드에 백업하고 여러 기기와 실시간으로 동기화해주는 매우 유용한 도구입니다. 하지만 간혹 “OneDrive…
윈드라이브(OneDrive)는 실시간으로 파일을 클라우드에 저장하고 여러 기기에서 자동으로 동기화해주는 편리한 서비스지만, 때때로 동기화가 멈추거나 오류가…
윈드라이브(OneDrive)는 기본적으로 전체 OneDrive 폴더를 PC와 동기화하지만, 모든 데이터를 동기화할 필요는 없습니다. 저장 공간을 절약하거나,…