← 블로그

DigitalOcean App Platform으로 Node.js API 배포하기 2026

zazabook editors · 2026-07-02 · 4 분 읽기

이 페이지의 일부 링크는 제휴 링크이며, 구매 시 추가 비용 없이 소정의 수수료를 받을 수 있습니다.

VPS를 하나 빌려서 Node.js API를 올리려면 Nginx 설정, PM2로 프로세스 관리, SSL 인증서 갱신, 배포할 때마다 SSH 접속해서 git pull 하고 재시작하는 일까지 전부 직접 해야 합니다. 사이드프로젝트 하나 돌리는데 이 정도 운영 부담은 과합니다. DigitalOcean App Platform은 이 과정을 통째로 없애줍니다. GitHub 저장소만 연결해두면 main 브랜치에 push할 때마다 빌드부터 배포까지 자동으로 끝나고, HTTPS 인증서도 알아서 발급·갱신됩니다. 이 글에서는 Express 기반 Node.js API를 App Platform에 배포하는 과정을 처음부터 끝까지 따라가 봅니다.

준비물

  • DigitalOcean 계정 (신규 가입 시 크레딧 프로모션이 있는 경우가 많으니 확인해 보세요)
  • GitHub 저장소 — Node.js API 코드가 올라가 있어야 합니다 (GitLab도 지원되지만 이 글은 GitHub 기준)
  • 저장소 루트에 package.jsonstart 스크립트가 정의되어 있어야 App Platform이 실행 방법을 자동으로 인식합니다
  • (선택) PostgreSQL이나 Redis 같은 DB를 쓴다면 연결 정보를 미리 정리해두면 4~5단계가 수월합니다

1단계 — App Platform에서 앱 생성

DigitalOcean 콘솔에 로그인한 뒤 왼쪽 메뉴에서 Apps를 선택하고 Create App을 누릅니다. 소스로 GitHub, GitLab, DigitalOcean Container Registry, 또는 로컬 Docker 이미지 중 하나를 고를 수 있는데, 여기서는 GitHub를 선택합니다. 최초 1회는 DigitalOcean이 GitHub 계정에 접근할 수 있도록 OAuth 인증을 진행해야 합니다. 권한은 "All repositories" 대신 "Only select repositories"로 좁혀서 배포할 저장소만 허용하는 걸 권장합니다.

2단계 — GitHub 저장소 연결

인증이 끝나면 저장소 목록이 뜹니다. 배포할 저장소와 브랜치(보통 main)를 선택하세요. Autodeploy 옵션을 켜두면 해당 브랜치에 push될 때마다 자동으로 재배포되고, 꺼두면 콘솔에서 수동으로 "Deploy" 버튼을 눌러야 반영됩니다. 개발 초기에는 Autodeploy를 켜두고, 운영 단계로 넘어가면 리뷰 후 수동 배포로 바꾸는 방식을 추천합니다. 모노레포라면 Source Directory에 API가 있는 하위 폴더 경로를 지정해야 빌드 시스템이 엉뚱한 디렉토리를 스캔하지 않습니다.

3단계 — 빌드/실행 커맨드 설정

App Platform은 package.json을 스캔해서 Node.js 앱임을 자동 감지하고 기본 빌드/실행 커맨드를 제안합니다. 대부분은 그대로 써도 되지만, 직접 지정하려면 아래처럼 넣습니다.

  • Build Command: npm install && npm run build (TypeScript라면 빌드 스텝 필수)
  • Run Command: npm start (또는 node dist/server.js처럼 실제 엔트리 파일 지정)
  • HTTP Port: Express 앱이 process.env.PORT로 포트를 받도록 코드를 작성해야 합니다. App Platform이 컨테이너에 포트를 주입하므로 app.listen(process.env.PORT || 3000) 형태로 두면 로컬 개발과 배포 환경 모두에서 동작합니다.

인스턴스 크기(Basic/Professional)도 이 단계에서 고를 수 있는데, 트래픽이 적은 API라면 가장 작은 Basic 사이즈로 시작해도 충분합니다.

4단계 — 환경변수·시크릿 설정

