[React] Mock Data

Na JeongΒ·2022λ…„ 11μ›” 30일
0

react

λͺ©λ‘ 보기
9/11
post-thumbnail

πŸ““Mock Data

πŸ“™ Mock Dataλž€?

UI ꡬ성에 ν•„μš”ν•œ λ°±μ—”λ“œ APIκ°€ μ™„μ„±λ˜κΈ° 전에 ν”„λ‘ νŠΈμ—”λ“œλŠ” 데이터가 λ“€μ–΄μ˜€λŠ” 상황에 λŒ€λΉ„ν•΄ μ˜λ„ν•œλŒ€λ‘œ UIκ°€ κ΅¬ν˜„λ˜λŠ”μ§€ 확인을 ν•΄μ•Όν•œλ‹€. μ΄λ•Œ μ‚¬μš©λ˜λŠ” 데이터가 Mock Data이닀.
즉, μ‹€μ œ APIμ—μ„œ λ°›μ•„μ˜¨ 데이터가 μ•„λ‹Œ ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμžκ°€ ν•„μš”μ— μ˜ν•΄ μƒ˜ν”Œλ‘œ λ§Œλ“  데이터이닀.

πŸ“™Mock Dataλ₯Ό μ‚¬μš©ν•˜λŠ” 이유

λ°±μ—”λ“œ APIκ°€ 미완성인 μƒν™©μ—μ„œ Mock Dataλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, λŒ€λΆ€λΆ„μ€ μ‹€μ œ 데이터가 λ“€μ–΄μ˜¬ 뢀뢄듀을 ν•˜λ“œμ½”λ”©μœΌλ‘œ λŒ€μ²΄ν•˜κ³  μž‘μ—…μ„ ν•˜κ²Œ λœλ‹€. κ·Έλ ‡κ²Œ κ°œλ°œμ„ μ§„ν–‰ν•œλ‹€λ©΄ μ—¬λŸ¬ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.

μš°μ„  개발이 진행됨에 따라 μ½”λ“œκ°€ ν™•μž₯된 μƒνƒœμ΄κΈ° λ•Œλ¬Έμ—, λ°±μ—”λ“œ APIκ°€ μ™„μ„±λ˜κ³  μ‹€μ œ 데이터λ₯Ό λ°˜μ˜ν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•  λ•Œ 번거둜울 수 μžˆλ‹€.
λ˜ν•œ, μ‹€μ œ λ°μ΄ν„°μ—μ„œλŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 값을 ν† λŒ€λ‘œ UIλ₯Ό κ·Έλ Έκ±°λ‚˜, λ°˜λŒ€λ‘œ μ‹€μ œ 데이터λ₯Ό 기반으둜 μž‘μ—…ν•΄μ•Ό ν•˜λŠ” λ‚΄μš©μ΄ λˆ„λ½λ˜μ—ˆμ„ μˆ˜λ„ μžˆλ‹€.

Mock Dataλ₯Ό μ‚¬μš©ν•˜λ©΄ μœ„μ™€ 같은 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλ‹€.

  • λ°±μ—”λ“œ APIκ°€ 미완성인 μƒνƒœμ—μ„œλ„ μž‘μ—…μ— 차질 없이 κ°œλ°œν•  수 μžˆλ‹€.
  • λ°±μ—”λ“œ API의 ꡬ성을 미리 맞좰볼 수 μžˆλ‹€.
  • μ‹€μ œλ‘œ API 톡신을 진행할 λ•Œ μ›ν™œν•˜κ²Œ ν•  수 μžˆλ‹€.

πŸ“™Mock Data 생성

πŸ–ν˜•νƒœ

Mock DataλŠ” μ‹€μ œ μ„œλ²„μ—μ„œ λ³΄λ‚΄μ£ΌλŠ” λ°μ΄ν„°μ˜ ν˜•μ‹κ³Ό λ™μΌν•˜κ²Œ λ§Œλ“€μ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— json ν™•μž₯자 파일둜 JSON ν˜•μ‹μ˜ 데이터λ₯Ό μƒμ„±ν•œλ‹€.

