SlideShare a Scribd company logo
Firestore
박치원
이번 발표에서 다룰 내용
1. Firestore에 대한 소개
2. Firestore 실시간 동기화 기능으로 채팅 구현
다루지 않을 내용
Firestore에 대한 깊은 내용은 다루지 않음.
(발표자도 잘 모르기 때문에!)
Firestore란
● 구글 클라우드 플랫폼의 NOSQL 데이터베이스
● 관계형 데이터베이스 만큼은 아니지만 쿼리 가능
● 실시간 동기화, 오프라인 모드 지원
● 요금제
무료 유료
Firestore의 데이터 모델
● 문서
● 컬렉션
문서
● Firestore의 저장소 단위
● KEY, VALUE 쌍들로 이루어진 JSON 구조의 레코드
● 부울, 숫자, 문자열, 좌표, 배열, 맵 등 다양한 타입 지원
● 다음과 같이 ‘맵’으로 구조화 가능
“alovelace” : {
first: “Ada”,
last: “Lovelace”,
born: 1815
}
컬렉션
● 문서를 담고 있는 컨테이너
● 관계형 DB의 테이블
사용자 = 컬렉션
alovelace, aturing = 문서
계층적 데이터
● 문서는 하위컬렉션을 포함할 수 있음.
● 구조화 vs 계층
roomA 문서를 조회하면 데이터에는 {name: “my chat room”}만 포함.
roomA.messages 컬렉션의 방대한 채팅메세지까지 다 가져오지 않음.
=> 구조를 단순하게 만들면서 필요한 데이터만 조회가능
데이터 조회하기
firestore().collection('users').doc('alice')
const user = await firestore()
.collection('users')
.doc(id)
.get()
if(user.exists){
user.data().name //”Alice”
}else {
//do something...
}
데이터 조회하기 - 쿼리(1)
firestore()
.collection('chat')
.where('id', '==', 'tony')
key, 비교, value
데이터 조회하기 - 쿼리(2)
● 쿼리 연산자: < , <= , ==, >, >=, array-contains
● array-contains
regions(배열)에 ‘west_coast’가 포함되어있는 모든 문서를 필터링
데이터 조회하기 - 복합쿼리
● where()을 여러개 나열해서 and 조건으로 쿼리를 만들 수 있음.
-> state == ‘C0’ && name == ‘Denver’
-> state == ‘CA’ && population < 100000
● 범위 비교는 하나의 필드에 대해서만 가능.
-> (x) 서로 다른 필드에 범위 비교를 할 수 없음!!!
쿼리 제한사항
● 여러 필드에 범위 필터가 있는 쿼리
● 논리적 OR 쿼리 => 앱에서 OR를 각각 조회한 후 병합
● != 쿼리 => 초과,미만으로 분할
ex) where(‘age’, ‘!=’, 30) => where(‘age’, ‘>’, 30).where(‘age’, ‘<’, 30)
데이터 추가하기
● set() : 문서의 id를 지정. 없으면 생성하고, 있으면 덮어씀.
(merge옵션으로 완전히 덮어쓰지않고 병합가능)
● add() : 문서의 id를 무작위로 지정.
firestore().collection("users").doc("bob").set({name: 'Bob'});
firestore().collection("users").add({id: 'bob', name: 'Bob'});
실시간 업데이트
● onSnapshot() 메소드를 사용해서 문서 수신대기를 할 수 있고
업데이트 될 때마다 콜백메소드가 호출됨.
Users 컬렉션의 userId 문서가 변경되면
콜백을 통해 변경된 문서가 전달된다.
실시간 채팅기능 구현하기
구현할 기능
● 회원가입 / 로그인
● 친구 목록 / 추가
● 특정 친구와 채팅
1. 회원가입, 로그인
● 데이터 구조
● 가입&로그인
2. 친구추가
● 각 유저의 문서의 하위컬렉션에 친구목록 표시
● 나와 친구의 아이디 조합으로 채팅방 구분
● RDB에서는 친구관계를 별도의 테이블을 만들지만
Firestore는 복잡한 쿼리가 힘들기 때문에 하위컬렉션으
로 단순한 구조를 사용
friends {
user1: ‘alice’,
user2: ‘bob’,
date: ‘2020-06-12 xx:xx:xx’
}
● 친구를 추가할 때 rooms 컬렉션에 room 문서를 추가
● room 문서에 message 하위컬렉션이 존재
친구목록 조회
alice의 친구목록
3. 메세지 전송
rooms/{room-key}/messages에
메세지 문서를 추가한다.
4. 메세지 조회/수신 ● rooms/{room-key}/message 컬렉션을
구독하여 실시간으로 동기화
끗

