๐ฌ ๋ค์ด๊ฐ๋ฉฐ
firebase๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ์งํ์ค์ ๊ฒ์๊ธ์ ์ค์๊ฐ์ผ๋ก ๋ถ๋ฌ์์ผํ๋ ๋ฌธ์ ์ ์ด ์๊ฒผ๋ค.
์ด๋ด๋ onSnapshot์ ์ฌ์ฉํ์ฌ ์ค์๊ฐ์ผ๋ก DB์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
์ด onSanpshot์ firestore๋ฅผ ์ด์ฉํ๋๋ฐ ..
FireStore๋?
Firestore๋ ๊ตฌ๊ธ(firebase)์์ ์ง์ํ๋ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋น์ค๋ก, ์ค์๊ฐ ๋ฆฌ์ค๋๋ฅผ ํตํด ์ฌ์ฉ์์ ๊ธฐ๊ธฐ๊ฐ ๋ฐ์ดํฐ์ ์ค์๊ฐ ๋๊ธฐํ๊ฐ ๊ฐ๋ฅํ๋ค.
๋ํ, Cloud Firestore๋ ์ฑ์์ ๋ง์ด ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฅผ ์บ์ํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๊ธฐ๊ฐ ์คํ๋ผ์ธ ์ํ๊ฐ ๋๋๋ผ๋ ์ฑ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณ ์ฝ๊ณ ์์ ๋๊ธฐํ๊ณ ์ฟผ๋ฆฌํ ์ ์๋ค.
firebase๋ฅผ ์ด์ฉํด๋ณธ ์ฌ๋์ด๋ฉด ๋๊ตฌ๋ ์๋ ๋ถ๋ถ์ผ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์์ firestore Database์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ฉด ๋๋ค.
์ด๋ฐ์์ผ๋ก ์์ธ DB๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ถ๋ฌ์ฌ ์ ์๋๋ก ๋์์ฃผ๋ ๊ฒ์ด onSnapshot ํจ์์ด๋ค.
๐ก ์ด์ฉ๋ฐฉ๋ฒ
useEffect(() => {
onSnapshot(collection(dbService, "content"), (snapshot) => {
const contentArray = snapshot.docs.map((doc) => ({
id: doc.id,
...doc.data(),
}));
setContents(contentArray);
});
}, []);
์ฐ์ useEffect๋ฅผ ์ ์ธํ๊ณ ๊ทธ ์์ onSnapshot ํจ์๋ฅผ ๋ด๋๋ค.
์๊น ์ค๋ช ํ ๋ฏ์ด firestore๋ฅผ ์ด์ฉํ๋ ํจ์๋ก Firestore์ ์ค๋ ์ท์ ๊ตฌ๋ ํ๋ ํจ์์ด๋ค.
ํจ์์ ์ฒซ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ์ค๋ ์ท์ ๊ตฌ๋ ํ Firestore ์ปฌ๋ ์ ์ ๋ฐ๊ณ , ๋๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฐ๋๋ค.
์ฒซ๋ฒ์งธ - collection(dbService, "content")
(dbService์ content ์์ญ์ ํธ์ถํ๋ค. ์์์๋ firebase ์ด๋ฏธ์ง๋ฅผ ๋ณด๋ฉด ์ปฌ๋ ์ ์ด๋ฆ์ด content์์ ํ์ธํ ์ ์์.)
๋๋ฒ์งธ - snapshot
์ฝ๋ฐฑํจ์์์๋ ์ค๋ ์ท์์ ๊ฐ์ ธ์จ ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์ด๋ก ๋งคํํ๋ค. ๋ฌธ์์ 'id'์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ๋ณํํ๊ณ , ์ด ๋ฐฐ์ด์ React ์ปดํฌ๋ํธ ์ํ์ธ 'contents'์ ์ ๋ฐ์ดํธ ํ๋ค.
๋ฐ๋ผ์ 'setContents'ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
๐ ์ฐธ๊ณ
https://guiyomi.tistory.com/123
https://biio-studying.tistory.com/123