JSONμ΄λž€ Java Script Object Notation의 μ€„μž„λ§λ‘œ, 단어 κΈ°μ€€ κ·ΈλŒ€λ‘œ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό 객체둜 ν‘œν˜„ν•œ 것이닀.
key : value 의 객체 ν˜•νƒœμ΄κ³ , λ°±μ—”λ“œμ™€μ˜ 데이터 톡신을 μœ„ν•΄ μ‚¬μš©ν•˜λŠ” ν˜•μ‹μ΄λ‹€.

λ§ˆμΌ“μ»¬λ¦¬ λ°μ΄ν„°λ‘œ 예λ₯Ό λ“€λ©΄ μ΄λŸ°μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

// public/data/productData.json

{
  "id": 3,
  "image_url": "https://img-cf.kurly.com/shop/data/goods/1648203571907l0.jpg",
  "name": "[콜린슀그린] 더 μ˜€λ Œμ§€ 1000mL",
  "short_description": "λ¬Ό ν•œλ°©μšΈ 넣지 μ•Šκ³  μˆœμˆ˜ν•œ μ˜€λ Œμ§€ κ³Όμœ‘μ„ μ§œλ‚Έ 100% 착즙 μ˜€λ Œμ§€ 주슀",
  "discounted_price": 14080,
  "discount_rate": 20,
  "original_price": 17600,
  "unit_text": "1병",
  "weight": "1000ml",
  "delivery_type": [
    { "id": 0, "text": "샛별배솑" },
    { "id": 1, "text": "택배배솑" }
  ],
...
}

Mock DataλŠ” μ„œλ²„μ—μ„œ λ°›μ•„μ˜¬ λ°μ΄ν„°μ˜ λͺ¨μ‘° 데이터인 만큼 ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμžκ°€ 둜컬 μ„œλ²„μ—μ„œ Mock Dataλ₯Ό λ°›μ•„μ˜€λ„λ‘ κ΅¬ν˜„ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— .json 파일둜 생성해야 ν•œλ‹€.

πŸ–μœ„μΉ˜

Mock DataλŠ” 둜컬 μ„œλ²„μ—μ„œ λ°›μ•„μ˜€λ„λ‘ κ΅¬ν˜„ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— 파일의 μœ„μΉ˜λŠ” npm startμ‹œ 둜컬 μ„œλ²„μ— μ˜¬λΌκ°€λŠ” 폴더인 public 폴더 ν•˜μœ„μ—μ„œ 관리해야 ν•œλ‹€. public 폴더 ν•˜μœ„μ— data 폴더 생성 ν›„ ν•΄λ‹Ή ν΄λ”μ—μ„œ Mock Dataλ₯Ό κ΄€λ¦¬ν•œλ‹€.

πŸ“™Mock Data μ‚¬μš©

πŸ–ν˜ΈμΆœ

Mock DataλŠ” μ‹€μ œ 데이터와 λ™μΌν•˜κ²Œ fetch λ©”μ„œλ“œμ—μ„œ ν˜ΈμΆœν•œλ‹€.
fetch λ©”μ„œλ“œμ˜ 첫 번째 인자둜 http μš”μ²­μ„ 보낼 API μ£Όμ†Œλ₯Ό λ°›λŠ”λ°, 여기에 μƒμ„±ν•œ Mock Data의 μ£Όμ†Œλ₯Ό μž…λ ₯ν•œλ‹€. http://localhost:3000은 μƒλž΅ κ°€λŠ₯ν•˜λ©° μƒλž΅ μ•ˆν•˜κ³  μ‚¬μš© μ‹œ, 둜컬 μ„œλ²„κ°€ μ—¬λŸ¬κ°œ μ—΄λ €μžˆλ‹€λ©΄ μƒˆλ‘œμš΄ 둜컬 μ„œλ²„λ₯Ό μ‹€ν–‰ν•  λ•Œλ§ˆλ‹€ ν¬νŠΈλ²ˆν˜Έκ°€ λ°”λ€Œκ²Œ λ˜μ–΄ 일일이 μˆ˜μ •μ„ ν•΄μ•Όν•œλ‹€.

