오늘 한 일
- 노마드코더 트위터 클론코딩 실습
- Firestore Database 생성
- 트윗 생성, 수정, 삭제 기능 구현
- RealTime 연동을 위해 트윗을 onSnapshot()으로 가져오도록 변경
FireStore 데이터베이스 생성하기
/fbase.js
- 사용하고자 하는 기능은 import 해야 쓸 수 있다.
import "firebase/database";
Cloud Firestore의 database는 NoSQL 데이터베이스이다.
NoSQL의 특징
- Collection
- Document
Collection은 Document의 그룹이다.
유튜브라는 기능을 만든다면 비디오 콜렉션, 댓글 콜렉션 등을 가질 수 있을 것이다.
콜렉션에 원하는만큼 필드를 만들고 타입을 지정할 수 있다.
웹사이트에서도 콜렉션을 만들 수 있지만 코드 상에서도 만들 수 있으니, 만들어보자.
❗ firebase에서 사용하고자 하는 기능은 import를 해야 사용할 수 있다.
import "firebase/firestore";
CollectionReference 문서
const onSubmit = (event) => {
event.preventDefault();
dbService.collection("hweets").add({
// 어떤 데이터든 입력 가능하다.
hweet,
createAt: Date.now(),
});
setHweet("");
};
여기까지 했는데, onSubmit해도 트윗 생성이 안 됨.
1️⃣ Database location을 asia-northeast3로 생성하지 않으면 await 실행이 되지 않는 이슈가 있다. **클라우드 위치 참고 : https://firebase.google.com/docs/firestore/locations?hl=ko#location-r
→ 같은 아시아인데 실행이 안 될 수가 있나…? 싶었는데 프로젝트 삭제하고 다시 시도해보니 안 된다..
2️⃣ form 태그에 onSubmit 이벤트를 달았어야 했는데 input 태그에 이벤트를 달아서 실행이 안 됐었다.. 🥲
CollectionReference.onsnapshot
- https://firebase.google.com/docs/reference/js/v8/firebase.firestore.CollectionReference#onsnapshot
- onsnapshot은 DB의 상태를 실시간으로 알려준다. (read, delete, update 등…)
useEffect(() => {
getHweets();
dbService.collection("hweets").onSnapshot((snapshot) => {
console.log("뭔가 일어나는 중..");
});
}, []);
- 리얼타임 연동을 위해
collection("hweets").get();
으로 가져오는 소스 코드를 지우고collection("hweets").onSnapshot
으로 가져오도록 수정한다.
useEffect(() => {
dbService.collection("hweets").onSnapshot((snapshot) => {
const nweetArray = snapshot.docs.map((doc) => ({
id: doc.id,
...doc.data(),
}));
setHweets(nweetArray);
});
}, []);