Node.js 앱을 만들고 배포하는 방법

Node.js 애플리케이션을 빌드하는 것은 소프트웨어 개발 수명 주기의 첫 번째 단계에 불과합니다. 실제 환경에서 액세스 가능하고, 성능이 뛰어나며, 복원력이 뛰어난 애플리케이션을 만드는 것이 애플리케이션 배포의 핵심입니다. 최신 웹 애플리케이션을 배포하려면 트래픽 프로필, 수명 주기 단계, 리소스 예산에 맞는 아키텍처를 선택해야 합니다.

AI 지원 풀 스택 프로토타입을 출시하든, 프로덕션 등급 백엔드 서비스를 배포하든, 최신 클라우드 환경은 자동화된 경로와 컨테이너화된 경로를 모두 제공합니다. 이 가이드에서는 Node.js 웹 아키텍처의 핵심 개념을 다루고, 주요 배포 고려사항을 살펴보고, 무료 등급 허용량을 사용하여 관리형 인프라에서 Node.js 앱을 만들고 배포하는 방법을 단계별로 안내합니다.

Node.js 런타임이란 무엇인가요?

Node.js는 Chrome V8 JavaScript 엔진을 기반으로 빌드된 오픈소스 크로스 플랫폼 JavaScript 런타임 환경입니다. JavaScript가 웹브라우저 외부에서 서버 측에서 실행될 수 있도록 하여 엔지니어가 단일 프로그래밍 언어를 사용하여 통합된 풀 스택 코드베이스를 작성할 수 있도록 합니다.

동시 연결마다 격리된 운영체제 스레드를 생성하는 기존의 멀티스레드 웹 서버와 달리 Node.js는 이벤트 기반의 단일 스레드 비차단 I/O 모델에서 작동합니다. 이 아키텍처 덕분에 Node.js는 RESTful API, 실시간 메시징, 스트리밍 서비스, AI 에이전트 조정자 등 수천 개의 동시 연결을 처리하는 데 가볍고 효율적입니다.

기존 Node.js 배포와 서버리스 컨테이너 플랫폼 비교

Node.js 백엔드 배포를 준비할 때 적절한 컴퓨팅 환경을 선택하는 것은 유지보수 오버헤드, 확장 속도, 비용 효율성에 직접적인 영향을 미칩니다.

기능

가상 머신(IaaS/VPS)

PaaS/빌드팩 호스팅

최신 서버리스 컨테이너

인프라 관리

수동 OS 패치, 방화벽 관리, 런타임 업데이트

공급업체 런타임 잠금이 있는 완전 관리형 플랫폼 레이어

완전 관리형 인프라, OS 관리 불필요

확장 메커니즘

측정항목 기반 VM 자동 확장(인스턴스 가동에 몇 분 소요)

인스턴스 수 또는 작업자 한도에 따른 자동 확장

Scale-to-zero를 포함한 요청 기반 즉각적인 자동 확장

패키징 형식

원시 소스 파일, systemd 서비스 또는 PM2 프로세스 관리자

자동화된 빌드팩과 Git 푸시 저장소 통합

표준 OCI/Docker 컨테이너 이미지

유휴 비용 프로필

수신 HTTP 트래픽과 관계없이 연중무휴 24시간 청구

최소 기본 인스턴스 가격이 필요한 경우가 많음

활성 요청 처리 중 초당 엄격하게 청구

이식성

이식성이 높지만 환경 드리프트 위험이 높음

낮은 이식성, 플랫폼 규칙에 종속됨

높은 이식성, 모든 환경에서 동일한 컨테이너 실행

기능

가상 머신(IaaS/VPS)

PaaS/빌드팩 호스팅

최신 서버리스 컨테이너

인프라 관리

수동 OS 패치, 방화벽 관리, 런타임 업데이트

공급업체 런타임 잠금이 있는 완전 관리형 플랫폼 레이어

완전 관리형 인프라, OS 관리 불필요

확장 메커니즘

측정항목 기반 VM 자동 확장(인스턴스 가동에 몇 분 소요)

인스턴스 수 또는 작업자 한도에 따른 자동 확장

Scale-to-zero를 포함한 요청 기반 즉각적인 자동 확장

패키징 형식

원시 소스 파일, systemd 서비스 또는 PM2 프로세스 관리자

자동화된 빌드팩과 Git 푸시 저장소 통합

표준 OCI/Docker 컨테이너 이미지

유휴 비용 프로필

수신 HTTP 트래픽과 관계없이 연중무휴 24시간 청구

최소 기본 인스턴스 가격이 필요한 경우가 많음

활성 요청 처리 중 초당 엄격하게 청구

이식성

이식성이 높지만 환경 드리프트 위험이 높음

낮은 이식성, 플랫폼 규칙에 종속됨

높은 이식성, 모든 환경에서 동일한 컨테이너 실행

Node.js 앱을 만들 때 주요 고려사항

