이 가이드에서는 Node.js 런타임에서 실행되는 JavaScript 또는 TypeScript로 작성된 Cloud Run 서비스의 최적화를 설명합니다. 이 페이지의 정보는 Node.js에도 적용되는 일반 개발 팁을 보완합니다.
시작 시간 최적화
시작 시간을 최적화하면 지연 시간을 줄이고 응답성을 개선하며 효과적인 비용 최적화를 달성할 수 있습니다. 이 섹션에서는 시작 시간을 최적화하는 다양한 방법을 설명합니다.
npm
대신 node
를 사용하여 앱 시작
npm
이 지연 시간을 추가하므로 npm start
대신 node index.js
를 사용하여 애플리케이션을 직접 시작합니다.
node index.js
로 애플리케이션을 시작하려면 다음 방법 중 하나를 따르세요.
Dockerfile에서
CMD node index.js
를 사용합니다. 예를 들면 다음과 같습니다.CMD node index.js
node index.js
를 진입점으로 설정합니다. Google Cloud CLI를 사용하여 다음 명령어를 실행합니다.gcloud run deploy SERVICE --command "node index.js"
진입점 구성에 관한 자세한 내용과 옵션은 서비스 컨테이너 구성을 참조하세요.
Dockerfile 없이 소스 배포를 사용하는 경우 Cloud Run에서 최적화를 실행합니다.
코드 번들
번들러는 로드 시간을 단축하기 위해 JavaScript 소스 파일의 레이아웃을 최적화하는 빌드 도구입니다. 일반적인 번들러 최적화에는 트리 쉐이킹, 압축, 작은 파일 병합이 포함됩니다. 번들러는 번들의 총 크기를 대폭 줄이고 파일 읽기 요청 수를 줄입니다. 일반적인 JavaScript 번들러는 esbuild, webpack, rollup입니다.
종속 항목 지연 로드
시작 시 Cloud Run은 코드가 원격 위치에서 로드하는 각 파일을 스트리밍합니다. 로컬 파일 시스템과 비교할 때 원격 위치를 사용하면 파일을 읽을 때마다 지연 시간이 추가로 발생합니다. Node.js 패키지는 간접 종속 항목이 있는 파일을 많이 사용할 수 있습니다. 시작 시 모든 종속 항목을 가져오는 대신 서버가 시작하는 데 필요한 종속 항목만 로드하고 동적 가져오기를 사용하여 다른 종속 항목을 지연 로드하는 것이 좋습니다.
예를 들어 모듈 상단에서 import { Storage } from '@google-cloud/storage'
같은 가져오기를 사용하는 대신 가져온 객체가 필요할 때 함수에서 import()
를 사용합니다.
const { Storage } = await import('@google-cloud/storage');
시작 중에 로드되는 모듈과 각 모듈이 머신에 로드되는 데 걸리는 시간을 확인하려면 다음 명령어를 실행하세요.
node --trace-event-categories node.module_timer --trace-event-file-pattern 'trace-events.log' index.js
제한 시간 구성
Node.js 기본 제공 HTTP 서버의 기본 제한 시간은 2분입니다. Cloud Run 서비스의 요청 제한 시간이 더 긴 경우 server.setTimeout(msecs)
를 사용하여 제한 시간을 수정합니다. Express 등 Node.js 서버에 빌드된 프레임워크의 제한 시간도 수정해야 합니다. Node.js에서 무제한 제한 시간을 설정하고 Cloud Run의 기본 제공 제한 시간을 사용하려면 server.setTimeout(0)
을 사용합니다.