More Related Content

PPTX
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
PPTX
elasticsearch
PPTX
Mongo DB 완벽가이드 - 4장 쿼리하기
PPTX
이도형 실적 내역서
PDF
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
PDF
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
PPTX
Mongo DB 성능최적화 전략
PPTX
Docspin 에셋에 대해
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
elasticsearch
Mongo DB 완벽가이드 - 4장 쿼리하기
이도형 실적 내역서
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
Mongo DB 성능최적화 전략
Docspin 에셋에 대해

What's hot (20)

PDF
Ch1 일래스틱서치 클러스터 시작
PDF
Mongo db 활용 가이드 ch7
PPTX
20140522 uc집계 정민철_발표자료_최종
PDF
엘라스틱서치, 로그스태시, 키바나
PPTX
Logstash, ElasticSearch, Kibana
PPTX
D3.js
PPTX
Unity cookbook 20
PDF
hadoop ch1
PPTX
Fundamental of ELK Stack
PDF
Mymysql basic sql
PPTX
검색엔진이 데이터를 다루는 법 김종민
PPTX
20151022 elasticsearch 적용및활용_송준이_sds발표용
PDF
Elasticsearch server Chapter5
PDF
Data analysis with Tajo
PDF
하둡 좋은약이지만 만병통치약은 아니다
PPTX
Mongo DB로 진행하는 CRUD
PPTX
Android xml parsing
PPTX
Rapid json tutorial
PPTX
Elasticsearch development case
PPTX
MySQL 기초
Ch1 일래스틱서치 클러스터 시작
Mongo db 활용 가이드 ch7
20140522 uc집계 정민철_발표자료_최종
엘라스틱서치, 로그스태시, 키바나
Logstash, ElasticSearch, Kibana
D3.js
Unity cookbook 20
hadoop ch1
Fundamental of ELK Stack
Mymysql basic sql
검색엔진이 데이터를 다루는 법 김종민
20151022 elasticsearch 적용및활용_송준이_sds발표용
Elasticsearch server Chapter5
Data analysis with Tajo
하둡 좋은약이지만 만병통치약은 아니다
Mongo DB로 진행하는 CRUD
Android xml parsing
Rapid json tutorial
Elasticsearch development case
MySQL 기초
Ad

Similar to Firestore (20)

PDF
Firebase for web (웹개발을 위한 파이어베이스) 3 Real-Time Database
PPTX
Mongo db 최범균
PDF
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
PDF
MongoDB 하루만에 끝내기
PDF
Mongodb 특징 분석
PPTX
[211] HBase 기반 검색 데이터 저장소 (공개용)
PPTX
[GDG 대전] Flutter에 Firebase 한스푼 - GDG Flutter Festival
PDF
Apache hbase overview (20160427)
PDF
[김태우] Simplechat using firebase
PDF
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
PDF
SPARK SQL
PDF
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&amp;c)
PDF
Jco 소셜 빅데이터_20120218
PPTX
Facebook이 대규모 확장성 도전에서 배운 것
PDF
No sql survey report
PDF
HBase 훑어보기
PDF
스마일게이트 서버개발캠프 - 5vengers
PDF
PDF
BigData, Hadoop과 Node.js, R2
PPTX
Team project(for fullstack)
Firebase for web (웹개발을 위한 파이어베이스) 3 Real-Time Database
Mongo db 최범균
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
MongoDB 하루만에 끝내기
Mongodb 특징 분석
[211] HBase 기반 검색 데이터 저장소 (공개용)
[GDG 대전] Flutter에 Firebase 한스푼 - GDG Flutter Festival
Apache hbase overview (20160427)
[김태우] Simplechat using firebase
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
SPARK SQL
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&amp;c)
Jco 소셜 빅데이터_20120218
Facebook이 대규모 확장성 도전에서 배운 것
No sql survey report
HBase 훑어보기
스마일게이트 서버개발캠프 - 5vengers
BigData, Hadoop과 Node.js, R2
Team project(for fullstack)
Ad