프로덕션에 즉시 사용 가능한 Node.js 애플리케이션을 개발하려면 병목 현상을 방지하고 업타임을 보장하는 아키텍처 패턴을 해결해야 합니다.

  • 스테이트리스(Stateless) 애플리케이션 상태: 최신 서버리스 플랫폼은 수신 트래픽에 따라 컨테이너 인스턴스를 동적으로 가동하고 중지합니다. 임시 컨테이너 디스크에 기록된 파일은 재배포 또는 축소 시 사라지므로 사용자 세션 상태, 업로드된 미디어 파일 또는 백그라운드 큐를 로컬 컨테이너 메모리 또는 로컬 디스크 경로에 저장하지 마세요. 영구 상태를 위해 Cloud Firestore, PostgreSQL용 Cloud SQL 또는 Cloud Storage와 같은 전용 관리형 서비스를 사용합니다.
  • 환경 변수 및 보안 비밀 격리: API 키, 데이터베이스 사용자 인증 정보 또는 보안 비밀 키를 소스 제어에 하드코딩하면 심각한 보안 취약점이 발생합니다. 런타임 구성은 항상 환경 변수(process.env)로 격리하고 컨테이너 런타임 수준에서 안전하게 삽입하세요.
  • 포트 바인딩 및 상태 프로브: 서버리스 컨테이너 환경은 PORT 환경 변수(일반적으로 포트 8080)와 같은 기본 대상 포트를 삽입하여 HTTP 트래픽을 라우팅합니다. Node.js 서버는 상태 및 준비 확인을 통과하기 위해 process.env.PORT || 8080에서 동적으로 리슨해야 합니다.
  • 단계적 종료 및 신호 트래핑: Node.js 애플리케이션은 SIGTERM 및 SIGINT 운영체제 신호를 가로채야 합니다. 인프라 자동 확장 처리가 축소를 시작할 때 이러한 신호를 처리하면 데이터베이스 연결이 닫히고 컨테이너가 종료되기 전에 기존 HTTP 요청이 처리를 완료할 수 있습니다.

Node.js 앱을 만들고 배포하는 방법

두 가지 기본 워크플로를 사용하여 Node.js 애플리케이션을 만들고 배포할 수 있습니다. 빠른 AI 지원 프로토타입 제작(로컬 설정 필요 없음) 또는 표준 컨테이너 기반 배포(기존 코드베이스용)입니다.

경로 A: AI Studio 빌드 모드 및 스타터 등급(무료 프로비저닝)과 같은 빠른 프로토타입 제작

빠른 프로토타입 제작과 AI 애플리케이션을 위해 Google AI Studio 빌드 모드를 사용하면 개발자가 자연어로 풀 스택 Node.js 아키텍처를 설명하고 로컬 명령줄 도구나 필수 결제 설정 없이 Cloud Run에 배포할 수 있습니다.

1단계: 빌드 모드에서 애플리케이션 초기화하기

  1. Google AI Studio로 이동하여 빌드 모드로 전환합니다.
  2. 필요한 비즈니스 로직과 프런트엔드 인터페이스를 설명하는 애플리케이션 프롬프트를 입력합니다(예: 'Node.js 백엔드와 영구 작업 관리가 포함된 인벤토리 추적 대시보드를 빌드해 줘').
  3. 통합된 에이전트가 애플리케이션 파일을 생성하고, 서버 경로를 구성하고, 관련 npm 종속 항목을 설치하고, 대화형 미리보기를 실행합니다.

2단계: 기본 제공 데이터 및 인증 구성

  • 영구 스토리지: 프롬프트에 데이터 스토리지가 필요한 경우 Cloud Firestore 또는 PostgreSQL용 Cloud SQL(개발자 버전)을 사용 설정합니다. AI Studio가 스키마, 모델, 클라이언트 연결 파일을 자동으로 작성합니다.
  • 사용자 ID: Firebase 인증을 전환하여 별도의 OAuth 리디렉션 핸들러를 수동으로 설정하지 않고도 사전 구성된 Google 로그인 흐름을 사용 설정할 수 있습니다.

3단계: 관리형 Cloud Run에 게시

  1. 상단 인터페이스에서 게시 > 시작하기 > 앱 게시를 클릭합니다.
  2. 원하는 배포 리전을 선택합니다.
  3. 애플리케이션에 커스텀 <user-defined>.ai.studio URL을 제공하고 게시합니다.
  4. 이 플랫폼은 컨테이너를 패키징하고, 기본 컴퓨팅을 프로비저닝하며, 몇 초 내에 라이브 <user-defined>.ai.studio HTTPS 프로덕션 URL을 제공합니다.

경로 B: Docker 및 Cloud Run과 같은 커스텀 Node.js 애플리케이션 배포

기존 코드베이스와 커스텀 마이크로서비스의 경우 Node.js 애플리케이션을 OCI 호환 컨테이너에 패키징하고 Cloud Run에 직접 배포합니다.

1단계: Node.js 서버 코드 구조화하기

Express, Fastify 또는 표준 Node.js 라이브러리(index.js)를 사용하여 최소한의 HTTP 서버를 만듭니다.

  • JavaScript
로드 중...

 참고: Cloud Run은 런타임에 PORT 환경 변수를 자동으로 삽입합니다. 위 코드의 대체 || 8080은 주로 배포 전에 머신에서 쉽게 로컬 테스트를 수행할 수 있도록 포함되어 있습니다.

