Node.js 런타임

Cloud Run 함수는 운영체제 버전과 부가기능 패키지, 언어 지원, 함수를 지원하고 호출하는 함수 프레임워크 라이브러리로 구성된 환경에서 실행됩니다. 이 환경은 언어 버전으로 식별되며, 런타임이라고 합니다.

일반적인 런타임과 각 Node.js 런타임이 사용하는 Ubuntu 버전에 대한 자세한 내용은 Cloud Run 함수 실행 환경을 참조하세요.

Node.js를 사용하여 Cloud Run 함수를 빌드하고 배포하려면 빠른 시작을 참조하세요.

로컬 시스템에서 함수를 빌드하고 테스트하려면 함수 프레임워크로 함수 실행을 참조하세요.

런타임 선택

Cloud Run 함수는 런타임 지원 페이지에 나열된 여러 버전의 Node.js를 지원합니다. 배포 중에 함수에 대해 선호하는 Node.js 런타임을 선택할 수 있습니다.

실행 환경

실행 환경에는 런타임, 운영체제, 패키지, 함수를 호출하는 라이브러리가 포함됩니다.

Node.js 18 이상 버전은 Ubuntu 22.04 기반의 실행 환경을 사용합니다. Node.js 18 이전 버전은 Ubuntu 18.04를 기반으로 합니다. 자세한 내용은 Cloud Run 함수 실행 환경을 참조하세요.

함수를 호출하는 라이브러리는 Node.js 함수 프레임워크입니다.

소스 코드 구조

Cloud Run Functions가 함수 정의를 찾으려면 각 런타임에 소스 코드에 대한 특정 구조화 요구사항이 있어야 합니다. 자세한 내용은 Cloud Run Functions 작성을 참조하세요.

종속 항목 지정

함수에 대한 종속 항목을 지정하는 방법은 package.json 파일에 나열하는 것입니다. 자세한 내용은 Node.js의 종속 항목 지정을 참조하세요.

NPM 빌드 스크립트

기본적으로 build 스크립트가 package.json에서 감지되면 Node.js 런타임이 npm run build를 실행합니다. 애플리케이션을 시작하기 전에 빌드 단계를 추가로 제어해야 하면 gcp-build 스크립트를 package.json 파일에 추가하여 커스텀 빌드 단계를 제공하면 됩니다.

다음 중 하나를 실행하여 빌드가 npm run build 스크립트를 실행하지 않도록 할 수 있습니다.

  • 값이 비어 있는 gcp-build 스크립트를 package.json 파일에 추가합니다. "gcp-build":""

  • 빌드 환경 변수 GOOGLE_NODE_RUN_SCRIPTS를 빈 문자열로 설정하여 모든 스크립트가 실행되지 않도록 합니다.

비동기 함수 완성

콜백 또는 Promise 객체가 포함된 비동기 작업을 수행할 때는 함수가 이러한 작업의 실행을 완료했음을 런타임에 명시적으로 알려야 합니다. 다음 샘플과 같이 여러 방법으로 이 작업을 수행할 수 있습니다. 핵심은 코드가 비동기 작업 또는 Promise가 완료될 때까지 기다린 후에 반환되어야 한다는 것입니다. 그렇지 않으면 함수의 비동기 구성요소가 완료되기 전에 종료될 수 있습니다.

이벤트 기반 함수

암시적 반환

  exports.implicitlyReturning = async (event, context) => {
    return await asyncFunctionThatReturnsAPromise();
  };

명시적 반환

  exports.explicitlyReturning = function (event, context) {
    return asyncFunctionThatReturnsAPromise();
  };

HTTP 함수

Node.js

// OK: await-ing a Promise before sending an HTTP response
await Promise.resolve();

// WRONG: HTTP functions should send an
// HTTP response instead of returning.
return Promise.resolve();

// HTTP functions should signal termination by returning an HTTP response.
// This should not be done until all background tasks are complete.
res.send(200);
res.end();

// WRONG: this may not execute since an
// HTTP response has already been sent.
return Promise.resolve();

미들웨어를 사용하여 HTTP 요청 처리

Node.js HTTP Cloud Run 함수는 ExpressJS와 호환되는 requestresponse 객체를 제공하여 HTTP 요청을 간단히 사용할 수 있도록 합니다. Cloud Run 함수는 자동으로 요청 본문을 읽으므로, 사용자는 미디어 유형과 관계없이 항상 요청 본문을 받습니다. 즉, 코드가 실행될 때 HTTP 요청을 완전히 읽은 것으로 간주합니다. 이러한 점에 주의하여 ExpressJS 앱의 중첩을 사용해야 합니다. 특히 요청 본문이 읽히지 않을 것으로 예상하는 미들웨어는 제대로 동작하지 않을 수 있습니다.

ES 모듈 사용

ECMAScript 모듈(ES 모듈 또는 ESM)은 자바스크립트 모듈 로드를 위한 Node 버전 14이상에서 플래그 지정되지 않은 TC39 표준 기능입니다. CommonJS와 달리 ESM은 모듈 로드를 위해 비동기 API를 제공합니다. 또한 require 문 대신 Cloud Run 함수 내에서 사용될 수 있는 importexport 문으로 인기 있는 문법 개선 사항을 제공합니다.

Cloud Run 함수 내에서 ESM을 사용하려면 package.json 내에서 "type": "module"을 선언해야 합니다.

{
  ...
  "type": "module",
  ...
}

그런 다음 importexport문을 사용할 수 있습니다.