๐Ÿ”ฅ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ firebase ์‚ฌ์šฉํ•˜๊ธฐ

๐Ÿช C:onยท2021๋…„ 8์›” 25์ผ
1

ํŒŒ์ด์–ด๋ฒ ์ด์Šค๋Š” ๊ตฌ๊ธ€์˜ NoSQL์ด๋‹ค.
MongoDB์™€ ํ•จ๊ป˜ ๋ฌธ์„œํ˜•์ข…๋ฅ˜์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค.

NoSQL ์ข…๋ฅ˜

  • key-value
    • ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ด์ง€๋งŒ ๋ฒ”์œ„๊ฒ€์ƒ‰์ด ํž˜๋“ฌ
  • column
    • ํ‚ค-๊ฐ’์—์„œ ํ™•์ž์™ธ์–ด ํ•œ ๊ฐœ์˜ ์ปฌ๋Ÿผ์— ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ
  • Document
    • Json, XML๊ณผ ๊ฐ™์€ ํ˜•์‹์„ ์‚ฌ์šฉ
    • Firebase, MongoDB
  • Graph
    • ์ข€ ๋” ์œ ์—ฐํ•œ ๊ทธ๋ž˜ํ”„๋ชจ๋ธ์„ ์‚ฌ์šฉ. ํ™•์žฅ์„ฑ ์šฉ์ด
    • Neo4J, ์•Œ๋ ˆ๊ทธ๋กœ๊ทธ๋ž˜ํ”„

ํŒŒ์ด์–ด๋ฒ ์ด์Šค ์‚ฌ์ดํŠธ์— ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ์ž˜ ์„ค๋ช…๋˜์–ด ์žˆ์–ด์„œ ์ฒ˜์Œ ์ ‘๊ทผํ•˜๋Š” ๋ฐ์—๋„ ๋ฌด๋ฆฌ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.


1. ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ

1-1 ํŒŒ์ด์–ด๋ฒ ์ด์Šค ์ฝ˜์†” ์ง‘์ž…

๋จผ์ € firebase console๋กœ ์ด๋™ํ•ด์„œ ๋กœ๊ทธ์ธ์„ ํ•œ๋‹ค.

1-2 ํ”„๋กœ์ ํŠธ ์ถ”๊ฐ€

์ด๋ฏธ์ง€์˜ + ํ”„๋กœ์ ํŠธ ์ถ”๊ฐ€๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

ํ”„๋กœ์ ํŠธ์ด๋ฆ„์„ ์•„๋ฌด๊ฑฐ๋‚˜ ์ž…๋ ฅ ํ›„ ๊ณ„์†์„ ๋ˆ„๋ฅธ๋‹ค.

๋‚˜๋Š” ์• ๋„๋ฆฌํ‹ฑ์Šค๋Š” ๋„๋Š”๊ฒŒ ๋” ํŽธํ•ด์„œ ๊ป๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ๋ฅผ ๋ˆ„๋ฅธ๋‹ค.

์ด๋ ‡๊ฒŒ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์ด ๋๋‚˜๊ณ  ๊ณ„์†์„ ๋ˆ„๋ฅด๋ฉด anything ํ”„๋กœ์ ํŠธ๋กœ ์ž๋™ ์ด๋™๋œ๋‹ค.

2. RealTime Database

์™ผ์ชฝ ์œ„ ๋ฉ”๋‰ด๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์™ผ์ชฝ์—์„œ ๋„ค๋น„๋ฐ”๊ฐ€ ๋‚˜์˜จ๋‹ค.

์—ฌ๊ธฐ์„œ Realtime Database์— ๋“ค์–ด๊ฐ€์„œ DB๋ฅผ ์ƒ์„ฑํ•ด์ค„ ๊ฒƒ์ด๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋งŒ๋“ค๊ธฐ๋ฅผ ๋ˆ„๋ฅธ๋‹ค.

์–ด๋Š๋‚˜๋ผ๋“  ์ƒ๊ด€์—†์œผ๋‹ˆ ์•„๋ฌด๊ฑฐ๋‚˜ ๊ณ ๋ฅด๊ณ  ๋‹ค์Œ.

์ž ๊ธˆ๋ชจ๋“œ๋กœ ์‹œ์ž‘ํ•˜๋ฉด ๊ทœ์น™์—์„œ ์ง€์ •ํ•œ๋Œ€๋กœ๋งŒ ์ฝ๊ธฐ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์ƒ๊ธฐ๋ฏ€๋กœ ์ผ๋‹จ์€ ํ…Œ์ŠคํŠธ๋ชจ๋“œ์—์„œ ์‹œ์ž‘ํ•œ๋‹ค. ํ…Œ์ŠคํŠธ๋ชจ๋“œ๋กœ ์‹œ์ž‘ํ•˜๋ฉด 30์ผ๋™์•ˆ์€ ๋ˆ„๊ตฌ๋“ ์ง€ DB๋ฅผ ์ฝ๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž๋™์œผ๋กœ ๊ทœ์น™์„ ์„ค์ •ํ•ด์ค€๋‹ค.