More from Wonjun Hwang (20)

PDF
20250802 _ TOSS MAKERS CONFERENCE 25.pdf
PDF
20250725_Kit-Works Team Study_GOOGLE I_O 2025.pdf
PPTX
20250725_Kit-Works Team Study_Spring AI.pptx
PPTX
20250718_Next.js를 떠나는 개발자들: 비판과 대안 프레임워크 분석.pptx
PDF
Kit-Works Team Study_20250718_자바의-enum.pdf
PDF
Kit-Works Team Study_Vibe Coding 도전해보기.pdf
PPTX
Kit-Works Team Study_브라우저 검색 과정_20250704_손문수.pptx
PDF
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
PDF
Kit-Works Team Study_20250627_기술 부채_김경수.pdf
PPTX
20250530_Kit-Works Team Study_결제, 너 믿어도 될까.pptx
PPTX
20250620_Kit-Works Team Study_jspecify.pptx
PDF
20250523_Kit-Works Team Study_윤정빈_놓치고 있던 웹 접근성.pdf
PPTX
20250523_Kit-Works Team Study_Exception.pptx
PPTX
Kit-Works Team Study-20250517_uuid_김한나.pptx
PDF
Kit-Works Team Study_20240517_장현정_Claude에서MCP사용해보기.pdf
PDF
Kit-Works Team Study_아직도 Dockefile.pdf_김성호
PDF
Kit-Works Team Study_팀스터디_김한솔_nuqs_20250509.pdf
PDF
Kit-Works Team Study_공허참,부존재증명,트러블슈팅.pdf
PPTX
Kit-Works Team Study_20250502_Code_Formatting_유현주.pptx
PDF
20250425_ Kit-Works Team Study_Java의 문자열 클래스.pdf
20250802 _ TOSS MAKERS CONFERENCE 25.pdf
20250725_Kit-Works Team Study_GOOGLE I_O 2025.pdf
20250725_Kit-Works Team Study_Spring AI.pptx
20250718_Next.js를 떠나는 개발자들: 비판과 대안 프레임워크 분석.pptx
Kit-Works Team Study_20250718_자바의-enum.pdf
Kit-Works Team Study_Vibe Coding 도전해보기.pdf
Kit-Works Team Study_브라우저 검색 과정_20250704_손문수.pptx
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
Kit-Works Team Study_20250627_기술 부채_김경수.pdf
20250530_Kit-Works Team Study_결제, 너 믿어도 될까.pptx
20250620_Kit-Works Team Study_jspecify.pptx
20250523_Kit-Works Team Study_윤정빈_놓치고 있던 웹 접근성.pdf
20250523_Kit-Works Team Study_Exception.pptx
Kit-Works Team Study-20250517_uuid_김한나.pptx
Kit-Works Team Study_20240517_장현정_Claude에서MCP사용해보기.pdf
Kit-Works Team Study_아직도 Dockefile.pdf_김성호
Kit-Works Team Study_팀스터디_김한솔_nuqs_20250509.pdf
Kit-Works Team Study_공허참,부존재증명,트러블슈팅.pdf
Kit-Works Team Study_20250502_Code_Formatting_유현주.pptx
20250425_ Kit-Works Team Study_Java의 문자열 클래스.pdf

