Firebase 기능 Pt 1 개발 - 초기화 및 배포

최근에 Google Firebase에 발을 들여놓았는데, 입문 비용이 가장 적고, 배관도 비교적 간단하기 때문이다.특히 NodeJS 코드와 HTTPS에 대한 지원은 API 개발 초보자와 사용자를 찾는 데 이상적인 선택이 되었다.이 문서에서 NodeJS API를 시작하는 방법, 테스트하는 방법, 프로덕션 환경에 배치하는 방법에 대해 처음부터 끝까지 설명하고자 합니다.

저렴한 선택 설치 및 초기화


시작하려면 Firebase CLI가 컴퓨터에 설치되어 있는지 확인하십시오.Firebase CLI를 설치하려면 를 따르십시오.Firebase 버전 8.6.0이 설치되어 있는지 확인합니다.
$ firebase --version 
8.6.0
버전 8.6.0이 설치되어 있지 않으면 다음 명령과 NPM 을 사용하여 이 버전을 전체적으로 설치할 수 있습니다.
$ npm install -g [email protected]
$ npm install -g [email protected]
참고: npm 설치 명령을 실행할 때 EACCESS:permission denied 오류가 발생하면 변경sudo npm install...하십시오.
지금, these instructions로 가서 로그인하세요.만약 이전에Firebase를 사용한 적이 없다면, 구글 계정에 로그인하기만 하면 된다.
Firebase CLI 를 사용하여 명령줄 애플리케이션을 사용하여 Firebase 계정에 로그인합니다.
$ firebase login

? Allow Firebase to collect CLI usage and error reporting information (Y/n): N
이렇게 하면 브라우저에서 Firebase에 로그인하고 CLI에 계정 액세스 권한을 부여하는 페이지가 열립니다.로그인하면 CLI에 자격 증명이 저장되므로 항목을 초기화할 수 있습니다.
새 폴더를 만들고 명령줄 프로그램으로 이 폴더에 접근합니다.그런 다음 다음 다음 스크립트를 사용하여 초기화를 시작합니다.
$ firebase init
이 명령을 입력하면 어떤 종류의 항목을 만들 것인지 알려 줍니다.본 강좌에 대해 우리는 함수 항목 하나만 만들 것이다.화살표 키를 사용하여 함수에 들어가고 빈칸을 클릭한 다음 리턴을 눌러라.그런 다음 새 프로젝트를 만들 것인지 기존 프로젝트를 사용할 것인지 묻는 메시지가 나타납니다.[새 항목 만들기]를 선택하여 고유한 항목 이름(이 이름이 이미 사용된 경우 초기화에 실패)을 지정한 다음 항목을 호출할 이름을 선택합니다(비워 두면 기본적으로 항목 이름).
그런 다음 JavaScript 또는 TypeScript를 사용할 것인지 묻는 메시지가 나타납니다.이 프로젝트에서 JavaScript를 사용합니다.그리고 가능한 오류나 강제 실행 스타일을 포착하기 위해 ESLint를 사용하느냐는 질문에'아니오'를 선택하고, npm 설치 의존항을 사용하느냐는 질문에'예'를 선택한다.
$ firebase init

You're about to initialize a Firebase project in this directory:

  /Users/matt/Documents/test

? Which Firebase CLI features do you want to set up for this folder? Press Space to select features, then Enter to confirm your choices. Functions
: Configure and deploy Cloud Functions

=== Project Setup

First, let's associate this project directory with a Firebase project.
You can create multiple project aliases by running firebase use --add, 
but for now we'll just set up a default project.

? Please select an option: Create a new project
i  If you want to create a project in a Google Cloud organization or folder, please use "firebase projects:create" instead, and return to this command when you've created the project.
? Please specify a unique project id (warning: cannot be modified afterwa
rd) [6-30 characters]:
 irbytestproject
? What would you like to call your project? (defaults to your project ID)

✔ Creating Google Cloud Platform project
✔ Adding Firebase resources to Google Cloud Platform project

🎉🎉🎉 Your Firebase project is ready! 🎉🎉🎉

Project information:
   - Project ID: irbytestproject
   - Project Name: irbytestproject

Firebase console is available at
https://console.firebase.google.com/project/irbytestproject/overview
i  Using project irbytestproject (irbytestproject)

=== Functions Setup

A functions directory will be created in your project with a Node.js
package pre-configured. Functions can be deployed with firebase deploy.

