๐ŸŒŸ ๊ธ€ ์ž‘์„ฑํ•˜๋Š” ํผ ๋งŒ๋“ค๊ธฐ & Firebase Cloud Firestore DB ์„ค์ •

summereuna๐Ÿฅยท2022๋…„ 3์›” 31์ผ

๐ŸŒŸ Twinkle (React, Firebase)

๋ชฉ๋ก ๋ณด๊ธฐ
11/42

1. ํŠธ์œ— ๋‚ ๋ฆฌ๋Š” form ๋งŒ๋“ค๊ธฐ


  1. ํŠธ์œ—์„ ์ž‘์„ฑํ•˜๋Š” form์„ ๋งŒ๋“ค์–ด ๋ณด์ž.
    ํŠธ์œ„ํ„ฐ์—์„œ ํŠธ์œ—์„ ์ž‘์„ฑํ•˜๋Š” form์€ ์ด๋ ‡๊ฒŒ ์ƒ๊ฒผ๋‹ค.

  2. ๋กœ๊ทธ์ธ ํ›„ ํ™ˆํ™”๋ฉด์—์„œ ์œ„์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋ Œ๋”๋˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด routes/Home.js์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

  3. useState()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ input์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” value๊ฐ’์„ ๋ฐ›์•„์˜ค์ž.

  • ์ด๋•Œ onChange ์ด๋ฒคํŠธ๋ฅผ ๋ฆฌ์Šจํ•˜๋Š” onChange ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ value๊ฐ’(ํŠธ์œ— ๋‚ด์šฉ)์ด setTweet(value)๋กœ ์—…๋ฐ์ดํŠธ๋œ๋‹ค.

    • "๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋‚˜์š”?" input์˜ value ๊ฐ’์„ state์˜ ๊ฐ’๊ณผ ๋™์ผํ•˜๊ฒŒ {tweet}๋กœ ์„ค์ •ํ•˜์—ฌ onChage์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ํ†ตํ•ด ์—…๋ฐ์ดํŠธ๋œ ์ตœ์‹  state๊ฐ’์„ ๋ฐ›์•„์˜ค๊ฒŒ ํ•œ๋‹ค.
  • form์˜ onSubmit ์ด๋ฒคํŠธ๋ฅผ ๋ฆฌ์Šจํ•˜๋Š” onSubmit ํ•จ์ˆ˜์— event.preventDefault();๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ํŠธ์œ— ๋‚ด์šฉ์„ ์ž…๋ ฅ ํ›„ ํŠธ์œ™ํดํ•˜๊ธฐ๋ฅผ ํด๋ฆญํ•˜์—ฌ submit ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ํŽ˜์ด์ง€๊ฐ€ ์ƒˆ๋กœ๊ณ ์นจ๋˜์ง€ ์•Š๊ฒŒํ•œ๋‹ค.

๐Ÿ“ routes/Home.js

import React, { useState } from "react";

const Home = () => {
  const [tweet, setTweet] = useState("");
  const onSubmit = (event) => {
    event.preventDefault();
  };
  const onChange = (event) => {
    const {
      target: { value },
    } = event;
    setTweet(value);
    //console.log(tweet);
  };
  return (
    <div>
      <form onSubmit={onSubmit}>
        <input
          type="text"
          placeholder="๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋‚˜์š”?"
          maxLength={120}
          value={tweet}
          onChange={onChange}
        />
        <input type="submit" value="ํŠธ์œ™ํดํ•˜๊ธฐ" />
      </form>
    </div>
  );
};

export default Home;

2. Cloud Firestore ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งŒ๋“ค๊ธฐ


  1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•œ๋‹ค.

  2. Cloud Firestore์˜ ๋ณด์•ˆ ๊ทœ์น™์€ ํ…Œ์ŠคํŠธ ๋ชจ๋“œ์—์„œ ์‹œ์ž‘์„ ์„ ํƒํ•œ๋‹ค.

  3. Cloud Firesotre ์œ„์น˜๋ฅผ ์„ค์ •ํ•œ๋‹ค. ์ œ์ผ ๊ฐ€๊นŒ์šด ๊ณณ์„ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.

  • asia-northeast1: ๋„์ฟ„
  • asia-northeast2: ์˜ค์‚ฌ์นด
  • asia-northeast3: ์„œ์šธ
    • ์ฐธ๊ณ ๋กœ ํŒŒ์ด์–ด๋ฒ ์ด์Šค๋ฅผ ์œ ๋ฃŒ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ asia-northeast ์ค‘ asia-northeast3(์„œ์šธ)์˜ ์š”๊ธˆ์ด ์ œ์ผ ๋น„์‹ธ๋‹ค๊ณ ํ•œ๋‹ค.
  1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ ์ค€๋น„ ์™„๋ฃŒ!

3. firebase์—์„œ Database ๊ฐ€์ ธ์˜ค๊ธฐ


์ด์ œ Firebase์˜ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ์— ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค.
fbase.js์— ํŒŒ์ด์–ด๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ importํ•˜์ž.

๐Ÿ“ fbase.js

//ํŒŒ์ด์–ด๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ฐ€์ ธ์˜ค๊ธฐ
import "firebase/database";
profile
Always have hope๐Ÿ€ & constant passion๐Ÿ”ฅ

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