Firestore

  • 2. 이번 발표에서 다룰 내용 1. Firestore에 대한 소개 2. Firestore 실시간 동기화 기능으로 채팅 구현
  • 3. 다루지 않을 내용 Firestore에 대한 깊은 내용은 다루지 않음. (발표자도 잘 모르기 때문에!)
  • 4. Firestore란 ● 구글 클라우드 플랫폼의 NOSQL 데이터베이스 ● 관계형 데이터베이스 만큼은 아니지만 쿼리 가능 ● 실시간 동기화, 오프라인 모드 지원 ● 요금제 무료 유료
  • 5. Firestore의 데이터 모델 ● 문서 ● 컬렉션
  • 6. 문서 ● Firestore의 저장소 단위 ● KEY, VALUE 쌍들로 이루어진 JSON 구조의 레코드 ● 부울, 숫자, 문자열, 좌표, 배열, 맵 등 다양한 타입 지원 ● 다음과 같이 ‘맵’으로 구조화 가능 “alovelace” : { first: “Ada”, last: “Lovelace”, born: 1815 }
  • 7. 컬렉션 ● 문서를 담고 있는 컨테이너 ● 관계형 DB의 테이블 사용자 = 컬렉션 alovelace, aturing = 문서
  • 8. 계층적 데이터 ● 문서는 하위컬렉션을 포함할 수 있음. ● 구조화 vs 계층 roomA 문서를 조회하면 데이터에는 {name: “my chat room”}만 포함. roomA.messages 컬렉션의 방대한 채팅메세지까지 다 가져오지 않음. => 구조를 단순하게 만들면서 필요한 데이터만 조회가능
  • 9. 데이터 조회하기 firestore().collection('users').doc('alice') const user = await firestore() .collection('users') .doc(id) .get() if(user.exists){ user.data().name //”Alice” }else { //do something... }
  • 10. 데이터 조회하기 - 쿼리(1) firestore() .collection('chat') .where('id', '==', 'tony') key, 비교, value
  • 11. 데이터 조회하기 - 쿼리(2) ● 쿼리 연산자: < , <= , ==, >, >=, array-contains ● array-contains regions(배열)에 ‘west_coast’가 포함되어있는 모든 문서를 필터링
  • 12. 데이터 조회하기 - 복합쿼리 ● where()을 여러개 나열해서 and 조건으로 쿼리를 만들 수 있음. -> state == ‘C0’ && name == ‘Denver’ -> state == ‘CA’ && population < 100000 ● 범위 비교는 하나의 필드에 대해서만 가능. -> (x) 서로 다른 필드에 범위 비교를 할 수 없음!!!
  • 13. 쿼리 제한사항 ● 여러 필드에 범위 필터가 있는 쿼리 ● 논리적 OR 쿼리 => 앱에서 OR를 각각 조회한 후 병합 ● != 쿼리 => 초과,미만으로 분할 ex) where(‘age’, ‘!=’, 30) => where(‘age’, ‘>’, 30).where(‘age’, ‘<’, 30)
  • 14. 데이터 추가하기 ● set() : 문서의 id를 지정. 없으면 생성하고, 있으면 덮어씀. (merge옵션으로 완전히 덮어쓰지않고 병합가능) ● add() : 문서의 id를 무작위로 지정. firestore().collection("users").doc("bob").set({name: 'Bob'}); firestore().collection("users").add({id: 'bob', name: 'Bob'});
  • 15. 실시간 업데이트 ● onSnapshot() 메소드를 사용해서 문서 수신대기를 할 수 있고 업데이트 될 때마다 콜백메소드가 호출됨. Users 컬렉션의 userId 문서가 변경되면 콜백을 통해 변경된 문서가 전달된다.
  • 17. 구현할 기능 ● 회원가입 / 로그인 ● 친구 목록 / 추가 ● 특정 친구와 채팅
  • 18. 1. 회원가입, 로그인 ● 데이터 구조 ● 가입&로그인
  • 19. 2. 친구추가 ● 각 유저의 문서의 하위컬렉션에 친구목록 표시 ● 나와 친구의 아이디 조합으로 채팅방 구분 ● RDB에서는 친구관계를 별도의 테이블을 만들지만 Firestore는 복잡한 쿼리가 힘들기 때문에 하위컬렉션으 로 단순한 구조를 사용 friends { user1: ‘alice’, user2: ‘bob’, date: ‘2020-06-12 xx:xx:xx’ }
  • 20. ● 친구를 추가할 때 rooms 컬렉션에 room 문서를 추가 ● room 문서에 message 하위컬렉션이 존재
  • 23. 4. 메세지 조회/수신 ● rooms/{room-key}/message 컬렉션을 구독하여 실시간으로 동기화
  • 24.