2단계: 안전한 다단계 Dockerfile 만들기

다단계 빌드를 사용하여 애플리케이션을 패키징하여 최소한의 안전한 프로덕션 이미지를 보장합니다.

권장사항: 루트 디렉터리에 .dockerignore 파일을 만들고 여기에 node_modules 및 .env를 추가합니다. 이렇게 하면 로컬 개발 파일이 실수로 컨테이너 이미지에 번들로 포함되지 않으므로 컨테이너 이미지를 깔끔하고 안전하게 유지할 수 있습니다.

루트 디렉터리에 Dockerfile이라는 파일을 만듭니다.

  • Dockerfile
로드 중...

3단계: Cloud Run에 배포

로컬 루트 폴더에서 Google Cloud CLI를 사용하여 배포를 실행합니다. 원하는 경우 애플리케이션에 대해 <user-defined>.cloud.run 형식의 커스텀 URL을 만들 수도 있습니다.

  • Bash
로드 중...

나중에 커스텀 도메인을 매핑하려면 다음을 사용합니다.

  • Bash
로드 중...

무료 등급 및 스타터 등급 가격 책정 메커니즘

무료 할당의 작동 방식을 이해하면 Node.js 애플리케이션의 프로토타입을 제작하고 예측 가능한 방식으로 확장할 수 있습니다.

등급 유형

컴퓨팅 및 리소스 허용량

요구사항/한도

Google Cloud 스타터 등급(프로토타입 제작)

• Cloud Run: 활성 웹 애플리케이션 최대 2개

• Cloud Firestore: 스토리지 1GiB, 읽기 50,000회/일, 쓰기 40,000회/일

• Cloud SQL: PostgreSQL 개발자 버전(Scale-to-zero)

• Firebase 인증: Google 로그인 포함

• 유효한 Google 계정

• 신용카드나 결제 계정 필요하지 않음

• 단일 배포 리전 잠금

표준 Google Cloud 무료 등급(표준 계정)

• Cloud Run: 요청 200만 건/월, 180,000vCPU-초/월, 360,000GiB-초/월, 북미 네트워크 이그레스 1GB/월

• 첫 90일 동안 $300의 환영 크레딧 제공



• 연결된 Cloud Billing 계정

• 모든 리전에서 전체 플랫폼 API 액세스

등급 유형

컴퓨팅 및 리소스 허용량

요구사항/한도

Google Cloud 스타터 등급(프로토타입 제작)

• Cloud Run: 활성 웹 애플리케이션 최대 2개

• Cloud Firestore: 스토리지 1GiB, 읽기 50,000회/일, 쓰기 40,000회/일

• Cloud SQL: PostgreSQL 개발자 버전(Scale-to-zero)

• Firebase 인증: Google 로그인 포함

• 유효한 Google 계정

• 신용카드나 결제 계정 필요하지 않음

• 단일 배포 리전 잠금

표준 Google Cloud 무료 등급(표준 계정)

• Cloud Run: 요청 200만 건/월, 180,000vCPU-초/월, 360,000GiB-초/월, 북미 네트워크 이그레스 1GB/월

• 첫 90일 동안 $300의 환영 크레딧 제공



• 연결된 Cloud Billing 계정

• 모든 리전에서 전체 플랫폼 API 액세스

Google Cloud로 비즈니스 문제 해결

신규 고객에게는 Google Cloud에서 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
Google Cloud 영업 전문가와 고유한 문제에 대해 자세히 논의해 보세요.

서버리스 환경에서 Node.js를 실행하기 위한 권장사항

  1. 간결한 종속 항목으로 콜드 스타트 최적화: 사용하지 않는 개발 패키지(npm prune --production)를 삭제하고 최신 모듈 트리 셰이커(예: esbuild 또는 tsup)를 사용하여 서버 코드를 번들로 묶어 이미지 크기를 줄이고 컨테이너 초기화를 가속화합니다.
  2. 인스턴스 최댓값 구성: 샌드박스에서 라이브 프로덕션 프로젝트로 이동할 때 동시 실행 기준점을 지정하고 --max-instances(예: --max-instances 5)를 설정하여 예기치 않은 트래픽 급증이 목표 운영 예산을 초과하지 않도록 합니다.
  3. 정형 로그 유지: 정형 JSON 형식을 사용하여 로그를 stdout 및 stderr로 스트리밍합니다. 관리형 로깅 시스템은 JSON 객체를 자동으로 파싱하므로 HTTP 상태 코드, 심각도 수준, 실행 지연 시간별로 필터링할 수 있습니다.
  4. 기본 상태 점검 사용: 수신 라우팅 프록시에 준비 상태를 알리기 전에 다운스트림 데이터베이스 연결을 확인하는 명확한 HTTP 엔드포인트 프로브(예: /healthz)를 구현합니다.

다음 단계 수행

$300의 무료 크레딧과 20개 이상의 항상 무료 제품으로 Google Cloud에서 빌드하세요.

Google Cloud