? What language would you like to use to write Cloud Functions? JavaScript
? Do you want to use ESLint to catch probable bugs and enforce style? No
✔  Wrote functions/package.json
✔  Wrote functions/index.js
✔  Wrote functions/.gitignore
? Do you want to install dependencies with npm now? Yes

added 255 packages, and audited 256 packages in 5s

i  Writing configuration info to firebase.json...
i  Writing project information to .firebaserc...
i  Writing gitignore file to .gitignore...

프로젝트 폴더에 functions 라는 폴더가 표시됩니다.소포를 검사해 보시면이 폴더의 json 파일에서 다음과 같은 내용을 볼 수 있습니다.
{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "serve": "firebase emulators:start --only functions",
    "shell": "firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "engines": {
    "node": "10"
  },
  "dependencies": {
    "firebase-admin": "^8.10.0",
    "firebase-functions": "^3.6.1"
  },
  "devDependencies": {
    "firebase-functions-test": "^0.2.0"
  },
  "private": true
}
몇 가지 주의해야 할 점이 있다.우선, firebase emulators:startfirebase deploy 등의 명령을 보실 수 있습니다.이 명령들은 각각 로컬에서 함수를 실행하고 함수를 배치할 수 있도록 합니다.이 명령의 끝에 있는 --only functions 로고는 functions 폴더를Firebase에만 배치하기를 원합니다.

화기 API를 로컬에서 실행


API를 실행하여 무엇을 할 수 있는지 봅시다.다음 명령을 실행하여 시뮬레이터를 시작합니다.
$ firebase emulators:start

i  emulators: Starting emulators: functions
⚠  functions: The following emulators are not running, calls to these services from the Functions emulator will affect production: firestore, database, hosting, pubsub
⚠  Your requested "node" version "10" doesn't match your global version "12"
i  ui: Emulator UI logging to ui-debug.log
i  functions: Watching "/Users/matt/Documents/test/functions" for Cloud Functions...

┌───────────────────────────────────────────────────────────────────────┐
│ ✔  All emulators ready! View status and logs at http://localhost:4000 │
└───────────────────────────────────────────────────────────────────────┘

┌───────────┬────────────────┬─────────────────────────────────┐
│ Emulator  │ Host:Port      │ View in Emulator UI             │
├───────────┼────────────────┼─────────────────────────────────┤
│ Functions │ localhost:5001 │ http://localhost:4000/functions │
└───────────┴────────────────┴─────────────────────────────────┘
  Other reserved ports: 4400, 4500
현재, 시뮬레이터의 설정 방식에 따라 호스트에서 다른 값을 볼 수 있습니다: 포트 상자.내 예에서, 나는localhost:5001을 함수의 호스트와 포트로 설정했다.그러나 브라우저에서 다음 메시지가 표시되면
Cannot GET /
이것은 내 API가 활성화되어 있지만 GET에 도달하려는 끝점은 사용할 수 없다는 것을 알려 준다.이 프로젝트를 돌이켜보고 왜 이러는지 봅시다.
functions 폴더 및 패키지에 있습니다.json 파일에는 index.js 라는 다른 파일이 있습니다.색인js 파일은 우리 API의 입구점입니다.내가 색인을 열었을 때js 파일, 다음 내용을 보았습니다.
const functions = require('firebase-functions');

// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
//
// exports.helloWorld = functions.https.onRequest((request, response) => {
//   functions.logger.info("Hello logs!", {structuredData: true});
//   response.send("Hello from Firebase!");
// });

나는 두 가지 일에 주의했다.우선, 맨 위에 Firebase 함수 패키지를 가져옵니다.내가 주의한 두 번째 일은 아래의 코드가 주석되어 떨어졌다는 것이다.
Firebase functions 패키지는 Firebase의 클라우드 기능에 액세스할 수 있는 SDK입니다.이것은 환경 변수에 접근하고 HTTP 루트를 정의할 수 있도록 합니다.
주석이 떨어진 코드 중, HTTP 요청을 함수로 연결하는 명령 helloWorld 을 내보내는 데 사용되는 명령이 있습니다. 이 명령은 HTTP 요청을 함수로 연결하는 데 사용되며, 이 함수는 기록 Hello logs! 을 하고 응답 Hello from Firebase! 을 되돌려줍니다.
이 코드에 대한 주석을 취소하고 무슨 일이 일어날지 봅시다.
const functions = require('firebase-functions');

// Create and Deploy Your First Cloud Functions
// https://firebase.google.com/docs/functions/write-firebase-functions

