3.15.0
๋จ ํ๋์ ํจ์๋ก ๊ฐ๋จํ functions
๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋์ญ์์ค:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.ping = functions.https.onRequest((req, res) => {
res.status(200).send('pong');
}
์ด์ firebase deploy --only functions
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐํฌํฉ๋๋ค.
๋ ๋น ๋ฅด๊ฒ ๋ฐฐํฌํ์ธ์. ์ด์ ์์ ๊ธฐ๋ฅ ํ์ผ์ ๋ฐฐํฌํ๋ ๋ฐ ๋ช ๋ถ์ด ๊ฑธ๋ฆฝ๋๋ค. ์ด๊ฒ์ ํธ์คํ ์ ๋ก๋/๋ฐฐํฌ์ ๋น๊ตํ๋ฉด ๊ทธ ํ์ผ์ ๋งค์ฐ ๋น ๋ฅด๊ณ ํ๋์ ํ์ผ๋ณด๋ค ํจ์ฌ ๋ง์ต๋๋ค.
์
๋ก๋/๋ฐฐํฌํ๋ ๋ฐ ๋งค์ฐ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. preparing functions directory for uploading...
๋จ๊ณ์์ ์ค๋จ๋ฉ๋๋ค.
firebase deploy --only functions
์ ๋ํ ๋๋ฒ๊ทธ ๋ก๊ทธ:
_์ฌ์ ๋จ๊ณ์์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง๋ง ๋์ผํ ์์ด๋์ด์
๋๋ค. ๋ช ์ค์ ์ฝ๋๋ง ์๋ ์์ ๊ธฐ๋ฅ์
๋๋ค._
> firebase deploy --only functions --debug
[2017-11-14T10:03:55.799Z] ----------------------------------------------------------------------
[2017-11-14T10:03:55.804Z] Command: C:\Program Files\nodejs\node.exe C:\Program Files\nodejs\node_modules\firebase-tools\bin\firebase deploy --only functions --debug
[2017-11-14T10:03:55.806Z] CLI Version: 3.15.0
[2017-11-14T10:03:55.806Z] Platform: win32
[2017-11-14T10:03:55.806Z] Node Version: v6.11.1
[2017-11-14T10:03:55.807Z] Time: Tue Nov 14 2017 04:03:55 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:03:55.807Z] ----------------------------------------------------------------------
[2017-11-14T10:03:55.826Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
[2017-11-14T10:03:55.827Z] > authorizing via signed-in user
[2017-11-14T10:03:55.831Z] >>> HTTP REQUEST GET https://admin.firebase.com/v1/projects/marktec-itesm
Tue Nov 14 2017 04:03:55 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:03:56.230Z] <<< HTTP RESPONSE 200 server=nginx, date=Tue, 14 Nov 2017 10:03:57 GMT, content-type=application/json; charset=utf-8, content-length=108, connection=close, x-content-type-options=nosniff, strict-transport-security=max-age=31536000; includeSubdomains, cache-control=no-cache, no-store
[2017-11-14T10:03:56.232Z] >>> HTTP REQUEST GET https://admin.firebase.com/v1/database/marktec-itesm/tokens
Tue Nov 14 2017 04:03:56 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:03:56.622Z] <<< HTTP RESPONSE 200 server=nginx, date=Tue, 14 Nov 2017 10:03:57 GMT, content-type=application/json; charset=utf-8, content-length=262, connection=close, x-content-type-options=nosniff, strict-transport-security=max-age=31536000; includeSubdomains, cache-control=no-cache, no-store
=== Deploying to 'marktec-itesm'...
i deploying functions
[2017-11-14T10:03:57.040Z] > [functions] package.json contents: {
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"serve": "firebase serve --only functions",
"shell": "firebase experimental:functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"dependencies": {
"firebase-admin": "~5.4.2",
"firebase-functions": "^0.7.1"
},
"private": true
}
i functions: ensuring necessary APIs are enabled...
i runtimeconfig: ensuring necessary APIs are enabled...
[2017-11-14T10:03:57.043Z] >>> HTTP REQUEST GET https://servicemanagement.googleapis.com/v1/services/cloudfunctions.googleapis.com/projectSettings/marktec-itesm?view=CONSUMER_VIEW
Tue Nov 14 2017 04:03:57 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:03:57.044Z] >>> HTTP REQUEST GET https://servicemanagement.googleapis.com/v1/services/runtimeconfig.googleapis.com/projectSettings/marktec-itesm?view=CONSUMER_VIEW
Tue Nov 14 2017 04:03:57 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:03:57.479Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:03:58 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
+ functions: all necessary APIs are enabled
[2017-11-14T10:03:57.488Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:03:58 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
+ runtimeconfig: all necessary APIs are enabled
[2017-11-14T10:03:57.489Z] >>> HTTP REQUEST GET https://appengine.googleapis.com/v1/apps/marktec-itesm
Tue Nov 14 2017 04:03:57 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:03:57.490Z] >>> HTTP REQUEST GET https://apikeys.googleapis.com/v1/projects/marktec-itesm/apiKeys
Tue Nov 14 2017 04:03:57 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:03:57.775Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:03:58 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:03:57.950Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:03:58 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
i functions: preparing functions directory for uploading...
[2017-11-14T10:05:52.258Z] >>> HTTP REQUEST GET https://runtimeconfig.googleapis.com/v1beta1/projects/marktec-itesm/configs
Tue Nov 14 2017 04:05:52 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:05:52.676Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:05:53 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
i functions: packaged functions (22.1 KB) for uploading
[2017-11-14T10:06:01.593Z] >>> HTTP REQUEST GET https://www.googleapis.com/storage/v1/b/staging.marktec-itesm.appspot.com
Tue Nov 14 2017 04:06:01 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:01.940Z] <<< HTTP RESPONSE 200 x-guploader-uploadid=AEnB2UpSfip_C_K1wvCJaLNVW1q05_zW3D3fph0U7sYHr6_9M5InFI0Pi_X1VFc8B5PpbZImDdZiAaZZLqWXdl-JxdzedIZeExTeX4ifDbfvg7G8tsjPm1Y, etag=CAE=, vary=Origin, X-Origin, content-type=application/json; charset=UTF-8, expires=Tue, 14 Nov 2017 10:06:02 GMT, date=Tue, 14 Nov 2017 10:06:02 GMT, cache-control=private, max-age=0, must-revalidate, no-transform, content-length=548, server=UploadServer, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", connection=close
[2017-11-14T10:06:01.942Z] >>> HTTP REQUEST POST https://www.googleapis.com/upload/storage/v1/b/staging.marktec-itesm.appspot.com/o?uploadType=media&name=firebase-functions-source ReadStream {
_readableState:
ReadableState {
objectMode: false,
highWaterMark: 65536,
buffer: BufferList { head: [Object], tail: [Object], length: 1 },
length: 22627,
pipes: null,
pipesCount: 0,
flowing: null,
ended: true,
endEmitted: false,
reading: false,
sync: false,
needReadable: false,
emittedReadable: true,
readableListening: false,
resumeScheduled: false,
defaultEncoding: 'utf8',
ranOut: false,
awaitDrain: 0,
readingMore: false,
decoder: null,
encoding: null },
readable: true,
domain: null,
_events: { end: [Function] },
_eventsCount: 1,
_maxListeners: undefined,
path: 'C:\\Users\\benja\\AppData\\Local\\Temp\\firebase-functions-69565Vb7CkPZp0rr.zip',
fd: 6,
flags: 'r',
mode: 438,
start: undefined,
end: undefined,
autoClose: true,
pos: undefined,
bytesRead: 22627 }
Tue Nov 14 2017 04:06:01 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:02.601Z] <<< HTTP RESPONSE 200 x-guploader-uploadid=AEnB2UqV_ml27ZAt9W3ouCst97NUKPW4MeltDmxl06PA4sGBy6A8fqo0bAbEKHT0vokHMXo0t0yhOY0ve3XT0RrLjsiDwXyhwA, etag=CJPx8MbovdcCEAE=, vary=Origin, X-Origin, content-type=application/json; charset=UTF-8, cache-control=no-cache, no-store, max-age=0, must-revalidate, pragma=no-cache, expires=Mon, 01
Jan 1990 00:00:00 GMT, date=Tue, 14 Nov 2017 10:06:03 GMT, content-length=860, server=UploadServer, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", connection=close
+ functions: functions folder uploaded successfully
[2017-11-14T10:06:02.604Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/projects/marktec-itesm/locations/us-central1/functions
Tue Nov 14 2017 04:06:02 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:02.845Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:03 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
i functions: updating function verifyItesmDomain...
[2017-11-14T10:06:02.849Z] Trigger is: resource=projects/marktec-itesm, eventType=providers/firebase.auth/eventTypes/user.create
[2017-11-14T10:06:02.851Z] >>> HTTP REQUEST PUT https://cloudfunctions.googleapis.com/v1beta2/projects/marktec-itesm/locations/us-central1/functions/verifyItesmDomain { sourceArchiveUrl: 'gs://staging.marktec-itesm.appspot.com/firebase-functions-source',
name: 'projects/marktec-itesm/locations/us-central1/functions/verifyItesmDomain',
entryPoint: 'verifyItesmDomain',
timeout: '60s',
availableMemoryMb: 256,
labels: { 'deployment-tool': 'cli-firebase' },
eventTrigger:
{ resource: 'projects/marktec-itesm',
eventType: 'providers/firebase.auth/eventTypes/user.create' } }
Tue Nov 14 2017 04:06:02 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:03.064Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:03 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:03.068Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:03 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:03.257Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:04 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:05.262Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:05 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:05.428Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:06 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:07.431Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:07 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:07.603Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:08 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:09.606Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:09 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:09.755Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:10 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:11.757Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:11 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:11.912Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:12 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:13.913Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:13 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:14.078Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:14 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:16.080Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:16 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:16.249Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:17 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:18.252Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:18 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:18.405Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:19 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:20.406Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:20 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:20.588Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:21 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:22.591Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:22 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:22.753Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:23 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:24.768Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:24 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:24.952Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:25 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
+ functions[verifyItesmDomain]: Successful update operation.
+ Deploy complete!
Project Console: https://console.firebase.google.com/project/marktec-itesm/overview
์ ์ถํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ์ฐ๋ฆฌ๋ ๋๋ฆฐ ๋ฐฐํฌ๊ฐ ๊ธฐ๋ฅ ๊ฒฝํ์ ์ฃผ์ ๋ฌธ์ ์ ์์ ์๊ณ ์์ผ๋ฉฐ ๋ค์ํ ์ ๋ต์ ํตํด ํด๊ฒฐํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
@laurenzlong
Firebase๋ฅผ ์ฒ์ ์ ํ๋ ์ฌ๋์ผ๋ก์ ์ธ๋ป ๋ณด๊ธฐ์ ๋ด๊ฐ ๋ญ๊ฐ๋ฅผ ์๋ง์ผ๋ก ๋ง๋ค๊ณ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋ฐฐํฌ๊ฐ ํญ์ _functions: prepare functions ๋๋ ํ ๋ฆฌ for uploading..._ ๋ถ๋ถ์์ ์ค์ง๋์๊ธฐ ๋๋ฌธ์
๋๋ค.
๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๋๊น์ง ๋ช ๊ฐ์ง ์ถ๊ฐ ์ ๋ณด(์: ์๋ฃํ๋ ๋ฐ 3-5๋ถ ์์)๋ฅผ ์ ๊ณตํ๋ฉด ์ ๋ง ์ข์ต๋๋ค.
๋ด๋น๋ก์ ๋๋ ๋ด๊ฐ ๋ญ๊ฐ๋ฅผ ์๋ชปํ๊ณ ์๋ค๋ ์๊ฐ์ ์ฌ๋ฌ ๋ฒ ์ทจ์ํ์ต๋๋ค.
๋ฌธ์ ๋ ๋ถ๋ช ํฉ๋๋ค. init ๋ช ๋ น์ ๊ฑฐ๋ํ '๋ ธ๋ ๋ชจ๋' ํด๋๋ฅผ ์์ฑํ์ต๋๋ค. ๋ด ์ปดํจํฐ์๋ 22,903๊ฐ์ ํ์ผ, 2,782๊ฐ์ ํด๋๊ฐ ์์ต๋๋ค. ์ฝ๋๋ ์ด ๋ชจ๋ ๊ฒ์ ์์ ํด๋์ ๋ณต์ฌํฉ๋๋ค.
๋ด๊ฐ ํ ์ผ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
prepareFunctionsUpload.js์ 26ํ:
fs.copySync(options.config.path(options.config.get('functions.source')), tmpdir.name);
ํจ์ ํด๋๋ CLI ๋ช ๋ น init์ ์ํด ์์ฑ๋์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ ๋๋ค.
CLI ๋ช ๋ น init๊ฐ ํด๋น node_modules ํด๋๋ฅผ ์์ฑํด์๋ ์ ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. 165MB์ ๋์ฉ๋์ ๋๋ค. ๋ชจ๋ ํ๋ก์ ํธ์ ์ถ๊ฐํ๋ ๊ฒ์ ๋ถํฉ๋ฆฌํ ๊ฒ ๊ฐ์ต๋๋ค.
@thomasfischerm
๊ทธ๊ฒ์ ์ค์ ๋ก ๋ฌธ์ ๊ฐ ์๋๋๋ค. ๋ค์ ์ค์์ ๋ณผ ์ ์๋ฏ์ด node_modules๋ ์์ ํด๋๋ก ๋ณต์ฌ๋์ง ์์ต๋๋ค. https://github.com/firebase/firebase-tools/blob/master/lib/prepareFunctionsUpload.js#L76
firebase init
๊ฐ ๋ชจ๋ ๋
ธ๋ ๋ชจ๋์ ํจ์ ์์ค ํด๋ ๋ด๋ถ์ ๋ก์ปฌ๋ก ์ค์นํ๋ ๋ฐ ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ก์ปฌ์์ ํจ์๋ฅผ ์ ๊ณตํ์ง ์๊ณ ํธ๋ฆฌ๊ฑฐ ์ถ์ถ์ด ์๋ํ์ง ์์ต๋๋ค(์ด๊ฒ์ด CLI๊ฐ ๊ฐ ๋
ธ๋๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ์ด๋ฒคํธ๋ฅผ ์ดํดํ๋ ๋ฐฉ๋ฒ์
๋๋ค. ์ ๋๋ก ๋ฐฐํฌํ ์ ์๋๋ก ๊ธฐ๋ฅ).
26ํ๊ณผ ๊ทธ ๋ค์ ๋๋ฒ๊ทธ ์ธ์ ํ์ ๋ฃ์์ต๋๋ค. ๊ทธ ์ค์ ๋ช ๋ถ์ด ๊ฑธ๋ ธ์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋ณต์ฌ ์ค์ธ ํ์ผ์ ์ธ์ํ๋ ํํฐ๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋ชจ๋ node_modules ํ์ผ์ด ํฌํจ๋์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ node_module ํ์ผ์ ์ ์ธํ๋๋ก ํํฐ๋ฅผ ๋ณ๊ฒฝํ์ต๋๋ค. ์ด์ ๋ฐฐํฌ๊ฐ ๋น ๋ฅด๊ฒ ์งํ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ์ ํ ์คํฌ๋ฆฝํธ๊ฐ ํด๋ผ์ฐ๋ ๊ธฐ๋ฅ์ ์ ํ์ฑ์ ํ๊ฐํ๋ ค๋ ๊ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค. ํด๋น ์ฝ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ข ์์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ์คํจํ์ต๋๋ค.
๋น์ ์ด ๊ฐ๋ฆฌํค๋ ์์ค ์ฝ๋ ๋ผ์ธ์ ๋์ค ๋จ๊ณ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ผ(node_modules ์ ์ธ)์ด ํด๋ผ์ฐ๋์ ์ ๋ก๋ํ๊ธฐ ์ ์ zip ํ์ผ๋ก ์์นด์ด๋ธ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ ์ค์ด ๋ด ์ปดํจํฐ์์ ๋๋ฆฌ๊ฒ ์คํ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ค ๋ง์์. ์ ๊ฐ ์ฐฉ๊ฐํ์ต๋๋ค. node_modules๋ ๋ณต์ฌ๋ฉ๋๋ค. node_modules๋ฅผ ์์ ๋๋ ํ ๋ฆฌ๋ก ๋ณต์ฌํ์ง ์๋ ๊ฒ์ด ์ ํจํ ์์ด๋์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ ์กฐ๊ธ ๋ณต์กํ๊ฒ ๋ง๋๋ ๊ฒ์ ๊ตฌ๋ฌธ ๋ถ์์ ํธ๋ฆฌ๊ฑฐํ๊ธฐ ์ ์ CLI๊ฐ ์์ ํด๋์ ".runtimeconfig.json"์ ์์ฑํ๊ณ ์ด ํ์ผ์ด ๋๋จธ์ง ๊ธฐ๋ฅ ์์ค ์ฝ๋์ ํจ๊ป ์ ๋ก๋๋๊ณ ์ฐ๋ฆฌ๋ ์์ฑํ๊ณ ์ถ์ง ์๋ค๋ ์ฌ์ค์ ๋๋ค. ์ด ํ์ผ์ ์ค์ ์์ค ์ฝ๋ ๋๋ ํ ๋ฆฌ์ ๋ฃ์ต๋๋ค. ๋ฐ๋ผ์ ๋ฐฐํฌ ์๋๋ฅผ ๊ฐ์ ํ๊ณ ์๋ํ์ง ์์ ๋ถ์์ฉ์ด ์๋๋ก ํ๋ ์ข์ ์๋ฃจ์ ์ด ์์ ์ ์์ง๋ง ์ฝ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํฉ๋๋ค. ํ ๋ฆฌํ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ํ ์๋ ์์ต๋๋ค.
๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ firebase-tools๊ฐ ์ค๋จ๋์๋ค๊ณ ์๊ฐํ์ง ์๋๋ก "๋๋ ํ ๋ฆฌ ์ค๋น ์ค..." ๋จ๊ณ์์ ๋ ๋ง์ ๋ฉ์์ง๋ฅผ ์ธ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
ํธ์ง: ์ด๊ฒ์ Ubuntu WSL์ ์์์ต๋๋ค. Linux์์๋ "์ค๋น" ๋จ๊ณ๊ฐ ์ค๋จ๋์ง ์์ต๋๋ค. "ํจ์ ์์ฑ" ๋จ๊ณ๋ ๋๋ฆด ์ ์์ง๋ง ์ด์ ์ ๊ฒฝํํ๋ ๋งํผ์ ์๋๋๋ค.
์ด ๋ฌธ์ ๋ ์ ๋ง ๊ณจ์น ์ํ ๋ฌธ์ ์ ๋๋ค. ๋์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค./
๋ด ํ๋ก์ ํธ์ Firebase ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ค๊ณ ํ๋๋ฐ ์ด ์ค๋ฅ๋ก ์ธํด ์ฐ๊ธฐํด์ผ โโํ์ต๋๋ค.
์ด ์ค๋ฅ๋ก ์ธํด ๋ง์ ์๊ฐ์ด ๋ญ๋น๋์์ต๋๋ค.
๊ณง ์์ ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค!
์ด ๋ฌธ์ ๋ ํฐ ์ฅ์ ๋ฌผ์ ๋๋ค. ๋๋ถ๋ถ ๋ด๊ฐ firestore๋ฅผ ์ฌ์ฉํ๊ณ ์ง๊ณ, ์นด์ดํฐ ๋ฐ ํ๋ ์ฆ์ค์ ๊ฐ์ ํญ๋ชฉ์ ํด๋ผ์ฐ๋ ๊ธฐ๋ฅ์ ์ํด์๋ง ์ ์ ํ๊ฒ ์ฒ๋ฆฌ๋ ์ ์๊ณ ๋งค๋ฒ 5๋ถ ๋์ ๋ฉ์ถฅ๋๋ค.
@PulpoEnPatineta ์ค๋ฅ๊ฐ ์๋๋๋ค. ์ด๊ฒ์ ๋จ์ํ ๋ฐฐํฌ ์๊ฐ๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ์ ๋๋ค.
@McStuffins ์๋์ฐจ๊ฐ ์ผ์ง๋ ๋ฐ 5๋ถ์ด ๊ฑธ๋ฆฐ๋ค๋ฉด ์ค๋ฅ์ธ๊ฐ์ ์๋๋ฉด ๋จ์ํ ์์ ์๊ฐ ๋ฌธ์ ์ธ๊ฐ์?
์ด๊ฒ์ ๋ํ ์์ ์ฌํญ์ด ์์ต๋๊น? ์ ๋ง ์์ฒญ๋๊ฒ ๋๋ฆฝ๋๋ค.
์ฒ์๋ถํฐ ์ด ๋ฌธ์ ๋ฅผ ์ถ์ ํ์ง๋ง CD๋ฅผ ์ค์ ํ๊ณ ๋ชจ๋ ์์ ์ ์ํํ๋ฏ๋ก ๋ฌธ์ ๊ฐ ๋ ์ ์ด ์์ต๋๋ค. ๋๋ ๋ํ ์๋ ์ฌ๋ถ๋ฅผ ํ ์คํธํ๊ธฐ ์ํด ํจ์๋ฅผ ๋ฐฐํฌํ์ง ์์ต๋๋ค. ๊ทธ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ทธ๊ฒ์ ๋์๊ฒ ์ค์ํ์ง ์์์ต๋๋ค.
์ค๋๊น์ง ์์์น ๋ชปํ ํ๊ณ์ ๋ถ๋ช์ณค์ต๋๋ค. ๋ ์ด์ ๊ธฐ๋ฅ์ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ํ๋ก๋์ ๋ฐฐํฌ๊ฐ ์ผ์ผ ํ ๋น๋(12,000์ด)์ ์ด๊ณผํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ค์ํ ํธ๋ฆฌ๊ฑฐ(pubsub, firestore, https)๊ฐ ์๋ ~55๊ฐ์ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ์ฒ๋ฆฌํ๊ธฐ์๋ ๋๋ฌด ๋ง์๊ฐ์?
์ด์ ์ดํ ๋์ ๋ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํด์ผ ํฉ๋๋ค.
๊ฐ๋ ๋ฐฐํฌํ ๋ ์๋๊ฐ ๋๋ฌด ๋๋ฆฌ๋ค๊ฐ ํฐ๋ฏธ๋์ "์ค๋ฅ in build environment"๋ผ๋ ๊ฒฝ๊ณ ๊ฐ ๋จ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
@srinurp ์์ ๋งํฌ๋ pull request๋ฅผ ์ฐธ์กฐํ์ธ์. ๋ฌธ์ ์ ์ผ๋ถ๋ฅผ ํด๊ฒฐํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐฑ์๋ ํ์ ๋ฌธ์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค(๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋งค์ฐ ๋ณต์กํ ์์ ์ด๋ฏ๋ก ์ํดํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.)
@merlinnot ๋ฐฐํฌํ ๋๋ง๋ค ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ํ ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํ์ง ์๋ ํ --only ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๊ฐ๋ณ ๊ธฐ๋ฅ ๋๋ ๊ธฐ๋ฅ ๊ทธ๋ฃน์ ๋ฐฐํฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค. https://firebase.google.com/docs/cli/#partial_deploys๋ฅผ ์ฐธ์กฐํ์ธ์.
@McStuffins "๋น๋ ํ๊ฒฝ์ ์ค๋ฅ"๋ ์ผ๋ฐ์ ์ผ๋ก ํ๋ก๋์ ๋ฌธ์ ๋ฅผ ๋ํ๋ ๋๋ค. ์ด ๊ฒฝ์ฐ https://firebase.google.com/support/ ์์ ์ง์ ํฐ์ผ์ ์ ์ถํ์ธ์. Firebase ์ํ ๋์๋ณด๋
@laurenzlong ๋ฐฐํฌ ๊ฐ์ ๊ฐ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝ ์ฌํญ์ ์๋์ผ๋ก ๊ฐ์งํ๋๋ก CI๋ฅผ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค(์ข
์์ฑ ํด๊ฒฐ ํฌํจ). ๋ชจ๋ ๋จ์ผ ๊ธฐ๋ฅ์์ ์ฌ์ฉํ๋ firebase-functions
, firebase-admin
, lodash
๋ฑ๊ณผ ๊ฐ์ ํจํค์ง๋ฅผ ์
๋ฐ์ดํธํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
@merlinnot ๋งค์ฐ ํฉ๋ฒ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์ ๋๋ค. ๋ฐฐํฌ ํ ๋น๋์ Google Cloud Functions์์ ์ ์ดํ๋ฏ๋ก ๊ณต๊ฐ ๋ฌธ์ ์ถ์ ๊ธฐ์ ์์ฒญ์ ์ ์ถํ๋ ๊ฒ์ด ์ข์ต๋๋ค. https://cloud.google.com/functions/docs/support
๊ด์ฌ ์๋ ๋ชจ๋ ์ฌ๋: https://issuetracker.google.com/issues/71385193
@laurenzlong ์์ค๋ฅผ ๋ณต์ฌํ ๋ node_modules
ํด๋๋ฅผ ๋ฌด์ํ๊ณ npm install --production
๋๋ yarn install --production
๋ฅผ ์ํํ ์ ์์ต๋๊น? ์ด๋ฌํ ๋๊ตฌ๋ ๋จ์ํ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๋ ๊ฒ๋ณด๋ค ๋น ๋ฅผ ์ ์์ต๋๋ค.
@horacehylee
์ด๊ฒ์ ํ๊ธฐ์ ์ธ ๋ณํ์ผ ์ ์์ต๋๋ค. ์ด๋ค ์ฌ๋๋ค์ (๋ ์์ ์ ํฌํจํ์ฌ) ์ฌ์ ํ ์๋ ๊ฒฝ๋ก(์: "package-name": "./externs/package.tgz")๋ก ํจํค์ง๋ฅผ ์ฐธ์กฐํ ์ ์์ต๋๋ค. ์ฃผ๋ก ๊ฐ์ธ ์ ์ฅ์์ ( ํ์ฌ ์์ ๋ ) ๋ฌธ์ ๋๋ฌธ์
๋๋ค. ๋๊ตฌ๋ ์ด๋ฌํ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
๋ค๋ฅธ ํ๋๋ ์บ์ฑ์ ๋๋ค. Google์ด ์ฌ์ฉ์๋ฅผ ๋์ ํ์ฌ ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ํ๋ ค๋ฉด ๋ด๋ถ ์บ์ฑ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ชจ๋ ์ปดํจํฐ์ ๋ก์ปฌ ์บ์๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค(npm๊ณผ yarn ๋ชจ๋ ์บ์ฑ ๋ฉ์ปค๋์ฆ์ด ์์ต๋๋ค). ๋ฐ๋ผ์ npm์ ์๋ฒ๋ฅผ ์ฃฝ์ด์ง ์์ต๋๋ค.
์ด๋ค ์ฌ๋๋ค์ ๋จ์ํ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ผ๋ถ ๋ณ๊ฒฝ ์ฌํญ์ ํ ์คํธํ๊ธฐ๋ฅผ ์ํ ์๋ ์์ต๋๋ค. ํ์ผ์ ๋ณ๊ฒฝํ๊ณ ๊ธฐ๋ฅ์ ๋ฐฐํฌํ๋ ๊ฒ์ด ํฌํฌ๋ฅผ ๋ง๋ค๊ณ , ๋ณ๊ฒฝํ๊ณ , ํจํค์ง์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ผ์์ ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ์ฝ์ต๋๋ค...
๊ฒฐ๋ก : ์ ์๋ํฉ๋๋ค. ์ง๊ธ ๊ทธ๋๋ก ๋์ญ์์ค :+1:
@horacehylee @merlinnot 2์ผํธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. https://github.com/firebase/firebase-tools/pull/578 ์ ์ฐธ์กฐํ์ญ์์ค. CLI์ ๋ค์ ๋ฆด๋ฆฌ์ค๋ ๋ ์ด์ ๊ธฐ๋ฅ ์์ค ํด๋ ๊ธฐ๊ฐ์ ๋ณต์ฌํ์ง ์์ต๋๋ค.
1Gbps ํ์ด๋ฒ ์ฐ๊ฒฐ์ ์๋ 6๊ฐ์ 4GHz ์ฝ์ด ์์คํ ์ 5๋ผ์ธ, 1kb ๊ธฐ๋ฅ์ ๋ฐฐํฌํ๋ ๋ฐ ๋ช ๋ถ์ด ๊ฑธ๋ฆฌ๋ firebase๊ฐ ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋ด๊ฐ ์ค์ค์ ์ธ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฌ์ง๋ง "์ ๋ก๋๋ฅผ ์ํ ๋๋ ํ ๋ฆฌ ์ค๋น ์ค"์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ง์ฌ์ผ๋ก ๊ถ๊ธํฉ๋๋ค. ์ค์ ๋ก ์๋ ์ฌ๋์ด ์์ต๋๊น?
๋ ธ๋ ๋ชจ๋์ ํฌํจํ ๊ธฐ๋ฅ ๋๋ ํ ๋ฆฌ๋ฅผ tmp ๋๋ ํ ๋ฆฌ์ ๋ณต์ฌํฉ๋๋ค.
๋ค์ ๋ฆด๋ฆฌ์ค์์๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฏ๋ก ๋ ์ด์ ์ด์ ์ ๋ณต์ฌํ ํ์๊ฐ ์์ต๋๋ค.
๋ฐฐํฌ ์ค.
2018๋ 1์ 7์ผ ์ผ์์ผ ์คํ 5:05 hmexx [email protected] ์์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์ต๋๋ค.
Firebase์์ MINUTES๊ฐ ๊ฑธ๋ฆฌ๋ ์์ ์ด ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
6๊ฐ์ 4GHz ์ฝ์ด ๋จธ์ ์ 5๋ผ์ธ, 1kb ๊ธฐ๋ฅ์ ๋ฐฐ์นํ๊ณ
1Gbps ํ์ด๋ฒ ์ฐ๊ฒฐ.๋ด๊ฐ ์ค์ค์ ์ธ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฌ๋ ๊ฒ์ ์์ง๋ง ์ง์ฌ์ผ๋ก ๋ฌด์์ธ์ง ๊ถ๊ธํฉ๋๋ค.
"์ ๋ก๋ํ ๋๋ ํ ๋ฆฌ ์ค๋น ์ค"์ด ์งํ ์ค์ ๋๋ค. ์ค์ ๋ก ์๋ ์ฌ๋์ด ์์ต๋๊น?โ
์ด ์ค๋ ๋์ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฉ์์ง๋ฅผ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/firebase/firebase-tools/issues/536#issuecomment-355868154 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AAAD_nUptJWFuYGvEXI0MwmQR-bG9_MKks5tIWm1gaJpZM4QdF3g
.
@mbleigh
์ ๋ง๋ค. ๊ทธ๊ฒ์ ๊ทธ๊ฒ์ ์ค๋ช ํฉ๋๋ค. ์ํฌ์คํ ์ด์ ์ด 1~2๋ถ ๋์ ๋ฏธ์ณ ๋์๊ฐ๋ ๊ฒ์ ๋ณด๋ ๊ฒ์ ์ผ์ข ์ ์ฝ๋ฏธ๋์ ๋๋ค. ๋ค์ ์ค์ "ํจํค์ง๋ ๊ธฐ๋ฅ( 37.55kb !!!) ์ ๋ก๋์ ์ฑ๊ณตํ์ต๋๋ค"๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
๋ค์ ๋ฆด๋ฆฌ์ค๋ฅผ ๊ธฐ๋ํ์ญ์์ค. ์๋ตํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์๊ฐ.
19์ผ์ฐจ. Firebase๊ฐ ์์ง ๋ฐฐํฌ ์ค์ ๋๋ค. * ํ์ฝ์ ์์ผ์ฅ๋ค *
์.
๋ค์ ๋ฆด๋ฆฌ์ค๋ ์ธ์ ์์ ๋์ด ์์ผ๋ฉฐ ๋ฐฐํฌ ์๊ฐ์ ๋ช % ๊ฐ์ ์ ๊ธฐ๋ํด์ผ ํฉ๋๊น?
์ด ๊ธธ์ ๊ณ์ ๊ฐ์ง ๋ง์ง ์๋ฉด ๋ฉ๋๋ค.
์ด๋ฒ ์ฃผ์ ์ถ์๋ ์์ ์ด๋ฉฐ "์ค๋น ์ค"
๋ฐฐํฌ๋ฅผ ์ํ ๊ธฐ๋ฅ ๋๋ ํ ๋ฆฌ" ๋จ๊ณ๊ฐ ํจ์ฌ ๋ ๋นจ๋ผ์ง๋๋ค(๋๋
์ ํํ ์ซ์๊ฐ ์์ด์ผ ํจ). ๋ฐฐํฌ์ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ณ๊ฒฝ๋์ง ์์ ์ํ๋ก ์ ์ง๋ฉ๋๋ค.
2018๋ 1์ 15์ผ ์์์ผ ์คํ 12์ 42๋ถ์ hmex [email protected] ์์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์ต๋๋ค.
์.
๋ค์ ๋ฆด๋ฆฌ์ค๋ ์ธ์ ์์ ์ด๋ฉฐ ๋ฐฐํฌ ๊ฐ์ ๋ฅ ์ ๋ช %์ ๋๊น?
์๊ฐ์ ์์ํด์ผ ํฉ๋๊น?์ด ๊ธธ์ ๊ณ์ ๊ฐ์ง ๋ง์ง ์๋ฉด ๋ฉ๋๋ค.
โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/firebase/firebase-tools/issues/536#issuecomment-357784792 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AAAD_vaj-WngS9dMj7j5Q2AesM0tNMvVks5tK7hBgaJpZM4QdF3g
.
์ด ์ถ์๋์์ต๋๋ค!
@mbleigh ๋ฆด๋ฆฌ์ค 3.17.4์ ์์ต๋๊น?
@jkossis v3.17.0
๋ฆด๋ฆฌ์ค ์ ๋ณด์์:
ํจ์๋ฅผ ๋ฐฐํฌํ๋ ๊ฒฝ์ฐ ํจ์ ๋๋ ํ ๋ฆฌ ๋ด์์ "npm i --save firebase -functions@latest "๋ฅผ ์คํํ์ฌ firebase-functions SDK๋ฅผ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ ๋น ๋ฅธ ๊ธฐ๋ฅ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๋ช ๋ถ์์ ๋ช ์ด๋ก: ์ ํ์ จ์ต๋๋ค!
๋๋ฅผ ์ํด ์ด๊ฒ์ ์ฌ์ ํ โโ๋ช ๋ถ์ด ๊ฑธ๋ฆฝ๋๋ค.
[email protected]
์ [email protected]
๊ฐ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ์ถ๊ฐ๋ก ๋๋ฒ๊ทธํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
๋ค์์ ๊ธฐ๋ฅ๋ง ๋ฐฐํฌํ ๊ฒฐ๊ณผ์ ๋๋ค. ์ด๋ฆ์ ๋ณ๊ฒฝํ์ง๋ง REST ๋์ , ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ์ธ์ฆ ํธ๋ฆฌ๊ฑฐ์ ์กฐํฉ์ ๋๋ค.
โ functions git:(master) โ firebase --version
3.17.4
โ functions git:(master) โ time firebase deploy --only functions
=== Deploying to 'XXX'...
i deploying functions
i functions: ensuring necessary APIs are enabled...
โ functions: all necessary APIs are enabled
i functions: preparing functions directory for uploading...
i functions: packaged functions (123.07 KB) for uploading
โ functions: functions folder uploaded successfully
i functions: updating function 1...
i functions: updating function 2...
i functions: updating function 3...
i functions: updating function 4...
i functions: updating function 5...
i functions: updating function 6...
โ functions[1]: Successful update operation.
Function URL (1): https://us-central1-XXX.cloudfunctions.net/1
โ functions[3]: Successful update operation.
โ functions[4]: Successful update operation.
โ functions[5]: Successful update operation.
โ functions[6]: Successful update operation.
โ functions[2]: Successful update operation.
Function URL (2): https://us-central1-XXX.cloudfunctions.net/2
โ Deploy complete!
Project Console: https://console.firebase.google.com/project/XXX/overview
firebase deploy --only functions 4.59s user 1.07s system 1% cpu 6:09.26 total
@adamduren ์์ ์ preparing functions directory for uploading...
์์ ๋ณด๋ธ ๊ณผ๋ํ ์๊ฐ์ ๋ํ ๊ฒ์
๋๋ค.
๋ฐฐํฌ ์์ฒด์๋ ์ฌ์ ํ ๊ฝค ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
๊ฐ์ ์ํฉ์์ ์คํ:
"firebase-admin": "^5.8.2",
"firebase-functions": "^0.8.1",
npm install -g npm@latest
๋ ์ฝ๊ฐ ๋ค๋ฅธ ์
๋ ฅ์ ์ฃผ์๊ณ firebase-cli
๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ๋ ๋ญ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ ๊ฐ์์ต๋๋ค.
์ ๋ฐ์ดํธ:
์ข์, npm install -g firebase-tools
๋ฅผ ์คํํ ํ ๋ง์นจ๋ด ์๋ํ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค https://stackoverflow.com/questions/48531993/firebase-config-variables-are-not-available-error-with-deploying-functions#comment84098334_48531993
์๋
ํ์ธ์, ๊ฐ์ ์ง์ ์์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค("ํจ์ ๋๋ ํ ๋ฆฌ ์ค๋น ์ค..")
ํ์ง๋ง ์ ๊ฒฝ์ฐ์๋ ์๋ฃํ๋ ๋ฐ 25/30๋ถ ์ด์ ๊ฑธ๋ ธ์ต๋๋ค.
์ฝ 2.20MB๋ก ์์ถ๋ 4๊ฐ์ ๊ฐ์ธ ์ข
์์ฑ์ด ์์ต๋๋ค.
์์ถ ํ์ผ๋ก ๊ฐ์ธ ์ข
์์ฑ์ ํฌํจํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ด๋ผ๋ ๊ฒ์ ์์์ต๋๋ค.
๋ด๊ฐ ๋ญ๊ฐ ์๋ชปํ๊ณ ์์ต๋๊น? ์๋๋ฉด ์ด๊ฒ์ด ์๋ํ๋ ๋ฐฉ์์
๋๊น?
2018-5-9
firebase deploy
์ฌ์ ํ ๋๋ฆผ, ์ด์ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์
๋ง์ง๋ง ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ์ จ๋์? ์ง๋ ์ฃผ์ ์ ๋ฐ์ดํธํ์ผ๋ฉฐ ์ด์ ๋ฐฐํฌ์ 1-3๋ถ์ด ์์๋ฉ๋๋ค(25/30๋ถํฐ).
๋ค์๊ณผ ๊ฐ์ ๊ฐ๋จํ ์์ ์ ๋ํด ๋ฐฐํฌ ์๊ฐ์ด 4๋ถ ์ด์์ ๋๋ค.
const functions = require('firebase-functions')
exports.test = functions.https.onRequest((req, res) => {
res.send('Hello World')
})
i functions: updating function test...
๋ ์ค๋จ๋๋ ๋ผ์ธ์
๋๋ค.
์ด๋ ๊ฒ ๋๋ฆฐ ์ ์ด ์์๋ค!
@Robula ์ต์ ๋ฒ์ ์ firebase-tools๋ก ์ ๋ฐ์ดํธํ์ จ์ต๋๊น?
๋ค ๊ทธ๋ ๊ฒ ๋ฏฟ์ต๋๋ค. firebase โversion
๋ณด๊ณ 3.18.6.
๋น์ ์ ๋๋ณด๋ค ์ต์ ๋ฒ์ ์ ์์ต๋๋ค. 3.18.6์์ node_modules ํด๋๋ฅผ ๊ณ์ ์ ์กํ๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ํ์ฌ 3.18.4์์๋ ๋ชจ๋ ๊ฒ์ด ์ ๋์๊ฐ๋ ๊ฒ ๊ฐ์ต๋๋ค...
์ต๊ทผ firebase-tools ๋ฒ์ (node_modules ํด๋๋ ๋ณต์ฌ๋์ง ์์)์์๋ ๋ฐฐํฌ ์ ๋ต์ด ํด๋ณดํ์ง ์์์ง๋ง ๋ฐฐํฌ ์๊ฐ์ ์ปดํจํฐ๋ง๋ค ๊ทธ๋ฆฌ๊ณ ๋๋๋ก ๋ค๋ฆ ๋๋ค. ํจ์์ ์ด๊ธฐ ๋ฐฐํฌ๋ ํ์ ์ ๋ฐ์ดํธ๋ณด๋ค ๋๋ฆฝ๋๋ค.
preparing functions directory for uploading...
๋จ๊ณ์์ ๋ฐฐํฌ ์๊ฐ์ด ๋ก์ปฌ๋ก ์คํ๋ ๋ ์ด ๋จ๊ณ์์๋ง ๊ฑฐ์ 7๋ถ์ด ์์๋๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ๋น๋๋ฅผ ์ํ ์ฌ์ ๋ฐฐํฌ ๋จ๊ณ๋ ๋ก์ปฌ์์ ์ฝ 5์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค. ๋ฐฐํฌ ํ๋ก์ธ์ค์ ๋ค๋ฅธ ๋ชจ๋ ๋จ๊ณ๋ ๋๋ฒ๊ทธ์์ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์คํ๋ฉ๋๋ค. ๋ฐฐํฌ๊ฐ ๋ค์ ๋๋ฆด ์ ์์ง๋ง ์์
์๋ AWS ๋๋ค๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋งค์ฐ ํฐ ๋๋ค ๋ฐฐํฌ๋ Python ํจํค์ง ์ค์น ๋ฐ ๋น๋๋ฅผ ํฌํจํ์ฌ 2 2 3๋ถ์ ์์๋ก ์ด๋ณด๋ค ํจ์ฌ ๋น ๋ฆ
๋๋ค.
google ํด๋ผ์ฐ๋ ๋น๋์์ ๋ฐฐํฌํ๋ ๊ฒฝ์ฐ์๋ aws ๋๋ค์์ 10~20์ด๊ฐ ์์๋๋ ๋ฐ ๋นํด 2~3๋ถ์ด ์์๋ฉ๋๋ค. ์ ๋ก๋ํ๊ธฐ ์ ์ cli๊ฐ ์ ์ฒด ๊ธฐ๋ฅ ํด๋๋ฅผ ์์ถํ๋์ง ๋ฌป๊ณ ์ถ์ต๋๋ค.
@laurenzlong , ๊ธฐ๋ฅ์ด ์ด๋ฏธ ๋ณ๋ ฌ๋ก ๋ฐฐํฌ๋์๋์ง, ๋๋ ์ด ์ต์ ํ๊ฐ ์งํ ์ค์ธ์ง ์์ธํ ์ค๋ช ํด ์ฃผ์๊ฒ ์ต๋๊น?
๊ธฐ๋ฅ์ ํญ์ ๋ณ๋ ฌ๋ก ๋ฐฐํฌ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ 10๊ฐ์ ๊ธฐ๋ฅ์ ๋ณ๋ ฌ๋ก ๋ฐฐํฌํ๋ ๊ฒ์ ๋จ์ผ ๊ธฐ๋ฅ์ ๋ฐฐํฌํ๋ ๊ฒ๋ณด๋ค ์ฌ์ ํ ๋๋ฆฝ๋๋ค.
+1 ๊ธฐ๋ฅ ๋ฐฐํฌ๊ฐ ๋งค์ฐ ๋๋ฆฝ๋๋ค. ๋๋ ์ฒซ ๋ฒ์งธ ํค์ธ hourly-tick ๊ธฐ๋ฅ์ ๋ง๋ค๊ธฐ ์ํด cron ์์ ํํ ๋ฆฌ์ผ์ ๋ฐ๋๊ณ ๋งค๋ฒ ๋ฐฐํฌํ๋ ๋ฐ 1๋ถ ์ ๋ ๊ฑธ๋ฆฝ๋๋ค.
@laurenzlong ์๋ตํด ์ฃผ์ ์ ๊ฐ์ฌํ๊ณ Firebase์์ ์ด์ฌํ ์ผํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
๋ฐฐํฌ ์๊ฐ์ ๊ฐ์ ํ๊ธฐ ์ํ ์ ๊ทน์ ์ธ ๊ณํ์ด ์์ต๋๊น? Firebase๋ฅผ ์ข์ํ์ง๋ง ๋ฐฐํฌ ์๊ฐ์ด ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก Firebase์์ ๋ฒ์ด๋ ์๊ฐ์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ญค๋ด
๋๋ค. ์ฝ 47๊ฐ์ ํด๋ผ์ฐ๋ ๊ธฐ๋ฅ์ด ์์ผ๋ฉฐ ๋ฐฐํฌํ๋ ๋ฐ ์ ๊ธฐ์ ์ผ๋ก 3-6๋ถ์ด ๊ฑธ๋ฆฝ๋๋ค. ๋์ผํ ์์ ์ฝ๋๋ฅผ Heroku์ ๋ฐฐํฌํ๋ ๋ฐ ์ฝ 20-30์ด๊ฐ ์์๋๋ git push heroku master
์ ๋น๊ตํ์ญ์์ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ฝ๋๋ Heroku์์ ์ฆ์ ์คํ๋ ๊ฒ์
๋๋ค. Firebase๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐฐํฌ๋ ๊ธฐ๋ฅ์ด ์ค์ ๋ก ์คํ๋๊ธฐ ์ ์ ๋ฐฐํฌ ํ 20-30์ด(์์) ์๊ฐ์ ๋ ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค(์ด ์๊ฐ ๋์ ์ ๊ธฐ๋ฅ๊ณผ ์ด์ ๊ธฐ๋ฅ์ด ํจ๊ป ์คํ๋จ).
๋ฐ๋ผ์ ๋ฐฐํฌ ๊ฒฝํ์ ๋น๊ตํ์ญ์์ค.
*** Heroku:
git push heroku master
20-30s later ...
All newly-deployed functions are now running in a consistent/atomic way
*** Firebase:
firebase deploy --only functions
180-360s later ...
Functions are deployed but only some of the new ones are running, some old ones are still running
20-30s later ...
All new functions running
Firebase๋ก ์์์ ๋ฐฐํฌ๋ฅผ ์ํํ๋ ๊ฒ๋ ์ด๋ ต์ต๋๋ค. ๋ฐฐํฌ ํ v_n+1
๋ผ๊ณ ํ๋ ์ผ๋ถ ์ ๊ธฐ๋ฅ์ด ์ผ๋ถ ์ด์ ๊ธฐ๋ฅ v_n
๊ณผ ํจ๊ป ์คํ๋๋ ๊ธฐ๊ฐ์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ฐ๋ผ์ ์ฃผ์ ์
๋ฐ์ดํธ๋ฅผ ์ํํ๋ฉด ๋ค๋ฅธ ๋ฐ์ดํฐ ํ์์ด๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์คํ ์ค์ธ ์ ๊ธฐ๋ฅ๊ณผ ์ด์ ๊ธฐ๋ฅ์ด ํผํฉ๋์ด ์์ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋ชจ๋ ์๋ก์ด ๊ธฐ๋ฅ์ด ๋ฐฐํฌ๋๊ณ ์๋ก์ด ๊ธฐ๋ฅ๋ง ์คํ๋๊ฑฐ๋ ๋ฐฐํฌ๋์ง ์๋ Heroku ๋ฐฐํฌ๋ณด๋ค ํจ์ฌ ๋ ์์ ํฉ๋๋ค.
๋ํ 47๊ฐ ๊ธฐ๋ฅ ์ค ์ผ๋ถ๊ฐ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ์ ํจ๊ป ๋ฐฐํฌ์ ์คํจํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
โ functions[retrieveFavorites(us-central1)]: Deployment error.
Server Error. getaddrinfo ENOTFOUND cloudfunctions.googleapis.com cloudfunctions.googleapis.com:443
์ฐ๋ฆฌ๋ ๋งค์ฐ ์์ ์ ์ธ ๋์นญ ๊ธฐ๊ฐ๋นํธ ์ธํฐ๋ท์ ๋ฐฐํฌํ๊ณ ์์ผ๋ฏ๋ก ๋ฌธ์ ๋ ์ฐ๋ฆฌ ๋คํธ์ํฌ๊ฐ ์๋๋๋ค.
๋ฐ๋ผ์ Heroku ๋ฐฐํฌ๋ฅผ ์์์ DB ํธ๋์ญ์ (์ ๋ถ ๋๋ ์ ๋ฌด)๊ณผ ๊ฐ๋ค๊ณ ์๊ฐํ๋ ๋ฐ๋ฉด Firebase ๋ฐฐํฌ๋ ๋ถ๋ถ์ ์คํจ์ ๊ถ๊ทน์ ์ผ๋ก ์ผ์นํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค... ์ด๋ก ์ธํด ํนํ ๋ฒ๊ทธ ์์ ์ ํธ์ํ๋ ๊ฒฝ์ฐ ๊ฐ๋ฐ ์์ ์ด ํจ์ฌ ๋ ์ด๋ ค์์ง๋๋ค. ํ๋ฐค์ค์ ํ์ด์ง์ ๋ํ ์๋ต์ผ๋ก.
์์งํ ๋งํด์, Firebase์์์ ๋ฐฐํฌ ๊ฒฝํ์ ๊ฐ๊ด์ ์ผ๋ก Heroku ๋๋ AWS๋ณด๋ค ๋๋ฆฌ๊ณ ๋ ์์ ์ ์ ๋๋ค. ... ์คํดํ์ง ๋ง์ธ์. ์ฐ๋ฆฌ๋ Firebase๋ฅผ ์ข์ํ๊ณ ์ฌ๋ฌ๋ถ์ ๋ ธ๊ณ ์ ์ง์ฌ์ผ๋ก ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋ด ๋ง์ ์ด๊ฒ์ด ๊ณต๊ฒฉ์ฒ๋ผ ๋ค๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ ๊ฐ์ธ์ ์ธ ๊ฒ์ด ์๋์ง๋ง ์ฌ๊ธฐ์์ ๋ ์ํ๋ ค๋ฉด Firebase๊ฐ ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฐฐํฌ๊ฐ ๋๋ฌด ๊ณ ํต์ค๋ฝ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ด๋ํ ์๊ฐ์ ๋๋ค.
Firebase์ ๋ํ ๋ ธ๊ณ ์ ๋ค์ ํ ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋์์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค :-).
๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ๊ณต์ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ์ฐ๋ฆฌ๋ ํนํ ๋์์ ๋ง์ ๊ธฐ๋ฅ์ ๋ฐฐํฌํ๊ธฐ ์ํด ์ด๊ฒ์ ๊ฐ์ ํ ๋ช ๊ฐ์ง ๊ณํ์ด ์์ต๋๋ค(์ฃผ๋ก ๊ธฐ๋ฅ ์์ฑ/์ ๋ฐ์ดํธ๋ฅผ ์ํด API ํธ์ถ์ด ์ด๋ฃจ์ด์ง ํ ์๋ฒ ์ธก ๋น๋ ๋จ๊ณ ๊ฐ์ ). ๊ทธ๋ฌ๋ ์ด๋ 4๋ถ์ 1์ด ์์๋๋ ์ธํ๋ผ ๋ณ๊ฒฝ ์ฌํญ์ด๋ฏ๋ก ๊ทธ๋์ ๊ธฐ๋ค๋ ค ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ด๋ฏธ ๊ณ ๋ คํ์ ์๋ ์์ง๋ง CI/CD ํ์ดํ๋ผ์ธ์์ ํธ์ง๋ ๊ธฐ๋ฅ์ ๊ฐ์งํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค๊ณ --only
ํ๋๊ทธ๊ฐ ์๋ ๊ธฐ๋ฅ๋ง ๋ฐฐํฌํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ฐฐํฌ ์๋๊ฐ ํฌ๊ฒ ํฅ์๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ด ๋น๋์ค๋ฅผ ์ฐธ์กฐํ์ญ์์ค. https://www.youtube.com/watch?v=iyGHW4UQ_Ts
@laurenzlong ์ ๋ณด ๊ฐ์ฌํฉ๋๋ค, Lauren. ํ์ง๋ง, ์ ๊ฒ๋ ์์ ํด๋ผ์ฐ๋ ๊ธฐ๋ฅ์ด ํ๋๋ฐ์ ์๊ณ , ๊ฐ์ฅ ์์ ๋ณ๊ฒฝ์ ํ ํ์๋ ๋ฐฐํฌํ๋ ๋ฐ ์ฌ์ ํ 1๋ถ ์ ๋ ๊ฑธ๋ฆฝ๋๋ค. ํด๋ผ์ฐ๋ ๊ธฐ๋ฅ์ด ํ๋๋ฟ์ธ๋ฐ๋ ํด๋น ํ๋๊ทธ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฌ๊ธฐ์์ ๋ญ๊ฐ ์๋ชป๋๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
2019๋ 4์ ํ์ฌ๋ ๋ง ๊ทธ๋๋ก ๋ช ๋ถ์ด ์์๋ฉ๋๋ค. Firebase ๋ฒ์ 6.6.0 - https://firebase.google.com/docs/functions/get-started ์ ํํ ๋ฆฌ์ผ์ ๋ฐ๋ฅด๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๋ฐฉ๊ธ ๋ค์ด๋ก๋ํ์ฌ "firebase ๋ฐฐํฌ"ํ ๋๋ง๋ค ๋ช ๋ถ ์ ๋ ๊ฑธ๋ฆฝ๋๋ค.
์ง๋ ๋ฉฐ์น ๊ฐ ์ฌ์ง์ด ํธ์คํ ์ ๋ฐฐํฌํ๋ ๋ฐ ๋ช ๋ถ์ด ๊ฑธ๋ ธ์ต๋๋ค. ๋ช ์ฃผ ์ ์๋ 10-15์ด ์ ๋ ๊ฑธ๋ ธ์ต๋๋ค. ๊ธฐ๋ฅ ๋ฐฐํฌ๋ ์๊ฐ ์ด๊ณผ๋ฉ๋๋ค.
Firebase ์ํ ํ์ด์ง๋ ๋ น์ https://status.firebase.google.com/ ์ ๋๋ค.
์ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ๋์ง ์๋ ์ฌ๋์ด ์์ต๋๊น?
firebase-tools
7.0.0
์ฌ์ฉ
$ firebase deploy --only=hosting --token xxx
=== Deploying to 'xxx'...
i deploying hosting
i hosting[xxx]: beginning deploy...
i hosting[xxx]: found 1959 files in public
โ hosting[xxx]: file upload complete
i hosting[xxx]: finalizing version...
โ hosting[xxx]: version finalized
i hosting[xxx]: releasing new version...
โ hosting[xxx]: release complete
โ hosting: Finished running postdeploy script.
โ Deploy complete!
Project Console: https://console.firebase.google.com/project/xxx/overview
Hosting URL: https://xxx.firebaseapp.com
โจ Done in 181.75s
@laurenzlong-
๊ทธ๋ฌ๋ ์ด๋ 4๋ถ์ 1์ด ์์๋๋ ์ธํ๋ผ ๋ณ๊ฒฝ ์ฌํญ์ด๋ฏ๋ก ๊ทธ๋์ ๊ธฐ๋ค๋ ค ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๋ช ๋ถ๊ธฐ ์ ๋ง์ง๋ง ๋ฉ๋ชจ ์ดํ ์ธํ๋ผ ์ธก ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น? ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋ ๋๊น์ง ์ด ๋ฌธ์ ๋ฅผ ๋ค์ ์ด ์ ์์ต๋๊น? ์ถ์ ์ด ๋ค๋ฅธ/๊ด๋ จ ๋ฌธ์ ๋ก ์ด๋ํ์ง ์๋ ํ ๋ซํ์ ์ ์ ํ ์ํ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
Firebase functions
๋ ๋ชจ๋ ๊ฒ์ด ๋น๋/์
๋ก๋๋๊ณ ์๋ฒ ์ธก์์ ๊ธฐ๋ฅ์ด ์์ฑ/์
๋ฐ์ดํธ๋ ํ์๋ ์ฌ์ ํ ๋งค์ฐ ๋๋ฆฝ๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋งํ๋ฏ์ด ์ด๊ฒ์ ์ฃผ์ ๊ฐ๋ฐ ์๋ ๋ํผ์
๋๋ค.
firebase --version
7.1.0
๊ณ ๋ คํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
@repentsinner ๋น๋/๋ฐฐํฌ ์๊ฐ์ ๊ฐ์ ํ๊ธฐ ์ํ ๋ฐฑ์๋ ํ๋ก์ ํธ๋ ์ฌ์ ํ ์งํ ์ค์ด์ง๋ง(์ ์งํ ์ค์ ๋๋ค!) ์์ง ์ถ์๋์ง ์์์ต๋๋ค.
๊ฐ๋ฐ ํ๋ก์ธ์ค์ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ์๋ฎฌ๋ ์ดํฐ( firebase emulators:start
๋ฅผ ํตํด)๋ฅผ ์ฌ์ฉํด ๋ณด์
จ์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ํผ๋๋ฐฑ์ ๋ฐ๊ณ ์ถ์ต๋๋ค!
@samtstern ์ ๋ฐ์ดํธ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋๋ ์์ง ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์๋ํ์ง ์์์ต๋๋ค - ๋๋ ํ๋ฌํฐ ์ฑ์ functions.https.onCall
์ firestore์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ (์ด์จ๋ ํ์ฌ๋ก์๋) ์ฑ์ ํ
์คํธ ๋น๋์์ ๋ชจ๋ ๊ฒ์ ๋ฆฌ๋๋ ์
ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ด ๊ฐ๋ฐ ์ํฌ์คํ
์ด์
์ ๋ฐฐํฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ ๋
ธ๋ ฅ์ด ํ์ํฉ๋๋ค.
๐คจ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ์๊ฐ์ ํ์ฉํ๋ฉด ๋ ๊ฒ ๊ฐ์์.
์์ง ํด๊ฒฐ๋์ง ์์ ์ด ๋ฌธ์ ์ ์ํด ๋ณต ๋ง์ด ๋ฐ์ผ์ธ์! ๐
์๋ง๋ ๊ด๋ฆฌ์ ๋๋ OP๋ ์ด ๋ฌธ์ ์ ์ด๋ฆ์ "๋งค์ฐ ๋๋ฆฐ ๋ฐฐํฌ๋ฅผ ์ํ ๊ธฐ๋ฅ ๋๋ ํ ๋ฆฌ ์ค๋น ์ค"์ผ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค. ์ด๋ ์ ์ฒด ๋ฐฐํฌ ํ๋ก์ธ์ค์ ํด๋น ๋จ๊ณ์ ๋ํ ์์ ์ฌํญ์๋ง ๊ธฐ๋ฐํ์ฌ ๋ซํ ๊ฒ์ผ๋ก ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ฐ ๋ค์ ... ๊ธฐ๋ฅ ๋ฐฐํฌ๊ฐ ์ฌ์ ํ ๋งค์ฐ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ ์๋ก์ด "๊ธฐ๋ฅ ๋ฐฐํฌ๊ฐ ๋งค์ฐ ๋๋ฆผ" ๋ฌธ์ ๋ฅผ ์ด โโ์ ์์ต๋๋ค. ๐
๋ฐฐํฌ ์๊ฐ์ ๊ฐ์ ํ๊ธฐ ์ํด CLI ์ธก์์ ๋ ์ด์ ํ ์ ์๋ ์ผ์ด ์๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ๋ ์ข
๋ฃ๋์์ต๋๋ค. ๋ก์ปฌ ๊ฐ๋ฐ์ ์ํด ์๋ฎฌ๋ ์ดํฐ์ ๊ณ์ ํฌ์ํ๊ณ ์์ผ๋ฏ๋ก ์ฌ๋๋ค์ด ๊ฐ๋ฐ ์๋ช
์ฃผ๊ธฐ์ ์ผ๋ถ๊ฐ ์๋๋ผ ์ ํ์ ๋ฐฐํฌํ ๋๋ง firebase deploy
์ ์คํํด์ผ ํฉ๋๋ค.
๋ฐฑ์๋ ๋ณ๊ฒฝ์ ์์ง ์งํ ์ค์ ๋๋ค. ์ ์ ์๋ฏ์ด ์์์น ๋ชปํ ์ง์ฐ์ด ๋ฐ์ํ์ต๋๋ค.
@samtstern ์ ๋ํ ์ค๋ช ๊ฐ์ฌํฉ๋๋ค. firebase/firebase-tools์ ๋ํ ๋ฌธ์ /์์ฒญ์ CLI์๋ง ์ ์ฉํ ์ ์์ต๋๊น? ๋ฐฑ์๋๋ฅผ ๋ค๋ฃจ๋ ๋ฆฌํฌ์งํ ๋ฆฌ/ํ๋ก์ ํธ๋ฅผ ์ฐพ์ต๋๋ค.
๋ก์ปฌ ๊ฐ๋ฐ๊ณผ ๊ด๋ จํ์ฌ ๊ณต๊ฐ์ ์ธ ์ธก๋ฉด์์ ๋ณด๋ฉด Google์ด Firebase์ Flutter์ ํตํฉ์ ๊ถ์ฅํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ ๋ก๋ ๋งค์ฐ ์ ์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ ๋ก๋ ์ด์ ๊ฐ์ ๊ฐ๋ฐ ์๊ฐ ๋ถ์ผ์น์ ์ง๋ฉดํฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ ๋ ์ ์๋ ๋๋ก ์๋ฎฌ๋ ์ดํฐ๋ฅผ ๊ฐ๋ตํ๊ฒ ์ดํด๋ณด์์ง๋ง ์ค์ ๋ก ํตํฉ Firebase ๋ฐ Flutter ๊ฐ๋ฐ ์ํฌํ๋ก๋ฅผ ์ ํ ์ง์ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค. ๋๋ ์ด๊ฒ์ด ์ต๊ทผ์ ๊ฐ์ ๋์๋์ง ์์๋ณด๊ธฐ ์ํด ๋ค์ ์์ ๊ทธ๋ฆฌ์ง ์์์ง๋ง, ๊ทธ๋ด ๊ฒ ๊ฐ์ง ์์ต๋๋ค.
@repentsinner ์ ์ด ๋ฆฌํฌ์งํ ๋ฆฌ๋ CLI ์์ ๋ง ์ถ์ ํฉ๋๋ค. ๋ฌผ๋ก ์ฐ๋ฆฌ๋ ๋ค์ด์ค๋ ๋ชจ๋ ๊ฒ์ ๋ตํ๋ ค๊ณ ๋ ธ๋ ฅํ์ง๋ง ์ข ์ข ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๊ฐ ํ ์ ์๋ ์์ฐ์ ์ธ ๊ฒ์ด ์์ ๋ ๋ฌธ์ ๋ฅผ ๋ซ์์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ์ ๋ฐฑ์๋๋ ์คํ ์์ค๊ฐ ์๋๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋๋ค์ด Firebase ์ง์ ์ ํตํด ๋ฒ๊ทธ ๋ณด๊ณ ์๋ฅผ ์ ์ถํ๊ฑฐ๋ ์ผ๋ฐ์ ์ธ Firebase์ ๋ํ ๊ธฐ๋ฅ ์์ฒญ์ ์ ์ถํ๋๋ก ์๋ดํฉ๋๋ค.
Flutter์ ๊ด๋ จํ์ฌ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์ข์ํ์ง๋ง(์ฐธ์กฐ: https://github.com/FirebaseExtended/flutterfire) ๊ณต์ Firebase ํ๋ซํผ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๊ฐ ํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฌธ์ ์ ๋ํ ์์ ํ ์ง์์ ์ ๊ณตํ ์ ์๋ค๋ ์ ์ ์ ์ํด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ ์๋๋ก์ด๋/iOS/์น. ์ธ์ ๊ฐ๋ ๋ฐ๋ ์๋ ์์ง๋ง ์ง๊ธ์ ์ํฉ์ด ๊ทธ๋ ์ต๋๋ค.
Flutter ์ฑ์ Firebase ์๋ฎฌ๋ ์ดํฐ์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ง๋ฌธ์ด ์๋ ๊ฒฝ์ฐ FlutterFire ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๋ฌธ์ ๋ฅผ ์ด๊ณ ์ ๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ๊ทธ๋ฌ๋ฉด ์ ์ ํ Flutter ์ง์๋ ์ฐธ์ฌ์ํฌ ์ ์์ต๋๋ค.
์๊ฒ ์ต๋๋ค. @samtstern์ ๋ํ ์ค๋ช ๊ฐ์ฌํฉ๋๋ค! ๋๋ ์ ์ ๋์ ๋ค๋ฅธ ํ๋ก์ ํธ๋ก ๋์ด๊ฐ์ง๋ง, ์ด ์์ ์ ๋ค์ ์์ํ ๋ FlutterFire ์ ์ฅ์๋ฅผ ์ดํด๋ณผ ๊ฒ์ ๋๋ค.
์๋ฎฌ๋ ์ดํฐ๋ ์ธ์ฆ ์ปจํ ์คํธ๋ฅผ ์ง์ํ์ง ์์ผ๋ฏ๋ก 100% ์์ ํ ์ธ๋ชจ์๋ IMO์ ๋๋ค.
dotenv๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ๋ฐฐํฌ๊ฐ ์ค๋จ๋์์์ ๋ฐ๊ฒฌํ์ต๋๋ค.
์ฌ๋๋ค์๊ฒ ์ด๊ฒ์ด ์ฌ์ ํ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ผ๋ ๊ฒ์ ์๊ธฐ์ํค๊ธฐ ์ํด ๋จธ๋ฆฌ๋ฅผ ์ฐ๋ฌ๋ณด๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํฉ๋๋ค โ๏ธ
์ฌ์ ํ ์ด ๋ฌธ์ ๋ฅผ ์ ํ๋ ์ฌ๋๋ค์๊ฒ ๋์์ด ๋ ๊ฒ์ functions.ignore
๋ฅผ ์ฌ์ฉํ์ฌ ๋ถํ์ํ ํฝ์ฐฝ์ ๋ฐฉ์งํ๋ ๊ฒ์
๋๋ค. ํฌํจํ ํนํ ์ข์ ๊ฒ์ .git
์
๋๋ค.
{
"functions": {
"ignore": ["node_modules", ".git", ".gitignore", ".nyc_output", ".runtimeconfig.json", "firebase-debug.log", "tslint.json", "tests"]
}
๊ฐ๋ฐ ์ํฌํ๋ก๊ฐ ๊ณ ํต์ค๋ฌ์ธ ์ ๋๋ก ๊ธฐ๋ฅ์ ์์ ํ ์ญ์ ํ์ต๋๋ค.
์ฌ์ ํ ์ด ๋ฌธ์ ๋ฅผ ์ ํ๋ ์ฌ๋๋ค์๊ฒ ๋์์ด ๋ ๊ฒ์
functions.ignore
๋ฅผ ์ฌ์ฉํ์ฌ ๋ถํ์ํ ํฝ์ฐฝ์ ๋ฐฉ์งํ๋ ๊ฒ์ ๋๋ค. ํฌํจํ ํนํ ์ข์ ๊ฒ์.git
์ ๋๋ค."functions": { "ignore": ["node_modules", ".git", ".gitignore", ".nyc_output", ".runtimeconfig.json", "firebase-debug.log", "tslint.json", "tests"] }
์ด๊ฒ์ ์ค์ ๋ก ๋ช ๊ฐ์ง ๊ฒฐ๊ณผ๋ฅผ ๋ณ์์ต๋๋ค. ํ์ฌ ์๊ฐ์ ์ฝ 65-70%์์ ์คํ ์ค์ ๋๋ค. ๊ฐ์ฌ ํด์!
ํฅ๋ฏธ๋กญ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก functions
ํ์ ๋๋ ํ ๋ฆฌ๋ ํ๋ก์ ํธ ๋ฃจํธ ์๋์ ์์ผ๋ฏ๋ก .git
ํด๋๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ด ๋์์ด ๋ ์ฌ๋ฌ๋ถ, ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ ์ด๋ป๊ฒ ์๊ฒผ์ต๋๊น?
@mbleigh ์ฐธ. ์ ์ถ์ธก์ผ๋ก๋ ์ด๊ฒ์ด ํ๋ช ํ๊ณ ์ด๋ฅผ functions ๋๋ ํ ๋ฆฌ์ ์ ์ฉํ๋ ๊ฒ์ ๋๋ค.
@mbleigh ํจ์ ์ ์ฉ ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ์์ผ๋ฏ๋ก ํจ์ ๋๋ ํฐ๋ฆฌ๊ฐ ์๋ ๊ฒ์ด ์กฐ๊ธ ์ด๋ฆฌ์์ ๊ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ๋ฟ๋ฆฌ๋ก ๋ด๋ ค๊ฐ์ต๋๋ค.
๋ด firebase.json
์์ ๋ฐ์ทํ ๋ด์ฉ์
๋๋ค.
"functions": {
"ignore": [
"__mocks__",
".cache",
".commitlintrc.yaml",
".dependabot",
".editorconfig",
".eslintrc.yaml",
".firebase",
".firebaserc",
".git",
".gitattributes",
".github",
".gitignore",
".lintstagedrc.js",
".nvmrc",
".prettierignore",
".prettierrc.yaml",
".vscode",
"CHANGELOG.md",
"cloudbuild.yaml",
"codecov.yml",
"CONTRIBUTING.md",
"coverage",
"cSpell.json",
"decisions",
"firebase.json",
"firestore.indexes.json",
"jest.config.js",
"node_modules",
"README.md",
"rfcs",
"scripts",
"src",
"test",
"tsconfig.json",
"tsconfig.production.json"
],
"source": "."
},
๋๋ ๊ธฐ๊บผ์ด ๊ทธ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๊ฟ ๊ฒ์
๋๋ค :
```
{
"ํฌํจ": ["lib", "package.json", "package-lock.json"]
}
FWIW ๋๋ ์ด๊ฒ๋ค์ด glob์ ํ์ฉํ๋ค๊ณ ์๊ฐํ๋ฏ๋ก ๋ค์์ ํ ์ ์์ต๋๋ค.
{
"exclude": ["!{lib,package.json,package-lock.json}"]
}
ํด๋ผ์ฐ๋ ๊ธฐ๋ฅ์ ๋ง ์์ํ๊ณ ๋ฐฐํฌ ์๊ฐ์ด ๊ณ ํต์ค๋ฝ์ต๋๋ค.
๊ณ ํต์ค๋ฌ์ด ๋ฐฐํฌ ์๊ฐ :(
Firebase ์ฑ์๋ ํ์ฌ 60๊ฐ์ ํด๋ผ์ฐ๋ ๊ธฐ๋ฅ์ด ์คํ๋๊ณ ์์ต๋๋ค. ์ฒ์์๋ ํ ๋น๋์ผ๋ก ์ธํด ๋ง์ ๋ฐฐํฌ ์คํจ๊ฐ ๋ฐ์ํ๊ธฐ ์์ํ๊ธฐ ๋๋ฌธ์ ๋ฌธ์์์ ์ ์ํ๋ ๋๋ก ๋ฐฐ์น๋ก ๋๋์์ต๋๋ค. ์ง๊ธ์ ์ผ๊ด๋๊ฒ ๋ฐฐํฌ๋์ง๋ง ๊ฐ ๋ฐฐ์น๋ ๊ธฐ๋ณธ ์คํ์์์ GitHub ์์ CI์ ์ผ๋ถ๋ก ๋ฐฐํฌํ๋ ๋ฐ ~3๋ถ์ด ๊ฑธ๋ฆฝ๋๋ค. ๋ฐฐ์น๋ ๊ฐ๊ฐ ์ฝ 6๊ฐ์ด๋ฏ๋ก ์ด 10๊ฐ์ ๋ฐฐ์น๋ก ํจ์ ๋ฐฐํฌ ์๊ฐ์ด ์ฝ 30๋ถ์ ๋๋ค.
ํจ์ ์์ฒด๋ ์ต์ํ์ ์ข ์์ฑ์ ๊ฐ์ง ๋งค์ฐ ์์ ์ฝ๋ ๋นํธ์ ๋๋ค. ํ์ดํ๋ผ์ธ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ๋ฌด์์ ๋ ํ ์ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ ๋ง ์ํ๊น์ต๋๋ค. ๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ฌ๋ฌ ์ง์ ์ /๊ฒฝ๋ก๋ฅผ ๋จ์ผ ๊ธฐ๋ฅ์ผ๋ก ๋ฌถ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ๋ถ๋ช ํ ๊ด์ฌ์ฌ/ํฌ๊ธฐ/๋ณด์์ ๋ถ๋ฆฌ์์ ๊ฐ์ฅ ์ข์ ๊ฒ์ ์๋์ง๋ง ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ๋ชจ๋ API ์๋ํฌ์ธํธ(๋ด๋ถ ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ๋ ๋จ์ผ ์ง์ ์ )์์ ์ํํ ์์ ์ด๋ฉฐ ๊ทธ ์ดํ๋ก ๋ง์ ํ ๋น๋ ์ ํ์ ๊ฒฝํํ์ง ์์์ต๋๋ค(๊ทธ๋ฌ๋ ๊ทธ๋ค์ ๊ฐ๋ ๋ฐ์ํฉ๋๋ค).
๊ทธ๋ฌ๋ ๊ณต์ ๋ฌธ์ ์ "Cloud Functions API๋ฅผ ํตํ ๊ธฐ๋ฅ ๋ฐฐํฌ ๋๋ ์ญ์ ํธ์ถ"์ ๋ํ "100์ด๋น 80๊ฐ"๊ฐ ๋์ด๋์ด ์๊ธฐ ๋๋ฌธ์ ์ด ํ ๋น๋ ์ ํ์ ์ ๋ง ๋ฎ์ ๊ฒ ๊ฐ์ต๋๋ค. Google ์ง์์์ ์ด ํ๋๋ฅผ ๋ ๋์ผ ์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
๊ทธ๋ฌ๋ ๊ณต์ ๋ฌธ์ ์ "Cloud Functions API๋ฅผ ํตํ ๊ธฐ๋ฅ ๋ฐฐํฌ ๋๋ ์ญ์ ํธ์ถ"์ ๋ํ "100์ด๋น 80๊ฐ"๊ฐ ๋์ด๋์ด ์๊ธฐ ๋๋ฌธ์ ์ด ํ ๋น๋ ์ ํ์ ์ ๋ง ๋ฎ์ ๊ฒ ๊ฐ์ต๋๋ค. Google ์ง์์์ ์ด ํ๋๋ฅผ ๋ ๋์ผ ์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
@dinvlad API ํ๋ ์ฆ๊ฐ์ ๋ํด ํ๋งค ๋ฐ ์ง์์ ๋ฌธ์ํ๋๋ฐ GCP ์ฝ์ ํ ๋น๋ ์น์ ์์ ๋ช ์์ ์ผ๋ก ๋นํ์ฑํ/ํ์์ผ๋ก ํ์๋ฉ๋๋ค. ๊ฒฐ๊ตญ ํ์์์์ "๊ทธ ํ ๋น๋์ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค"๋ผ๊ณ ์๋ ค์ฃผ๋ Google ์์ง๋์ด๋ฅผ ์ป์ ์ ์์์ต๋๋ค.... ๊ทธ๋์ ๊ทธ๋ ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ค์ ๋ฆด๋ฆฌ์ค์์ ํ์ค ๋ฌด์ ๋ชฉ๋ก์ .git
๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
https://github.com/firebase/firebase-tools/pull/2395
์ผ๋ถ ์ฌ์ฉ์์๊ฒ๋ ๋ฆด๋ฆฌ์ค ์๋๊ฐ ๋นจ๋ผ์ง ๊ฒ์ ๋๋ค. ๋ฌผ๋ก ์ฐ๋ฆฌ(Firebase CLI ํ)๊ฐ Cloud Functions ๋ฐฑ์๋์ ์ง์ฐ ์๊ฐ์ ๋ํด ํ ์ ์๋ ์ผ์ ๋ง์ง ์์ต๋๋ค.
ํจ์๋ฅผ ์
๋ฐ์ดํธํ์ง ์์ ๋ firebase deploy --only hosting
๋ฅผ ์ํํ์ญ์์ค.
์ฌ๊ธฐ์์ ์ฐ๋ฆฌ๋ ๊ด๋ จ ๊ธฐ๋ฅ์ ๊ธฐ๋ฅ์ผ๋ก ๊ทธ๋ฃนํํ์ฌ "๊ธฐ๋ฅ์ ๊ฐ๋ณ ๊ณผ๋ฆฝ๋น ํ๋์ ๊ธฐ๋ฅ"์ด ์๋๋ผ "๊ธฐ๋ฅ ์์ญ๋น ํ๋์ ๊ธฐ๋ฅ"์ฒ๋ผ ๋ณด์ด๊ฒ ๋ฉ๋๋ค.
๋ฐฐํฌ์ ์ฑ๋ฅ ํน์ฑ์ ํ๋์ ๊ธฐ๋ฅ์ ๋ค์ด๊ฐ๋ ์ํคํ ์ฒ๋ฅผ ๊ฐ๋ ฅํ๊ฒ ์ฃผ๋ํ๊ณ ์์ต๋๋ค!
์ด ๋ฌธ์ ๊ฐ ์ข ๋ฃ๋ ์๊ธฐ์ ์ด์ 2017๋ 11์์ ์คํํ๋๋ฐ ์์ง๋ ๊ทธ๋๋งํผ์ ๋ฌธ์ ๊ฐ ๋ง์ ๊ฒ ๊ฐ์ต๋๋ค. ์ฌ๊ธฐ์์ 'Closed'์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ณผ ์ ์์ผ๋ฉฐ ํ์๋ ์ด์ ๋ฅผ ์๊ณ ์ถ์ต๋๋ค.
๋ถํํ๋ ๊ฒ ์๋๋ผ ๊ทธ๋ฅ ๊ถ๊ธํด์์. ๋๋ ๊ทธ๊ฒ์ด ์์ ์ค์ด๋ผ๊ณ ํ์ ํ์ง๋ง ์งํ ์ํฉ์ ๋ํด ์๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค.
@chriscurnow ์ต์ข ์ฌ์ฉ์์๊ฒ CLI ๋ฌธ์ ๋ก ๋ช ์๋์ง๋ง(https://github.com์ @samtstern ๋น) ์ค์ ์์ธ์ CLI ๋๊ตฌ๊ฐ ์๋ (ํ์ ์์ค) ์๋ฒ ์ธก ๋๋ฌธ์ธ ๊ฒ ๊ฐ์ต๋๋ค. /firebase/firebase-tools/issues/536#issuecomment-572830647).
๋ถํํ๋ ๋ฐฑ์๋์ ๋ํ ์ข์ ๊ณต๊ฐ ์ถ์ ๊ธฐ๊ฐ ์์ผ๋ฏ๋ก ์ฌ๊ธฐ์์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์ต๋๋ค.:(
Google์ด ๋ฐฑ์๋์์ ์ด ๋ฒ๊ทธ๋ฅผ ์์ ํ๋๋ก ์ด ๋ฒ๊ทธ๋ฅผ ์ด๋ป๊ฒ ์ด ์ ์์ต๋๊น?
๋ฌด์งํ๊ฒ ๋๋ฆฌ๋ค
์๋ฅผ ๋ค์ด, ์ด๋ ๊ฒ ์ค๋ ๊ฑธ๋ฆฌ๋ฉด Firebase ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฌด์จ ์์ฉ์ด๊ฒ ์ต๋๊น?
์ฌ๋ฌ๋ถ, ์ฐ๋ฆฌ ๋ชจ๋ ์ด ๋ฌธ์ ๋ฅผ Google์ ๋ณด๊ณ ํ๊ณ ๊ทธ๋ค์ด ๋ค์ ์ ์์๊น์?
https://firebase.google.com/support/troubleshooter/contact
์ค์ํ ์ผ์ ์ํด Google์ ๋ฌด์ธ๊ฐ๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ ๋๋ง๋ค Google์ด ํ์กดํ๋ ๊ฐ์ฅ ์๋น์ ์นํ์ ์ด์ง ์์ ํ์ฌ ์ค ํ๋๋ผ๋ ๊ฒ์ ์๊ธฐํ์ง๋ง, ์ด๋ด, ์ฐ๋ฆฌ๋ ์๋ํ ์ ์์ต๋๋ค.
@RenFontes ๋ฐฉ๊ธ ์ผ์ด์ค 00075974๋ฅผ ์ ์ถํ์ต๋๋ค: Firebase ๊ธฐ๋ฅ ๋ฐฐํฌ๊ฐ ๋๋ฌด ๋๋ ค์ Firebase ์ง์์์ ์ฌ์ฉํ ์ ์์ต๋๋ค . ๋๋ ๊ทธ๋ค์ด ๋์์ค๋ ๋๋ก ์ด ๋ฉ์์ง๋ฅผ ์ ๋ฐ์ดํธํ ๊ฒ์ ๋๋ค.
ํน์ ๊ธฐ๋ฅ์ ๋ฐฐํฌํ ์ ์์ต๋๋ค. CLI์ ๊ฐ ๊ธฐ๋ฅ์ ๋ํ "์ฒดํฌ์ฌ ์ถ์ ๊ธฐ"๊ฐ ์๊ณ ๋ณ๊ฒฝ๋ ๊ธฐ๋ฅ๋ง ๋ฐฐํฌํ ์ ์์์ต๋๊น(๋ํ ์ฌ์ฉํ๋ ๋ชจ๋ ํญ๋ชฉ ์ถ์ : vars, packages, ...)?
@SrBrahma ๋ ํ์คํ์ง๋ง ๋จ์ผ ๊ธฐ๋ฅ๋ง ๋ฐฐํฌํ๋๋ผ๋ ๋ฌธ์ ๋ ์ฌ์ ํ ์กด์ฌํฉ๋๋ค(์: ๋จ์ผ ๊ธฐ๋ฅ ๋ฐฐํฌ๋ ์๊ฐ ์ด๊ณผ๋ก ์ธํด ์ฌ์ ํ ์คํจํ ์ ์์).
์ผ๊ด ๊ธฐ๋ฅ ๋ฐฐํฌ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ์์๊ฒ ๋์ด๊ฐ ํ์๊ฐ ์์ผ๋ฉฐ ๋ง์ ๊ฒฝ์ฐ์ ๊ธฐ๋ฅ ์ ๋ฐ์ดํธ๊ฐ ์์์ ์ผ๋ก ํ์ํ๋ฏ๋ก ๋ถํ /์ผ๊ด ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ํ ์ ์์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ํ์ง๋ง ์ฌ๊ธฐ์์ ์ค์ ๋ก ํ์ํ ๊ฒ์ Google์ SLA์ ์ด๋ฅผ ์ค์ํ๋ ๊ฒ์ ๋๋ค.
Firebase Functions ๊ฐ๋?(์๋ง๋ ์์ฃผ) ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค๋ ๊ฒ์ด ์ฌ์ค์ ๋๋ค..์ ๋ง ๋๋ฆฝ๋๋ค.. ์ฐจ๋ผ๋ฆฌ Rust๋ฅผ ์ง์ํด์ผ ํฉ๋๋ค.. Go? ๋ ธ๋๋ณด๋ค ํจ์ฌ ๋น ๋ฆ ๋๊น?
์ฌ์ ํ Google์ด Google Functions ๋ฐฐํฌ ์๊ฐ์ ๊ฐ์ ํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๊น?
PWA์์ SSR๋ก ์ด๋ํ๋ฉด์ ๋ฐฐํฌํ ๋๋ง๋ค 7๋ถ์ ๋ ๊ธฐ๋ค๋ ค์ผ ํ์ต๋๋ค. ๐
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด ๋ฌธ์ ๋ ์ ๋ง ๊ณจ์น ์ํ ๋ฌธ์ ์ ๋๋ค. ๋์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค./