๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Couch Coding

Couch Coding ( ์นด์šฐ์น˜ ์ฝ”๋”ฉ ) - json-server ๋ฅผ ์ด์šฉํ•œ Mock ๋ฐ์ดํ„ฐ ์ƒ์„ฑ

๊ธฐํš ๋‹จ๊ณ„๊ฐ€ ์ง€๋‚˜๊ฐ€๊ณ  ์‹ค์ œ๋กœ ํŒ€ ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹œ์ž‘์ด ๋˜์—ˆ๋‹ค. 

 

๋ฐฑ์—”๋“œ์™€ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์˜ ์†๋„ ์ฐจ์ด๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฑ์—”๋“œ API ๊ฐ€ ์™„์„ฑ ๋  ๋•Œ ๊นŒ์ง€ ํ”„๋ก ํŠธ์—”๋“œ๋Š” ๋ฌด์—‡์„ ํ•ด์•ผํ• ๊นŒ ?

๋ฐ”๋กœ ๋ฐฑ์—”๋“œํŒ€์—์„œ API ๊ฐœ๋ฐœ ์™„๋ฃŒ๋ ๋•Œ๊นŒ์ง€ json - server๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ€์ƒ์˜ ๋ฐ์ดํ„ฐ, api ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‹ค์ œ API๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ 

์ปดํฌ๋„ŒํŠธ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋‹ค๊ฐ€ ์ถ”ํ›„ ์‹ค์ œ API๋ฅผ ์—ฐ๋™ํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.

 

์„ค์น˜ ๋ฐฉ๋ฒ• 

 

npm install -g json-server

 

์„ค์น˜๊ฐ€ ์™„๋ฃŒ ๋˜์—ˆ๋‹ค๋ฉด 

 

 

 

 

์œ„์™€ ๊ฐ™์ด ํ”„๋กœ์ ํŠธ ํด๋” ๋‚ด๋ถ€ ์ตœ์ƒ์œ„์— json-server๋ผ๋Š” ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ ์•ˆ์— db.json์ด๋ผ๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ค์ž. 

 

 

 

์ด์ œ ์‹ค์ œ ๊ฐœ๋ฐœ ๋  API ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ db.json ํŒŒ์ผ์•ˆ์— mock ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋˜๊ฒ ๋‹ค. 

์•„๋ž˜๋Š” ์‹ค์ œ ๊ฐœ๋ฐœ์— ์‚ฌ์šฉ ๋œ ๋ฐ์ดํ„ฐ์ด๋ฉฐ response๊ฐ€ ์ƒ๋‹นํžˆ ๊ธธ์–ด์„œ ์ ˆ๋ฐ˜์€ ์ž˜๋ž๋‹ค ...ใ…Ž 

 

"camp": 
    {
      "addr1": "๊ฒฝ์ƒ๋‚จ๋„ ์ฐฝ์›์‹œ ์˜์ฐฝ๊ตฌ ๋ถ๋ฉด ๋‹ฌ์ฒœ๊ธธ 150 ",
      "animalCmgCl": "๊ฐ€๋Šฅ(์†Œํ˜•๊ฒฌ)",
      "autoSiteCo": 31,
      "caravSiteCo": 4,
      "glampSiteCo": 4,
      "doNm": "๊ฒฝ์ƒ๋‚จ๋„",
      "eqpmnLendCl": "ํ…ํŠธ,ํ™”๋กœ๋Œ€,๋‚œ๋ฐฉ๊ธฐ๊ตฌ,์‹๊ธฐ,์นจ๋‚ญ",
      "extshrCo": 50,
      "facltNm": "๋‹ฌ์ฒœ๊ณต์›์˜คํ† ์บ ํ•‘์žฅ ",
      "featureNm": "์ฒœ์ฃผ์‚ฐ์˜ ๊ณ„๊ณก์ด ์ข‹๊ณ  ๋„์‹ฌ๊ณผ ๊ฐ€๊นŒ์›€",
      "fireSensorCo": 0,
      "firstImageUrl": "https://gocamping.or.kr/upload/camp/704/thumb/thumb_720_6835LN3Y4PG4YQDWJo1y7Vvr.jpg",
      "homepage": "http://camp.changwon.go.kr/",
      "induty": "์ผ๋ฐ˜์•ผ์˜์žฅ,์ž๋™์ฐจ์•ผ์˜์žฅ,์นด๋ผ๋ฐ˜",
      "indvdlCaravSiteCo": 0,
      "intro": "๋‹ฌ์ฒœ๊ณต์› ์˜คํ† ์บ ํ•‘์žฅ์€ ์ฐฝ์›์‹œ ๋ถ๋ฉด ์ฒœ์ฃผ์‚ฐ ๋‹ฌ์ฒœ๊ณ„๊ณก์— ์œ„์น˜ํ•˜๊ณ  ์žˆ๋‹ค.",
      "lctCl": "์‚ฐ,์ˆฒ,๊ณ„๊ณก,๋„์‹ฌ",
      "lineIntro": "์‚ฌ๊ณ„์ ˆ ์„œ๋กœ ๋‹ค๋ฅธ ๋งค๋ ฅ์˜ ์บ ํ•‘์„ ์ฆ๊ธธ ์ˆ˜ ์žˆ๋Š” ๊ณณ",
		
        ....
    },

 

์œ„ ์ฒ˜๋Ÿผ db.json ์•ˆ์— ์‚ฌ์šฉํ•ด์•ผํ•  ๊ฐ€์ƒ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋‹ค๋ฉด 

 

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด json-server๋ฅผ ์‹คํ–‰์‹œ์ผœ๋ณด์ž !

 

npx json-server --watch json-server/db.json --port 3001

 

3000 ํฌํŠธ๋Š” ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธํฌํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ 3001 ์œผ๋กœ ํ•ด์ค€๋‹ค !

( ๊ผญ 3001์ด ์•„๋‹ˆ๋”๋ผ๋„ ๊ดœ์ฐฎ๋‹ค )

 

์•„๋ž˜์™€ ๊ฐ™์ด axios๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ json-server๋กœ ์ƒ์„ฑ๋œ mock ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€๋ณด๋„๋ก ํ•˜์ž 

 

import axios from 'axios';

export async function getCamp() {
  try {
    const response = await axios('http://localhost:3001/camp');
    const data = response.data;
    return data;
  } catch (error) {
    throw new Error('Failed to load data');
  }
}

 

 


 

json-server ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐฑ์—”๋“œ API๊ฐ€ ๊ฐœ๋ฐœ๋˜๊ธฐ ์ „์— ๋ฏธ๋ฆฌ ๊ฐ€์ƒ API๋ฅผ ํ†ตํ•ด data๋ฅผ ๋ฐ›์•„ ํ”„๋กœํ† ํƒ€์ž…์„ ๋งŒ๋“ค๊ฑฐ๋‚˜

๊ณต๋ถ€๋ฅผ ์œ„ํ•˜์—ฌ ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ• ๋•Œ์— ์‚ฌ์šฉํ•˜๋ฉด ์•„์ฃผ ์ ๋‹นํ•  ๊ฒƒ ๊ฐ™๋‹ค ๐Ÿ‘๐Ÿ‘