exports.helloWorld = functions.https.onRequest((request, response) => {
  functions.logger.info("Hello logs!", {structuredData: true});
  response.send("Hello from Firebase!");
});
emulator가 실행될 때 저장된 변경 사항을 검사하고 항목을 자동으로 다시 불러옵니다.내 명령행을 검사해 보니 다음과 같은 소식이 나타났다
functions[helloWorld]: http function initialized (http://localhost:5001/irbytestproject/us-central1/helloWorld).
브라우저에서 URL에 액세스하면 "Hello from Firebase!"라는 간단한 HTML 페이지가 표시됩니다.잘 됐다!내 API 실행 중!
이제 터미널에서 로그 명령을 포착했는지 확인합니다.
i  functions: Beginning execution of "helloWorld"
>  {"structuredData":true,"severity":"INFO","message":"Hello logs!"}
i  functions: Finished "helloWorld" in ~1s
현재 우리는 우리의 API가 작동하고 있고 로그가 포착되고 있음을 볼 수 있으며, 우리는 우리의 API를 계속 배치할 것이다.

API 배포


아직 많은 것은 아니지만 우리가 이룩한 진보에 자부심을 가져야 한다.나는 세계가 이미 우리의 창조를 볼 준비가 되어 있다고 생각한다.
시뮬레이터(Ctrl+C 또는 Cmd+C 사용)를 중지하고 firebase deploy 명령을 사용합니다.우리 프로젝트에는 함수만 있기 때문에 지정--only functions 로고를 걱정할 필요가 없습니다.
$ firebase deploy


=== Deploying to 'irbytestproject'...

i  deploying functions
i  functions: ensuring required API cloudfunctions.googleapis.com is enabled...
i  functions: ensuring required API cloudbuild.googleapis.com is enabled...
✔  functions: required API cloudfunctions.googleapis.com is enabled
⚠  functions: missing required API cloudbuild.googleapis.com. Enabling now...

Error: HTTP Error: 400, Billing account for project [removed] is not found. Billing must be enabled for activation of service(s) 'cloudbuild.googleapis.com,containerregistry.googleapis.com' to proceed.
Help Token: ...
보아하니 우리는 우리의 프로젝트가 아직 비용 계산으로 설정되지 않았기 때문에 문제에 부딪힌 것 같다.문제 없어요.이 문제를 해결하려면 http://localhost:5001에 접근해서 프로젝트에 들어가서 함수를 누르고 Upgrade project를 누르십시오.
Blaze - Pay as You Go 옵션을 선택하고 청구 정보를 입력한 후 구입하십시오.
완성된 후에 우리는 배치 코드를 다시 실행할 수 있다.프로젝트 업그레이드는 몇 분 걸려야 효력이 발생할 수 있고, 그 다음에 배치하는 데 몇 분 걸릴 수 있으며, 특히 첫 번째 배치의 경우 몇 분 걸릴 수 있음을 주의하십시오.
$ firebase deploy

=== Deploying to 'irbytestproject'...

i  deploying functions
i  functions: ensuring required API cloudfunctions.googleapis.com is enabled...
i  functions: ensuring required API cloudbuild.googleapis.com is enabled...
⚠  functions: missing required API cloudbuild.googleapis.com. Enabling now...
✔  functions: required API cloudfunctions.googleapis.com is enabled
✔  functions: required API cloudbuild.googleapis.com is enabled
i  functions: preparing functions directory for uploading...
i  functions: packaged functions (54.5 KB) for uploading
✔  functions: functions folder uploaded successfully
i  functions: creating Node.js 10 function helloWorld(us-central1)...
✔  functions[helloWorld(us-central1)]: Successful create operation. 
Function URL (helloWorld): https://us-central1-irbytestproject.cloudfunctions.net/helloWorld

✔  Deploy complete!
이제 Firebase 함수 페이지를 다시 보면 HelloWorld의 함수 항목을 볼 수 있습니다.
https://console.firebase.google.com/
우리 API 테스트하러 가자!함수의 URL을 복사하여 브라우저에 넣습니다.간단한 HTML 페이지가 보일 것입니다. Hello from Firebase!

결론


Firebase Functions 프로젝트를 초기화하고 로컬에서 실행하며 Firebase에 배치하는 과정을 마쳤습니다.에서 환경 변수를 작성하고 POST, PUT 등 다양한 유형의 HTTP 방법을 처리하는 등 더 많은 개념을 소개할 것입니다.

좋은 웹페이지 즐겨찾기