header-img
Info :
728x90

์™„์„ฑ๋ณธ ์‚ฌ์ง„...
๋ ›์ธ ๊ณ 

JSON-SERVER ?

๋น„๊ต์  ๊ฐ„ํŽธํ•˜๊ฒŒ ์•„์ฃผ ์งง์€ ์‹œ๊ฐ„์„ ๋“ค์—ฌ REST API๋ฅผ ๊ตฌ์ถ•ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
์ฃผ๋กœ ํ”„๋กœํ† ํƒ€์ž…์„ ๋งŒ๋“ค๊ฑฐ๋‚˜, ๊ณต๋ถ€ํ•˜๊ณ  ์‹ค์Šตํ•  ๋•Œ.. ์ด์šฉํ•˜๋Š” ์„œ๋ฒ„๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์•„์ฃผ ๊ตฟ์ธ ๋„๊ตฌ !

REST API ์„œ๋ฒ„์˜ ์™ ๋งŒํ•œ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์„ ๋Œ€๋ถ€๋ถ„ ๊ฐ–์ถ”๊ณ  ์žˆ๋Š”๋ฐ ํ”„๋กœ๋•์…˜์šฉ์œผ๋กœ๋Š” ๋ถ€์ ํ•ฉํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.

๋‚˜๋Š” ๊ณต๋ถ€ํ•˜๊ธฐ ์œ„ํ•œ ์šฉ์ด๋‹ˆ๊นŒ ์•„๋ฌดํŠผ ๋ ›์ธ ๊ณ  ~!

๐Ÿ”Œ JSON SERVER Setup

๋‚˜๋Š” npm์„ ์‚ฌ์šฉํ•ด์„œ json-server๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค.
์„œ๋ฒ„๋ฅผ ๋ถ™์ด๊ณ  ์‹ถ์€ react ํŒŒ์ผ์ด ์žˆ๋Š” ํด๋” ์ตœ์ƒ๋‹จ์—์„œ ํ„ฐ๋ฏธ๋„์„ ์—ด์–ด์„œ

// ์„œ๋ฒ„ ํด๋”๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๋‚˜๋Š” ์„ฑ์žฅ์šฉ์ด๋ผ ์ด๋ฆ„์„ ์ด๋ ‡๊ฒŒ ์ง€์—ˆ๋‹ค.
$ mkdir server-grow
// ๋งŒ๋“  ์„œ๋ฒ„ ํด๋”๋กœ ์ด๋™
$ cd ./server-grow
// json-server ์„ค์น˜ 
$ npm init -y
$ npm install json-server --save-dev

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ธฐ๋ณธ ์„ค์ • ๋์ด๊ณ ..
์ด์ œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘์–ด๋„ฃ๊ธฐ ์œ„ํ•œ db.json ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

{
    "ssukssuk": [
      {
        "id": 1,
        "content": "์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ™‹‍โ™€๏ธ"
      },
      {
        "id": 2,
        "content": "์ข‹์€ ์•„์นจ์ž…๋‹ˆ๋‹ค ~"
      },
      {
        "id": 3,
        "content": "๋‚ ์”จ๊ฐ€ ๋„ˆ๋ฌด ์ข‹์•„์š” ๐ŸŒž"
      },
      {
        "id": 4,
        "content": "๋”ฑ ํ‡ด๊ทผํ•˜๊ณ  ์‹ถ์€ ๋‚ ์”จ !"
      },
      {
        "id": 5,
        "content": "๐Ÿต๐Ÿต"
      }
    ]
  }

์‘ฅ์‘ฅ ์ž๋ผ๊ณ  ์‹ถ์€ ๋งˆ์Œ์„ ๋‹ด์€ ๊ทธ๋ฃน ์ด๋ฆ„์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค...

์ด์ œ json-server๋ฅผ ์‹คํ–‰ํ•ด๋ณด์ž.

json-server๊ฐ€ db.json ํŒŒ์ผ์„ ๋ฐ”๋ผ๋ณด๋„๋ก ํ•ด์ฃผ์ž.

$ json-server --watch db.json

๊ธฐ๋ณธ ํฌํŠธ๋Š” ๋‹น์—ฐ 3000๋ฒˆ์ด๊ณ , ํฌํŠธ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด --port ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋„๋ก ํ•˜์ž. ๋‚œ ์ƒ๊ด€์—†์–ด์„œ ๊ทธ๋ƒฅ ์ผ๋‹ค..

๋งŒ์•ฝ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์œผ๋ฉด...

$ json-server --watch db.json --port (ํ•˜๊ณ  ์‹ถ์€ ํฌํŠธ ๋ฒˆํ˜ธ)

๋„ˆ๋ฌด ์นœ์ ˆํ•˜๋„ค...

๊ทธ๋ฆฌ๊ณ  ๋˜ ๋งค๋ฒˆ json-server --watch db.json ์„ ์จ์„œ ์—ด๊ธฐ๋Š” ๊ท€์ฐฎ์œผ๋‹ˆ๊นŒ..

package.json ์„ ์—ด์–ด์„œ ์Šคํฌ๋ฆฝํŠธ์— start ๋ถ€๋ถ„์„ ๋งŒ๋“ค์–ด์ฃผ๋„๋ก ํ•˜์ž. ํ•„์ˆ˜๋Š” ์•„๋‹˜.

{
  "name": "server-grow",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "json-server --watch db.json",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "json-server": "^0.17.1"
  },
  "dependencies": {
    "lowdb": "^5.0.5"
  }
}

์ด๋ ‡๊ฒŒ ์„ธํŒ…ํ•ด๋‘๋ฉด.. ๋‚˜์ค‘์— ๋‹ค์‹œ ํ‚ฌ ๋•Œ

$ npm start