fetch('/data/recommendData.json', {
  method: 'GET'
})

두 번째 μΈμžλŠ” μš”μ²­μ„ 보낼 λ•Œμ˜ μ˜΅μ…˜ 객체λ₯Ό μ „λ‹¬ν•˜λŠ” 뢀뢄이닀. μœ„μ˜ μ½”λ“œμΈ 경우 μ„œλ²„λ‘œλΆ€ν„° 데이터λ₯Ό λ°›μ•„μ˜€λŠ” GET μš”μ²­μ΄κΈ° λ•Œλ¬Έμ— methodμ˜΅μ…˜μ— λͺ…μ‹œν•΄μ£Όμ—ˆλ‹€. (λŒ€λΆ€λΆ„μ˜ 경우 methodκ°€ GET일 λ•Œ μƒλž΅ κ°€λŠ₯)

fetch('/data/recommendData.json', {
  method: 'GET'
})
  .then(res => res.json())
  .then(data => {
    setProductList(data);
  });

이후 JSON ν˜•νƒœμ˜ response 데이터λ₯Ό μžλ°”μŠ€ν¬λ¦½νŠΈ 객체 ν˜•νƒœλ‘œ λ°”κΏ”μ€€ λ‹€μŒ, λ°›μ•„μ˜¨ 데이터λ₯Ό 화면에 κ·Έλ €μ£ΌκΈ° μœ„ν•΄ productList stateλ₯Ό μ—…λ°μ΄νŠΈ ν•΄μ€€λ‹€.

πŸ–ν˜ΈμΆœμ‹œμ 

fetch λ©”μ„œλ“œλ₯Ό 톡해 Mock Dataλ₯Ό λ°›μ•„μ˜€λŠ” μ‹œμ μ€ μ‹€μ œλ‘œ 데이터λ₯Ό λΆˆλŸ¬μ˜€λŠ” μ‹œμ μ΄ μ–Έμ œμΈμ§€μ— 따라 λ‹€λ₯΄λ‹€. λ²„νŠΌμ„ ν΄λ¦­ν–ˆμ„ λ•Œ 받아와야 ν•˜λŠ” κ²½μš°λ„ 있고, νŽ˜μ΄μ§€λ₯Ό 뢈러올 λ•Œ λ°”λ‘œ 화면에 κ·Έλ €μ€˜μ•Ό ν•˜λŠ” κ²½μš°λ„ μžˆγ„·.

useEffect(() => {
  fetch('/data/recommendData.json', {
    method: 'GET'
  })
    .then(res => res.json())
    .then(data => {
      setProductList(data);
    });
},[]);

μœ„μ˜ μ½”λ“œλŠ” νŽ˜μ΄μ§€λ₯Ό 뢈러올 λ•Œ λ°”λ‘œ 화면을 κ·Έλ €μ€˜μ•Όν•œλ‹€. κ·ΈλŸ¬λ―€λ‘œ useEffect hook을 톡해 μ»΄ν¬λ„ŒνŠΈκ°€ 마운트 된 ν›„ ν•œλ²ˆλ§Œ 데이터λ₯Ό λ°›μ•„μ˜€λ„λ‘ ν•œλ‹€.

fetch methodλŠ” λ°˜λ“œμ‹œ useEffect와 ν•¨κ»˜ μ‚¬μš©ν•΄μ•Όλ§Œ ν•˜λŠ” 것은 μ•„λ‹ˆλ‹€.

profile
λŠμž„μ—†μ΄ λ…Έλ ₯ν•˜λŠ” ν”„λ‘ νŠΈμ—”λ“œ 개발자 (⸝⸝⍒⸝⸝) ΰ·†

0개의 λŒ“κΈ€