3. MSW

MSW(Mock Service Worker)

  • ์„œ๋น„์Šค ์›Œ์ปค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„๋Š” API ๋ชจํ‚น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • ๋ฐฑ์—”๋“œ API์ธ์ฒ™ ํ”„๋ก ํŠธ์—”๋“œ์˜ ์š”์ฒญ์— ๊ฐ€์งœ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ตํ•ด์คŒ

  • ๋ฐฑ์—”๋“œ ๊ตฌํ˜„์ด ์™„๋ฃŒ๋˜๊ธฐ ์ด์ „์— ์ž„์‹œ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์งœ API๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜, ํ…Œ์ŠคํŠธ ์‹คํ–‰์‹œ ์‹ค์ œ ๋ฐฑ์—”๋“œ API์— ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์„ ํ•˜๋Š” ๋Œ€์‹ ์— ๊ฐ€์งœ API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

์„œ๋น„์Šค์›Œ์ปค(Service Worker)

  • ๋ธŒ๋ผ์šฐ์ €๋กœ๋ถ€ํ„ฐ ๋‚˜๊ฐ€๋Š” ์š”์ฒญ์ด๋‚˜ ๋“ค์–ด์˜ค๋Š” ์‘๋‹ต์„ ์ค‘๊ฐ„์—์„œ ๊ฐ์‹œํ•˜๊ฑฐ๋‚˜ ๋ณ€์กฐ, ์บ์‹ฑ๊ณผ ๊ฐ™์€ ๊ธฐ์กด์— ์›น์—์„œ ํ•  ์ˆ˜ ์—†์—ˆ๋˜ ๋ถ€๊ฐ€์ ์ธ ์ž‘์—…๋“ค์„ ํ•  ์ˆ˜ ์žˆ์Œ

Polyfill

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ด์ „ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ตœ์‹  ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ฝ”๋“œ

  • ์ด์ „ node์—๋Š” window.fetch()๊ฐ€ ์—†์–ด์„œ ํด๋ฆฌํ•„ ์„ค์น˜ํ•˜์—ฌ ์‚ฌ์šฉ

์˜ˆ์ œ

ํ•ธ๋“ค๋Ÿฌ ์ž‘์„ฑ

  • msw ๋ชจ๋“ˆ์˜ rest ๊ฐ์ฒด ์‚ฌ์šฉ

  • Express์™€ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ํ•ธ๋“ค๋Ÿฌ ๊ตฌํ˜„

import { rest } from 'msw';

const BASE_URL = 'http://localhost:3000';

const handlers = [
  rest.get(`${BASE_URL}/products`, (req, res, ctx) => {
    const products = [
      {
        category: 'Fruits', price: '$1', stocked: true, name: 'Apple',
      },
    ];

    return res(
      ctx.status(200),
      ctx.json({ products }),
      );
    }),
  ];

export default handlers;

ํ…Œ์ŠคํŠธ

import { rest } from 'msw';

const BASE_URL = 'http://localhost:3000';

const handlers = [
  rest.get(`${BASE_URL}/products`, (req, res, ctx) => {
    const products = [
      {
        category: 'Fruits', price: '$1', stocked: true, name: 'Apple',
      },
    ];

    return res(
      ctx.status(200),
      ctx.json({ products }),
      );
    }),
  ];

export default handlers;

Last updated