์ด๋ ‡๊ฒŒ ๋‚˜์˜ค๋ฉด firebase realtime database๊ฐ€ ์™„์„ฑ

3. javascript์—์„œ firebase ์—ฐ๋™

3-1. ์•ฑ ์ƒ์„ฑํ•ด์„œ sdk ๋ฐ›๊ธฐ

ํ”„๋กœ์ ํŠธ ์„ค์ •์œผ๋กœ ์ด๋™ํ•˜๊ณ  ๋ฐ‘์œผ๋กœ ๋‚ด๋ ค๋ณธ๋‹ค.

๋‚ด ์•ฑ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด ๋‚˜์˜ค๋Š”๋ฐ ์—ฌ๊ธฐ์„œ ์„ธ๋ฒˆ์งธ </> ๋ชจ์–‘์˜ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ๋‹ค.

์—ญ์‹œ๋‚˜ ์•ฑ์ด๋ฆ„์€ ์•„๋ฌด๊ฑฐ๋‚˜ ์ž…๋ ฅํ•˜๊ณ  ์ƒ์„ฑ์„ ๋ˆŒ๋Ÿฌ์ฃผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด sdk๊ฐ€ ๋ฐœ๊ธ‰๋œ๋‹ค.

์ด ์ฝ”๋“œ๋Š” ์ผ๋‹จ ๋ฉ”๋ชจ์žฅ์— ๋ณต์‚ฌํ•ด๋‘์ž.

3-2. javascript์— ์ฝ”๋“œ ๋„ฃ๊ธฐ

๋‚ด ์ฝ”๋“œ๋ฅผ ํ•œ๋ฒˆ ๋ณด์ž. html์š”์†Œ๋‚˜ css๋Š” ์ „ํ˜€์—†๊ณ  js๋กœ firebase๋งŒ ์—ฐ๋™ํ•ด์„œ ๋ฐ์ดํ„ฐ ํ•˜๋‚˜๋ฅผ ์—…๋กœ๋“œํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

<!-- 
    ๋‚ด๊ฐ€ ์“ฐ๊ณ  ์‹ถ์€ html ์ž‘์„ฑ
    ~~~
    ~~~
    ~~~ 
-->

    <script src="https://www.gstatic.com/firebasejs/8.8.1/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.8.1/firebase-database.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.8.1/firebase-analytics.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.8.1/firebase-auth.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.8.1/firebase-firestore.js"></script>

    <script>
        var firebaseConfig = {
              apiKey: "AIzaSyAIIZGCkttphgrE8yctlzZVTC5PSNAYlNw",
              authDomain: "anything-62931.firebaseapp.com",
              databaseURL: "https://anything-62931-default-rtdb.firebaseio.com",
              projectId: "anything-62931",
              storageBucket: "anything-62931.appspot.com",
              messagingSenderId: "617249461085",
              appId: "1:617249461085:web:db5612fe54b87eb42eceb4"
            };
       

        firebase.initializeApp(firebaseConfig);

        var database = firebase.database();
        
        function writeUserData(value) {
            firebase.database().ref('users/').set(value);
        }
        writeUserData("Hello~~")
    </script>

</body>
</html>

<script src="https://www.gstatic.com/firebasejs/8.8.1/firebase-analytics.js"></script> ์ด๋ ‡๊ฒŒ ์ƒ๊ธด ๋ถ€๋ถ„๋“ค์€ firebase CDN์ด๋ผ์„œ ์ด๊ฑธ ๋„ฃ์–ด์ค˜์•ผ๋งŒ firebase๋ฅผ javascript์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

CDN ๋ณต์‚ฌ๊ฐ€ ๋๋‚˜๋ฉด var firebaseConfig ์ด ๋ถ€๋ถ„์— ์•„๊นŒ ๋ณต์‚ฌํ•ด๋‘” SDK์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

firebase.initializeApp(firebaseConfig); ์ด ์ฝ”๋“œ๋Š” ์ •ํ™•ํ•œ ์˜๋ฏธ๋Š” ๋ชจ๋ฅด์ง€๋งŒ firebase๋กœ ์ฝ”๋“œ๋ฅผ ์งœ๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ ์„ ์–ธํ•ด์ค˜์•ผ ํ•œ๋‹ค.

function writeUserData(value) {
            firebase.database().ref('users/').set(value);
        }

๋งˆ์ง€๋ง‰์œผ๋กœ ์ด ํ•จ์ˆ˜๋Š” ๋‚ด๊ฐ€ ๋งŒ๋“  ํ”„๋กœ์ ํŠธ์— user๋ผ๋Š” ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•ด์™€์„œ ๊ทธ๊ณณ์— value๋ฅผ ์ง‘์–ด๋„ฃ๊ฒ ๋‹ค๋ผ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

