티스토리 뷰
firebase 는 실시간 데이터베이스와 Cloud Firestore 두 가지 타입의 저장소를 제공한다. 현재 (18.04.14) 기준으로 firestore 는 베타 기간이고 공식 문서에 따르면 아직 안정성은 실시간 데이터베이스에 비해 떨어질 수 있다고 하니 상용으로 운영할 생각이라면 여러가지 상황을 고려해야겠다. 하지만 그 강력함을 보면 사용하지 않을 이유가 있을까 싶다.
일단 두 종류의 데이터베이스에 대한 비교는 아래 페이지를 통해 확실하게 알 수 있다.
https://firebase.google.com/docs/firestore/rtdb-vs-firestore?hl=ko
여기서 우리는 node.js 기반으로 firestore 를 사용해 보도록 한다. 우선 firebase 에서 제공되는 데이터베이스는 모두 NoSQL 이고 firestore 의 데이터의 적재 스타일을 보면 collection - document - ( collection | field ) 와 같은 형식을 따른다. 통상적으로 NoSQL 에서 사용되는 용어들이다. 이해를 돕기위해 실제 firestore 에 저장된 데이터를 살펴보자.
한 개의 collection 을 등록해놓고 하위에 여러가지 document 를 추가했다. NoSQL 답게 데이터는 밀어넣는대로 들어간다. 자, 그럼 본격적으로 사용해보도록 하자.
npm 으로 firebase 모듈을 설치하도록 한다.
$ npm install firebase --save
뒤쪽에 --save 옵션을 넣는 이유는 npm init 을 통해 프로젝트를 시작했을 때 package.json 이 관리되게 되는데 이쪽에 dependencies 를 추가해주기 위해서다. 잘 이해가 안되면 우선 습관적으로 쓰는게 좋다. ( 관련된 부분은 별도의 포스팅을 찾아보기를 권한다 )
모듈 설치가 끝났으면 우리가 만드는 프로그램에서 firebase 로 접근하기 위한 인증 키 등을 등록해줘야 한다. 해당 키에 대한 정보는 firebase 프로젝트로 접근했을 때 노출되는 overview 에서 확인할 수 있다. 대략 아래와 같은 화면에서 사용할 프로그램을 선택하면 되는데 우리는 노드를 통한 웹 애플리케이션을 예제로 하고 있으므로 웹 앱에 Firebase 추가 버튼을 누르면 되겠다.
아래처럼 인증에 필요한 코드를 얻을 수 있다.
해당 키를 node 파일에 넣고 사용해주면 되는데 인증에 필요한 내용을 다루는 파일과 해당 파일을 기반으로 초기화를 진행하는 코드를 분리해서 사용하도록 해보자. 일단 인증키를 아래처럼 명시하도록 하자.
// firebaseConfig.js
export default {
apiKey: "AIzaSyC7zsEP4XCMP_-HcpqPxG_L_Rv0JDtH1KY",
authDomain: "livemsg-de622.firebaseapp.com",
databaseURL: "https://livemsg-de622.firebaseio.com",
projectId: "livemsg-de622",
storageBucket: "livemsg-de622.appspot.com",
messagingSenderId: "611585985356"
}
해당 파일을 읽어서 초기화하는 코드는 다음과 같이 작성하도록 한다.
// firebaseInit.js
import firebase from 'firebase'
import 'firebase/firestore'
import firebaseConfig from './firebaseConfig'
const firebaseApp = firebase.initializeApp(firebaseConfig)
export default firebaseApp.firestore()
살펴보면 firebaseInit.js 에서 firebseConfig.js 에 있는 키를 통해 파베를 초기화해주고 있다. 이제 우리는 firebaseInit.js 만 가져다 쓰면 된다. 노드에서는 아래 한줄로 처리된다.
import db from './firebaseInit';
이제 db 객체를 통해 firestore 에 접근이 가능하다. 여기서 몇 가지 예제를 더 살펴보자.
// document 추가
db.collection('cities').doc('new-city-id').set(data);
문서 이름을 생략하는 방법도 있다.
var newCityRef = db.collection('cities').doc();
// Later...
var setDoc = newCityRef.set({
// ...
});
문서의 내용을 업데이트 하는 방법은 아래와 같다.
var cityRef = db.collection('cities').doc('DC');
// Set the 'capital' field of the city
var updateSingle = cityRef.update({ capital: true });
데이터의 삭제 방법은 delete() 을 사용한다.
var deleteDoc = db.collection('cities').doc('DC').delete();
특정 필드만 삭제할 수도 있다.
// Get the `FieldValue` object
var FieldValue = require('firebase-admin').firestore.FieldValue;
// Create a document reference
var cityRef = db.collection('cities').doc('BJ');
// Remove the 'capital' field from the document
var removeCapital = cityRef.update({
capital: FieldValue.delete()
});
데이터는 아래와 같이 가져올 수 있다.
var citiesRef = db.collection('cities');
var allCities = citiesRef.get()
.then(snapshot => {
snapshot.forEach(doc => {
console.log(doc.id, '=>', doc.data());
});
})
.catch(err => {
console.log('Error getting documents', err);
});
기본적인 읽기 / 쓰기 / 수정에 대해서 살펴봤는데 쿼리 등을 이용한 더 다양한 방식은 아래 링크를 참고하도록 하자.
https://firebase.google.com/docs/firestore/
참고로 onSnapshot() 을 이용하면 마치 pub/sub 에서의 subscribe 과 같이 사용할 수 있다. 이 말은 firestore 에 변화를 바로 수신한다는 의미다. 해당 기능을 몰랐을 때는 firebase 의 Functions 를 이용해서 별도의 트리거를 만들어야 하는 줄 알았는데 그럴 필요조차 없다. 이제 다양한 데이터를 밀어넣고 잘 갖다쓰기만 하면 되는 세상이다.
(*) 참고자료: https://www.youtube.com/watch?v=sYNjEzcOTOs
'개발 > Cloud (GCP)' 카테고리의 다른 글
Kubernetes Engine (GKE #3. 터미널 배포) (2) | 2018.05.06 |
---|---|
firebase 인증 시작하기 (0) | 2018.04.27 |
firestore 저장소 사용하기 (15) | 2018.04.15 |
Firebase 시작하기 (0) | 2018.04.07 |
프로젝트 종료하기 (0) | 2018.03.10 |
Cloud TPU 사용하기 (1) | 2018.02.15 |
-
마틴 좋은 정보 감사합니다 :D 2018.04.23 12:40
-
Jaeyeon Baek 마선생님의 방문에 몸 둘 바를 모르겠습니다. :-) 2018.04.23 21:09 신고
-
신용환 혹시 Firebase에서 storage와 realtime database를 동시에 사용할 수 있는지요? 2019.02.05 18:21 신고
-
Jaeyeon Baek 네 가능합니다. 2019.02.06 00:01 신고
-
신용환 댓글 고맙습니다.
직접 해보니 둘 다 사용하는게 가능하네요.^^ 2019.02.09 11:14 신고 -
Jaeyeon Baek 감사합니다. :) 2019.02.09 11:15 신고
-
fistful 궁금해서 검색했더니 재연님 블로그네요. :-) 2019.03.15 19:58 신고
-
Jaeyeon Baek 누구신지.. 도움이 되셨기를요 :) 2019.03.15 20:14 신고
-
fistful 에구구구. 페이스북 정현석 정기욱 입니다 2019.03.15 20:15 신고
-
Jaeyeon Baek 아이쿠! 차려진것도 없이 누추한곳에 ㅎㅎ 감사합니다 :) 2019.03.15 20:20 신고
-
Jaeyeon Baek 아, 이게 PC로 보니까 프로필이랑 아이디 링크가 활성화 되네요. 아까는 모바일로 봐서 아무 정보를 확인할 수 없었습니다. 하하하 이놈에 티스토리 모바일팀 :-) 2019.03.16 01:58 신고
-
jyd82 코딩을 이제 막 배우기 시작한지 2달차된 완전 초보입니다. firebase로 서버구축의 도움을 받는다면 프로토타입의 앱 서비스 테스트정도는 쉽게 해볼 수 있다고 들었습니다. 그래서 같이 배워보려고 하는데 기술하신 내용들이 생각보다 많이 생소하네요. 백엔드의 도움을 받을 수 있다고 하지만 완전 초보가 하기에는 공부해야 할 것들이 아주 많은 것 같은데...
Firebase를 손쉽게 건드리기 위해서 최소한 알아야 하는 분야의 지식에 뭐가 있을까요?
감사합니다. ^^ 2019.08.17 08:26 -
Jaeyeon Baek 일단 여기서 언급한 파베가 확실히 현재 하시려는것에 확실한 대안이 되는지 보셔얄것 같고요. 위에 내용을 이해하기 위해서는 1) NoSQL에서 사용하는 용어와 개념 숙지 2) node.js 한스푼 정도 될 것 같네요.
간단한 디비 목적으로 사용하시려거든 어쩌면 그냥 로컬 디비 설치해서 쓰는게 훨씬 더 다양한 언어로 된 예제를 찾으실 수 있을 것으로 기대됩니다. 더 쉽고요. :)
1) 필요한 데이터베이스 종류를 확인해서 설치하고, 2) 해당디비에 연결하는 예제코드를 본인이 필요한 개발언어 위주로 검색해서 3) 갖다 붙여서 동작 확인하고 4) 코드가 어떤 의미인지 역으로 공부 하는게 좋지 않을까요? :) 2019.08.17 09:30 신고 -
jyd82 와 ~~ 댓글 달아주셔서 감사합니다. ^^
그러면 일단 NoSQL과 node.js에 대해 먼저 공부해야겠네요..;;;지금 스위프트로 ios공부중이라서요...
node.js는 자바스크립트의 연장선인 언어라고 들었는데 스위프트와 연결이 되는 것인가요?? 2019.08.17 10:37 -
Jaeyeon Baek 아 그런 배경이시면 node.js는 필요 없습니다. 위 예제는 웹에서 파베를 연결하는거라서 자바스크립트 코드가 필요했던거고 iOS면 iOS쪽 예제 코드를 보시면 됩니다. :) 2019.08.17 11:02 신고
- Total
- 1,645,269
- Today
- 47
- Yesterday
- 861