Firebase Cloud Functions를 적용하게 되었던 배경을 이전 글에서 소개해드린 바가 있습니다.
그 글에 이어 Cloud Functions 적용기를 간단히 소개하고자 합니다.
순서는 다음과 같습니다.
1. Cloud Functions 개발 환경 구축
좀더 상세한 내용을 원하시면 하기 링크를 참고하시기 바랍니다.
(본 글에서 다루는 내용보다 상세한 내용을 담고 있습니다.)
https://firebase.google.com/docs/functions/get-started
https://firebase.google.com/docs/functions/database-events
Cloud Functions은 Node.js를 기반으로 동작하는 것 같습니다.
따라서 다음 단계가 선행되어야 합니다.
Node.js와 npm을 설치했다면 다음 명령어로 Firebase CLI를 설치할 수 있습니다.
npm install -g firebase-tools
Firebase CLI까지 설치가 되었다면 이제 Firebase Cloud Functions 프로젝트를 생성해야 합니다.
제가 개발 중인 프로젝트는 Android 모바일 어플리케이션이었습니다.
하지만 지금 작성하고자 하는 코드는 Android 앱이 아닌 Google Cloud 서버에 로드되어 동작할 코드이기 때문에
별도 프로젝트를 생성해야 합니다.
firebase login
그럼 자동으로 몇몇 파일과 directory들이 생성됩니다.
myproject
+- .firebaserc # Hidden file that helps you quickly switch between
| # projects with `firebase use`
|
+- firebase.json # Describes properties for your project
|
+- functions/ # Directory containing all your functions code
|
+- package.json # npm package file describing your Cloud Functions code
|
+- index.js # main source file for your Cloud Functions code
|
+- node_modules/ # directory where your dependencies (declared in
# package.json) are installed
자세한 내용은 다음 링크를 참조하시기 바랍니다.
https://firebase.google.com/docs/functions/get-started#set_up_and_initialize_functions_sdk
많은 파일들이 자동으로 생성되지만, 주목해야 할 파일은 functions/index.js 입니다.
바로 이 파일에 우리가 원하는 서버 사이드 코드를 작성하면 됩니다.
// The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers.
const functions = require('firebase-functions');
// The Firebase Admin SDK to access the Firebase Realtime Database.
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
코드를 작성하고 나니 이게 이렇게 쉬워도 되나 싶습니다.
exports.saveUser = functions.database.ref('/users/{userId}')
.onWrite(event => {
// Grab the current value of what was written to the Realtime Database.
const user = event.data.val();
console.log('[saveUser] - user: ', event.params.userId, user);
var groupUser = {
"birthYear" : user.birthYear,
"firstName" : user.firstName,
"id" : user.id,
"lastName" : user.lastName,
"profileUrl" : user.profileUrl,
};
event.data.ref.root.child('/groups/' + user.groupId + '/userlist/' + user.id).set(groupUser);
});
이제 Firebase Cloud Functions에 작성한 코드를 올리는 일만 남았습니다.
다음 명령어를 수행하면 작성한 코드가 로드되며 바로 이용 가능한 상태가 됩니다.
$ firebase deploy --only functions
이제 User 정보를 변경하면, Group의 groupUser 역시 변경/생성되는 마법같은 일이 일어날 겁니다.
그 글에 이어 Cloud Functions 적용기를 간단히 소개하고자 합니다.
순서는 다음과 같습니다.
1. Cloud Functions 개발 환경 구축
2. Cloud Functions 코드 작성
3. Deploy
좀더 상세한 내용을 원하시면 하기 링크를 참고하시기 바랍니다.
(본 글에서 다루는 내용보다 상세한 내용을 담고 있습니다.)
https://firebase.google.com/docs/functions/get-started
https://firebase.google.com/docs/functions/database-events
1. Cloud Functions 개발 환경 구축
먼저 Cloud Functions을 시작하기 위해서는 별도 개발 환경을 구축해야 합니다.Cloud Functions은 Node.js를 기반으로 동작하는 것 같습니다.
따라서 다음 단계가 선행되어야 합니다.
- Node.js 설치 (v6.11.1 recommend)
- npm 설치
- Firebase CLI 설치
Node.js와 npm을 설치했다면 다음 명령어로 Firebase CLI를 설치할 수 있습니다.
npm install -g firebase-tools
Firebase CLI까지 설치가 되었다면 이제 Firebase Cloud Functions 프로젝트를 생성해야 합니다.
제가 개발 중인 프로젝트는 Android 모바일 어플리케이션이었습니다.
하지만 지금 작성하고자 하는 코드는 Android 앱이 아닌 Google Cloud 서버에 로드되어 동작할 코드이기 때문에
별도 프로젝트를 생성해야 합니다.
1.1 먼저 다음 명령어를 통해 Firebase tool 사용을 위한 인증을 완료합니다.
firebase login1.2 원하는 경로에 원하는 이름으로 Directory를 생성하고, 다음 명령어로 초기화합니다.
firebase init functions그럼 자동으로 몇몇 파일과 directory들이 생성됩니다.
myproject
+- .firebaserc # Hidden file that helps you quickly switch between
| # projects with `firebase use`
|
+- firebase.json # Describes properties for your project
|
+- functions/ # Directory containing all your functions code
|
+- package.json # npm package file describing your Cloud Functions code
|
+- index.js # main source file for your Cloud Functions code
|
+- node_modules/ # directory where your dependencies (declared in
# package.json) are installed
자세한 내용은 다음 링크를 참조하시기 바랍니다.
https://firebase.google.com/docs/functions/get-started#set_up_and_initialize_functions_sdk
많은 파일들이 자동으로 생성되지만, 주목해야 할 파일은 functions/index.js 입니다.
바로 이 파일에 우리가 원하는 서버 사이드 코드를 작성하면 됩니다.
2. Cloud Functions 코드 작성
2.1 필수 Module Import 및 초기화
Firebase Realtime Database Trigger를 적용하기 위해 하기와 같이 필수 모듈을 Import 합니다.// The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers.
const functions = require('firebase-functions');
// The Firebase Admin SDK to access the Firebase Realtime Database.
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
2.2 Trigger 코드 작성
사실 Node.js는 커녕 Javascript도 익숙하지 않아 막연히 진입 장벽이 높을 거라 생각했는데,코드를 작성하고 나니 이게 이렇게 쉬워도 되나 싶습니다.
- /users/{userId} 에 write event가 발생할 경우
- groupUser 객체를 생성해서
- /groups/{groupId}/userlist/{userId}/ 경로에 업데이트해주는 것이 전부입니다.
exports.saveUser = functions.database.ref('/users/{userId}')
.onWrite(event => {
// Grab the current value of what was written to the Realtime Database.
const user = event.data.val();
console.log('[saveUser] - user: ', event.params.userId, user);
var groupUser = {
"birthYear" : user.birthYear,
"firstName" : user.firstName,
"id" : user.id,
"lastName" : user.lastName,
"profileUrl" : user.profileUrl,
};
event.data.ref.root.child('/groups/' + user.groupId + '/userlist/' + user.id).set(groupUser);
});
3. Deploy
이제 Firebase Cloud Functions에 작성한 코드를 올리는 일만 남았습니다.다음 명령어를 수행하면 작성한 코드가 로드되며 바로 이용 가능한 상태가 됩니다.
$ firebase deploy --only functions
이제 User 정보를 변경하면, Group의 groupUser 역시 변경/생성되는 마법같은 일이 일어날 겁니다.
댓글
댓글 쓰기