๋งŒ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. JSON ๊ธฐ๋ณธ ์…‹ํŒ… ๋.

JSON-SERVER ํ…Œ์ŠคํŠธ

POSTMAN ์„ ์ด์šฉํ•˜๋ฉด ์ž˜ ๋งŒ๋“ค์–ด์กŒ๋Š”์ง€ POST/INSERT/DELETE ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ฐ€์ž…ํ•˜๊ณ  ์ฒœ์ฒœํžˆํ•ด๋ณด๋ฉด ๊ฐ€์ด๋“œ ์—†์ด๋„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์„๋งŒํผ ๊ฐ„๋‹จํ•˜๋‹ค.

๋ฐ์ดํ„ฐ ์ž˜ ๊ฐ€์ ธ์˜ค๋‹ˆ๊นŒ ๋ฌธ์ œ ์—†๋Š”๊ฑฐ ํ™•์ธํ•ด์ฃผ๊ณ  !
์ด์ œ ๋ณธ๋ก ์ด๋‹ค. REACT ์™€ ์—ฐ๊ฒฐํ•˜์ž.

JSON-SERVER ๐Ÿค REACT

๋‘๊ฐ€์ง€๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‹ค.

  1. USEFETCH ํ›…
  2. ๋ณด์—ฌ์ค„ ํ™”๋ฉด (APP.JS ์— ๋ƒ…๋‹ค ๋•Œ๋ ค๋„ฃ์–ด๋„ ๋ฌด๊ด€ํ•จ)

1. USEFETCH

์–ด๋–ค DB๋ฅผ ์กฐํšŒํ•˜๋˜ ์ด๊ฑฐ๋Š” ๋ฏธ๋ฆฌ ๋”ฐ๋กœ ๋นผ๋‘๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„ ์ด์ „ ํ”„๋กœ์ ํŠธ์—์„œ ํ–ˆ๋˜ ๊ฑฐ ๊ธ์–ด์™”๋‹ค ^--^

์„œ๋ฒ„ ์ชฝ ๋ง๊ณ  ํ™”๋ฉด ๊ตฌํ˜„ ์ชฝ ํด๋”์— component ์•„๋ž˜์— ๋Œ€์ถฉ ๋„ฃ์–ด์ฃผ์ž.
๊ทธ๋ž˜๋„ ๋‚˜๋Š” hooks ํด๋”๋ฅผ ๋งŒ๋“ค์–ด์„œ usefetch.js ๋ฅผ ์ƒ์„ฑํ•ด์คฌ๋‹ค.

// usefetch.js

import { useState, useEffect } from "react";

export default function useFetch(url) {
  const [result, setResult] = useState(() => []);

  useEffect(() => {
    fetch(url)
      .then((res) => {
        return res.json();
      })
      .then((data) => {
        setResult(data);
      })
      .catch((err) => {
        console.error(`useFetch(${url}) error : `, err);
      });
  }, [url]);

  return result;
}

๋Œ€์ถฉ url ๋„˜๊ฒจ๋ฐ›์œผ๋ฉด ๋ฐ์ดํ„ฐ ์ €์žฅํ•ด๋’€๋‹ค๊ฐ€
๋ฐ์ดํ„ฐ๋งŒ ๋„˜๊ฒจ๋ฐ›๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๊ณ ..
๋‚˜์ค‘์— ๋ณ€์ˆ˜์— ๋ฐ”๋กœ ๋„ฃ์–ด์„œ ๊บผ๋‚ด์“ฐ๋ฉด ๋œ๋‹ค ์™„์ „ ์ข‹์•„ ~

๋ณด์—ฌ์ค„ ํ™”๋ฉด

๋‚˜๋Š” ํƒญ ํ˜•์‹์œผ๋กœ ๊บผ๋‚ด์–ด์„œ ์จ์„œ Grow1.js ๋ผ๋Š” ๊ณณ์—์„œ ์ž‘์—…์„ ํ–ˆ๋‹ค.
๊ทธ๋ƒฅ ๋‹จ์ง€ ํ…Œ์ŠคํŠธ์šฉ์ด๋ผ๋ฉด App.js ์— ๋•Œ๋ ค๋„ฃ์–ด๋„ ์ง„์งœ ๋ฌด๊ด€ํ•˜๋‹ค.

// Grow1.js

import {useState, useEffect} from 'react'
import useFetch from '../hooks/useFetch';

function Grow1() {

    const TestData = useFetch('http://localhost:3000/ssukssuk');
    if(TestData !== undefined && TestData !== null && TestData.length)
    {
        console.log(TestData);
    }

  return (
    <div>
        {TestData !== undefined && TestData !== null && TestData.length > 0 &&
              TestData.map((item) => (
                  <div>{item.content}</div>
        ))}
    </div>
  )
}

export default Grow1

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‚ด๊ฐ€ ์ €์žฅํ•ด๋‘” ๋ฐ์ดํ„ฐ ์ „์ฒด์˜ content๋ฅผ ํ•œ์ค„์”ฉ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ƒฅ ๋ฐ์ดํ„ฐ ์ž์ฒด๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒ๊ธด์ง€ ๊ถ๊ธˆํ•˜๋‹ค๋ฉด..

์—ฌ๊ธฐ์„œ

console.log(TestData);

๋ฅผ ํ•ด๋ณด์‹œ๋˜์ง€..

์•„๋‹ˆ๋ฉด usefetch hook ์ชฝ์œผ๋กœ ๊ฐ€์„œ then(data) ๋ถ€๋ถ„ ๊ด„ํ˜ธ ์•ˆ์—

console.log(data);

๋•Œ๋ ค๋ณด์‹œ๊ธธ...

์™„์„ฑ

 
728x90
๋”๋ณด๊ธฐ
FRONTEND/React