App-Level Environment Variables 메뉴에서 .env에 있던 값들을 하나씩 등록합니다. DATABASE_URL, JWT_SECRET, 외부 API 키처럼 민감한 값은 반드시 Encrypt 옵션을 체크하세요 — 콘솔에서도 값이 마스킹되고, 로그에도 노출되지 않습니다. 저장소에 .env 파일을 커밋하지 않는 건 기본이고, App Platform 쪽 환경변수와 로컬 .env 값이 어긋나면 배포 후 원인 파악이 까다로워지니 두 곳의 키 이름을 동일하게 맞춰두는 게 좋습니다.

5단계 — 데이터베이스 연결(Managed DB 옵션)

같은 앱 생성 화면에서 Add Resource → Database를 선택하면 PostgreSQL, MySQL, Redis 중 하나를 바로 붙일 수 있습니다. 새 Managed Database를 만들면 App Platform이 연결 문자열을 자동으로 DATABASE_URL 환경변수에 주입해주기 때문에 별도로 호스트·포트·비밀번호를 코드에 하드코딩할 필요가 없습니다. 이미 다른 곳에서 운영 중인 DB가 있다면 굳이 옮기지 말고 4단계에서 연결 문자열만 환경변수로 등록하면 됩니다. 소규모 API는 Managed DB 없이 외부 무료 DB(Supabase, Neon 등)를 붙여도 무방하지만, 같은 VPC 안에서 지연시간 없이 통신하고 싶다면 Managed DB가 유리합니다.

6단계 — 커스텀 도메인·HTTPS

기본으로 제공되는 *.ondigitalocean.app 도메인으로도 바로 서비스가 가능하지만, 자체 도메인을 쓰려면 Settings → Domains에서 도메인을 추가하고 안내되는 CNAME 레코드를 도메인 등록업체(가비아, Cloudflare 등)의 DNS에 넣어주면 됩니다. DNS 전파가 끝나면 App Platform이 Let's Encrypt 인증서를 자동 발급하고, 이후 갱신도 알아서 처리합니다. Nginx 설정이나 certbot cron을 직접 관리할 필요가 없다는 게 App Platform의 가장 큰 시간 절약 포인트입니다.

7단계 — 오토스케일·모니터링

Settings → Resources에서 인스턴스 개수를 늘리거나 오토스케일링 범위(최소~최대 인스턴스 수)를 지정할 수 있습니다. 트래픽 스파이크가 예상되는 서비스라면 미리 최대치를 넉넉히 잡아두는 게 안전합니다. Insights 탭에서는 CPU·메모리 사용률, 응답 시간, 배포별 실패 로그를 확인할 수 있고, 배포가 실패하면 직전 정상 버전으로 자동 롤백되므로 배포 중 서비스가 완전히 죽는 상황은 거의 없습니다. 로그는 콘솔에서 실시간으로 tail할 수 있어 별도 로깅 서비스 없이도 초기 디버깅에는 충분합니다.

Droplet(VPS) vs App Platform, 언제 뭘 쓸까

  • Droplet(VPS)을 쓰는 게 나은 경우 — 서버 OS·네트워크 설정을 세밀하게 직접 제어하고 싶을 때, 여러 서비스를 한 서버에 함께 띄워 비용을 아끼고 싶을 때, Docker Compose로 복잡한 멀티 컨테이너 구성을 운영할 때.
  • App Platform을 쓰는 게 나은 경우 — 서버 관리 자체를 최소화하고 배포 자동화·HTTPS·스케일링을 맡기고 싶을 때, 팀원이 SSH 없이도 배포 상태를 콘솔에서 볼 수 있어야 할 때, 단일 API·웹 서비스처럼 구조가 단순할 때.

VPS 자체의 요금 비교나 다른 저렴한 호스팅 대안이 궁금하다면 한국 저렴한 클라우드 호스팅 5선도 참고해 보세요.

마무리

App Platform은 "서버 관리는 하기 싫지만 Heroku급 편의성은 원한다"는 요구에 정확히 맞는 서비스입니다. GitHub 저장소 연결, 빌드/실행 커맨드 지정, 환경변수 등록까지 위 순서대로 따라 하면 30분 안에 Node.js API를 운영 환경에 올릴 수 있습니다. VPS를 붙잡고 씨름할 시간에 기능 개발에 집중하고 싶다면, DigitalOcean App Platform에서 첫 앱 배포하기로 지금 바로 시작해 보세요.