-
[Firebase] Firebase Functions CLI ์ฌ์ฉํ๊ธฐ, ํจ์ ๋ฐฐํฌ, ๋ฆฌ์ ๋ณ๊ฒฝPROGRAMMING/๊ธฐํ 2022. 1. 20. 13:26
Firebase ๋ Google ์ ๋ชจ๋ฐ์ผ ๋ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ํ๋ ํผ์ ๋๋ค.
์ค์๊ฐ ๋ฐ์ดํฐ ๋๊ธฐํ ๋ฑ์ ์ฅ์ ์ด ์์ด ๋ฐฑ์๋๋ฅผ ๊ตฌํํ ์ฌ๊ฑด์ด ๋์ง ์๊ฑฐ๋ ๋น์ฉ์ ์ธ ์ธก๋ฉด์ ๊ณ ๋ คํ๋ค๋ฉด ์ถฉ๋ถํ ๋งค๋ ฅ์ ์ธ ์น๊ตฌ์ ๋๋ค. (๋น์ฉ์ ์ผ๋ก '์ ๋ ด'ํ ๊ฒ์ ์ด๋๊น์ง๋ ์ฌ์ฉ์๊ฐ ์ ๊ฑฐ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ ์์คํ .. ๊ทธ๊ฒ ์๋๋ฉด Firebase ๋ ์ฌ์ฉํ๊ณ ์ค๊ฐ๋ ๋ฐ์ดํฐ ์์ ๋ฐ๋ผ ๊ฐ๊ฒฉ์ ์ฑ ์ ํ๋ฏ๋ก ๋ง์ ๋น์ฉ์ด ๋ฐ์ํ ์ ์์)
๋ค๋ง, full text search ๊ฐ ๋์ง ์๊ณ , ์ข ๋๋ฆฌ๋ค๋ ๋ฑ์ ๋จ์ ์ด ์กด์ฌํฉ๋๋ค.
ํ์ฌ ํ๋ก์ ํธ์์ firebase ๋ฅผ ์ฌ์ฉํ๊ณ ๋ ์์ง๋ง, ์ง์ ์๋ฒ๋ฅผ ๊ตฌํํ๋๋ผ๋ฉด.. ์ด๋ผ๋ ์๊ฐ์ด ์ต๊ทผ๋ค์ด ๋ค๊ธฐ๋ ํฉ๋๋ค. firebase ์ ๊ธฐ๋ณธ ๋ผ๋์ ์ด๊ฒ์ ๊ฒ์ ์ถ๊ฐํ๊ณ ์๋ ์ง๊ธ์ ๋ ์ธ๋งํ๋ค๋ ์๊ฐ๋ ๋ญ๋๋ค.
firebase ์๋ ๋ค์ํ ์ ์ฅ์ ๋ง๊ณ ๋ functions ๋ผ๋ ๊ธฐ๋ฅ์ด ์๋๋ฐ, ์ด๋ ๋ฐฑ์๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ ํธ๋ฆฌ๊ฑฐํ ์ ์๋๋ก ํด์ฃผ๋ Serverless ํ๋ ์์ํฌ์ ๋๋ค. Serverless ๋ ์๋ฒ๊ฐ '์ค์ ๋ก ๋์๊ฐ๊ณ ์๋ค' ๋ผ๊ธฐ๋ณด๋ค๋ ์๋ฒ์ ์์ฑํด๋ ๋ด์ฉ์ ํ์ํ ๋ (์์ฒญ์ด ๋ฐ์ํ๊ฑฐ๋ ํน์ ํ์๊ฐ ํธ๋ฆฌ๊ฑฐ๋ ๋ ๋ฑ) ์ฒ๋ฆฌํ๋ค๋ ๊ฒ์ ๋๋ค. Firebase ๋ BaaS (Backend as a Service) ๊ณ์ด์ด๋ฉฐ Firebase Functions ๋ FaaS (Function as a Service) ์ ๋๋ค.
Firebase ์์๋ ํ ์คํธ ๊ฒ์์ด ๋์ง ์์, ์ธ๋ถ ๊ฒ์ ์ ์ฒด๋ฅผ ํ์ฉํ๊ธฐ ์ํด functions ๋ํ ๋์ ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
(Firebase functions ๋ Blaze ์๊ธ์ ์ฌ์ผ ํฉ๋๋ค)
๊ทธ์ ๋ฐ๋ผ Firebase Functions CLI ๋ฅผ ์ค์นํ๊ณ , functions ๋ฅผ ์์ฑํ์ฌ ๋ฐฐํฌํด๋ณด๋ ๊ณผ์ ์ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
1) Firebase Functions CLI ์ค์นํ๊ธฐ
Firebase Funcitons CLI ๋ npm ์ผ๋ก ์ค์นํ ์ ์์ต๋๋ค.
$ npm install -g firebase-tools
2) firebase ์ค์
์ฒ์ firebase ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ์ด๋ฉด login ์ ๋จผ์ ํ๊ณ , ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
$ firebase login $ firebase init functions
๋ก๊ทธ์ธ์ ํ์ง ์๊ณ ์งํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด login ์ด ํ์ํ๋ค๊ณ ๋์ค๊ณ ,
login ์ ํ๋ ค๋ฉด ์๋์ ๊ฐ์ด URL ์ ํตํด firebase ์ ๋ก๊ทธ์ธํ๋ฉด ๋ฉ๋๋ค.
์ ์ ๊ฒฝ์ฐ ์ผ๋จ functions ๋ง ๊ณ ๋ คํ ๊ฑฐ๋ผ์, firebase init functions ๋ฅผ ํด์ฃผ์์ต๋๋ค.
ํ์์ ๋ฐ๋ผ firebase init firestore ๋ฑ์ ์ถ๊ฐ๋ก ์ค์นํด์ฃผ๊ฑฐ๋ firebase init ์ผ๋ก ์ง์ ๊ณ ๋ฅผ ์ ์์ต๋๋ค.
Realtime Database, Firestore, Functions, Hosting, Storage, Emulators, Remote Config ์ ์ต์ ์ด ์์ต๋๋ค.
3) functions ์์ฑ
ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก helloWorld ๊ฐ ์์ฑ๋์ด ์์ต๋๋ค. (์ฃผ์์ผ๋ก)
์ด ๋ด์ฉ์ ๊ฐ์ง๊ณ ์ค์ตํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
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!"); });
(์ฐธ๊ณ : ESLint ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋ ํ ์ค์ด 80์๋ฅผ ๋์ด๊ฐ๋ฉด ์๋๋ค)
4) functions ๋ฐฐํฌ
๋ค์ ๋ช ๋ น์ด๋ก ํจ์๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
$ firebase deploy --only functions
๋ค์๊ณผ ๊ฐ์ด ๋ฐฐํฌ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋๋ฉด, firebase console ์์๋ ํ์ธํ ์ ์์ต๋๋ค.
ํด๋น URL ์ ๋ค์ด๊ฐ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด Hello from Firebase! ๊ฐ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ, ์ง๊ธ functions ์ ๋ฆฌ์ ์ด us-central1 ์ธ๋ฐ ํ์ฌ ์ฌ์ฉํ๊ณ ์๋ firestore, storage ๋ asia-northeast3 ์ ์์ด์, functions ์ ๋ฆฌ์ ์ ๋ฐ๊ฟ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ฌ๋ฌ ๋ฆฌ์ ์์ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ฑ์ ์ง์ฐ ์๊ฐ๊ณผ ๊ฐ๊ฒฉ์ด ์ํฅ์ ๋ฐ์ ์ ์์ต๋๋ค. by firebase
๊ทธ๋ฐ๋ฐ, ์ด๋ค ๋ฆฌ์ ์ธ์ง์ ๋ฐ๋ผ functions ๊ฐ๊ฒฉ์ด ๋ค์๊ณผ ๊ฐ์ด ๋ค๋ฆ ๋๋ค.
asia-northeast3 ๋ Tier 2 (๋ฑ๊ธ 2) ๊ฐ๊ฒฉ์ด ์ ์ฉ๋๋ค๋๋ฐ, asia-northeast2 ๋ Tier 1 ์ด๋ ์ผ๋จ ์ ์ชฝ์ผ๋ก ๋ฐ๊ฟ๋ณด๊ฒ ์ต๋๋ค.
region ์ ๋ํดํธ๊ฐ us-central1 ์ธ ๊ฑฐ๋ผ ํจ์ ์์ฑ ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ด์ค์ผ ํฉ๋๋ค.
exports.helloWorld = functions .region("asia-northeast2") .https.onRequest((request, response) => { functions.logger.info("Hello logs!", {structuredData: true}); response.send("Hello from Firebase!"); });
์ด๋ฌ๊ณ deploy ๋ฅผ ํ๋ฉด ๊ธฐ์กด์ ์์ฑํ๋ ํจ์ (helloWorld) ๋ ์ด๋ฆ์ด ๋์ผํด์ ๋ฎ์ด์ฐ๊ธฐ๋ฅผ ํ ๊ฑฐ๋๊ณ ๋ฌผ์ด๋ด ๋๋ค.
์์ฑ์ด ๋๊ณ ๋๋ฉด ๊ทธ๋ผ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ๊ฒ์ console ์์ ํ์ธํ ์ ์์ต๋๋ค!
์ด๋ ๊ฒ ๋ฐฐํฌํ ํจ์๋ ์ฑ์์ URL ๋ก ์ ๊ทผํ๊ฑฐ๋ ํจ์ ํธ์ถ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
'PROGRAMMING > ๊ธฐํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