๋”ฐ๋ผ์„œ writeUserData("Hello~~")์ด ์ฝ”๋“œ๊ฐ€ ๋™์ž‘๋˜๋ฉด ์•„๊นŒ ๋งŒ๋“  firebase realtime database์— user๋ผ๋Š” ๋ฌธ์„œ๊ฐ€ ์ƒ๊ธฐ๊ณ  hello~~ ๋ผ๋Š” ๊ฐ’์ด ๋“ค์–ด๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

์ด์™ธ์— ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜, ์“ฐ๊ฑฐ๋‚˜, ์ด๋ฒคํŠธ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ๋งŒ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ• ๋“ฑ์€ ์—ฌ๊ธฐ์„œ ์ฐธ๊ณ ํ•˜๋ฉด ๋œ๋‹ค.


ํŒ์œผ๋กœ ์ € ์‚ฌ์ดํŠธ ์˜ˆ์ œ๋Š” ์ •๋ง๋กœ ์ž๊ธฐ๋“ค์ด ๋งŒ๋“ค์–ด๋†“์€ ์–ด๋–ค ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ๋ฅผ ๋ณต๋ถ™ํ•ด์˜จ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค. ์‹ค์ œ๋กœ๋Š” ์—†๋Š” ์ฆ‰, ์ž๊ธฐ๋“ค์ด ๋งŒ๋“ค์–ด๋†“์€ ํ•จ์ˆ˜๊นŒ์ง€ ๋ณต์‚ฌํ•ด์˜จ ์ฝ”๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์‹œํ•ด์•ผ ํ•  ๋ถ€๋ถ„์„ ์ž˜ ์˜ˆ์ธกํ•ด์•ผ์ง€๋งŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๋ถ€๋ถ„๋•Œ๋ฌธ์— ์˜ˆ์‹œ๋ฅผ ๋ฐ”๋กœ ์ ์šฉํ•ด๋ณด์ง€ ๋ชปํ•ด์„œ ํŒ€์›์ด ์• ๋ฅผ ์ข€ ๋จน์—ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์œ„ ๋งํฌ์˜ ์˜ˆ์‹œ์— ๋‚˜์˜ค๋Š” realtiem DB ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

var starCountRef = firebase.database().ref('posts/' + postId + '/starCount');
starCountRef.on('value', (snapshot) => {
  const data = snapshot.val();
  updateStarCount(postElement, data);
});

๊ทผ๋ฐ ์‹ค์ œ๋กœ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด postID๋Š” ๋‚ด๊ฐ€ ์„ ์–ธํ•œ ์ ๋„ ์—†๊ณ  updateStarCount(postElement, data); ์ด๊ฒƒ๋„ ์„ ์–ธํ•œ ์ ์ด ์—†๋‹ค.

์˜ˆ์‹œ๋ฅผ ์ด๋Ÿฐ ์‹์œผ๋กœ ์ ์–ด๋…ผ๊ฑด ๋„ˆ๋ฌด ์„ฑ์˜์—†์–ด์„œ ์ด ๋ถ€๋ถ„์—์„  ๋งŽ์ด ์‹ค๋ง์Šค๋Ÿฌ์› ๋‹ค.

var eventListner = firebase.database().ref('posts/');
eventListner.on('value', (snapshot) => {
  const data = snapshot.val();
  console.log(data)
});

startCountRef๋ผ๋Š” ์ด๋ฆ„๋„ ์ž๊ธฐ๋“ค์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ์ ์ ˆํ•œ name์„ ๋„ฃ์€ ๊ฑฐ ๊ฐ™์€๋ฐ, ์˜ˆ์ œ๋กœ ๋ณด์—ฌ์ค„ ๊ฑฐ๋ฉด ์ฐจ๋ผ๋ฆฌ eventListner๋ผ๊ณ  ์“ฐ๋Š”๊ฒŒ ๋” ์ ์ ˆํ•œ ์ด๋ฆ„์ธ ๊ฑฐ ๊ฐ™์•„์„œ ์ด๊ฒƒ๋„ ๋ฐ”๊ฟจ๋‹ค.

firebase์˜ post๋ผ๋Š” ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด์— onํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ value์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ๋ฅผ ์บ์น˜ํ•˜๋ผ๋Š” ์˜๋ฏธ์—์„œ 'value'๋ฅผ ์ธ์ž๋กœ ์คฌ๊ณ , ๋ณ€ํ™”๋Š” snapshot์œผ๋กœ ์บ์น˜๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€ํ™”์˜ ๊ฐ’์€ snapshot.val()๋กœ ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2022๋…„ 3์›” 5์ผ

์ข‹์€ ๊ธ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