
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ์ค์ ๋ฐฑ์๋ API๊ฐ ์์ฑ๋๊ธฐ ์ ์ ํ๋ฉด์ ๊ฐ๋ฐํ๊ฑฐ๋,
๋ค์ํ ์๋ฒ ์๋ต์ ํ
์คํธํด์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํ๋ค.
์ด๋ ํ์ํ ๊ฒ์ด ๋ฐ๋ก ๋ชจํน ์๋ฒ๋ค.
๋ชจํน ์๋ฒ๋ฅผ ์ด์ฉํ๋ฉด ์ค์ API๊ฐ ์์ด๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ๊ณ์ ์งํํ ์ ์๋ค.
๋ชจํน(Mock)์ 'ํ๋ด ๋ด๋ค'๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
๋ชจํน ์๋ฒ๋ ์ค์ ์๋ฒ๊ฐ ์ ๊ณตํด์ผ ํ๋ API๋ฅผ ์์๋ก ๊ตฌํํ์ฌ,
๊ฐ๋ฐ์๊ฐ ์์ฒญ์ ๋ณด๋ด๋ฉด ๊ฐ์ง ์๋ต์ ๋๋ ค์ฃผ๋ ์๋ฒ๋ค.
์ด๋ฅผ ํตํด ์๋ฒ ๊ฐ๋ฐ์ด ๋๋์ง ์์๊ฑฐ๋ ํ
์คํธ์ฉ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๊ฒฝ์ฐ์๋
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์งํํ ์ ์๋ค.
๋ชจํน ์๋ฒ๋ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ์ ์ฉํ๋ค.
- ๋ฐฑ์๋๊ฐ ์์ง ์ค๋น๋์ง ์์ ๊ฒฝ์ฐ
- ์๋ฌ ์๋ต, ์์ธ ์ํฉ์ ํ ์คํธํ๊ณ ์ถ์ ๊ฒฝ์ฐ
- ํน์ ์กฐ๊ฑด ํ์์ ์๋ฒ ์๋ต์ ์กฐ์ํ๊ณ ์ถ์ ๊ฒฝ์ฐ
- ์ธ๋ถ API์ ๊ณผ๋ํ๊ฒ ์์กดํ๊ณ ์ถ์ง ์์ ๊ฒฝ์ฐ
React ํ๋ก์ ํธ์์ ๋ชจํน ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
๋ํ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ค.
๊ฐ๊ฐ ์ฅ๋จ์ ์ด ์์ง๋ง, ์ต๊ทผ์๋ MSW๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ์ถ์ธ๋ค.
MSW๋ Service Worker๋ฅผ ์ด์ฉํด ๋คํธ์ํฌ ์์ฒญ์ ๊ฐ๋ก์ฑ๊ธฐ ๋๋ฌธ์,
์ค์ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ๊ณผ ๊ฐ์ฅ ์ ์ฌํ๊ฒ ํ
์คํธํ ์ ์๋ค.
์ค์นํ๊ธฐ
npm install msw --save-dev
ํธ๋ค๋ฌ ์์ฑํ๊ธฐ
// src/mocks/handlers.js
import { rest } from 'msw'
export const handlers = [
rest.get('/api/user', (req, res, ctx) => {
return res(
ctx.status(200),
ctx.json({
id: 1,
username: 'mock_user',
})
)
}),
]
Service Worker ์ค์ ํ๊ธฐ
// src/mocks/browser.js
import { setupWorker } from 'msw'
import { handlers } from './handlers'
export const worker = setupWorker(...handlers)
์ฑ์์ ์์ปค ์คํํ๊ธฐ
// src/index.js
import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
if (process.env.NODE_ENV === 'development') {
const { worker } = require('./mocks/browser')
worker.start()
}
ReactDOM.render(<App />, document.getElementById('root'))
๊ฐ๋ฐ ํ๊ฒฝ์์๋ง ๋ชจํน ์๋ฒ๊ฐ ์๋ํ๋๋ก NODE_ENV ์กฐ๊ฑด์ ๊ฑธ์ด์ฃผ๋ ๊ฒ์ด ์ค์ํ๋ค.
json-server๋ ๋ก์ปฌ์์ ๋น ๋ฅด๊ฒ REST API ์๋ฒ๋ฅผ ๋ง๋ค์ด์ฃผ๋ ํด์ด๋ค.
์ค์นํ๊ธฐ
npm install -g json-server
db.json ํ์ผ ๋ง๋ค๊ธฐ
{
"users": [
{ "id": 1, "name": "John" },
{ "id": 2, "name": "Jane" }
]
}
์๋ฒ ์คํํ๊ธฐ
json-server --watch db.json --port 4000
์ด์ http://localhost:4000/users๋ก ์ ๊ทผํ ์ ์๋ค.
json-server๋ ๋งค์ฐ ๊ฐ๋จํ์ง๋ง, ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ด๋ ๋ค์ํ ์๋ฌ ์ผ์ด์ค๋ฅผ ๋ค๋ฃจ๊ธฐ์๋ ํ๊ณ๊ฐ ์๋ค.
์ค์ API ์คํ๊ณผ ํญ์ ์ผ์นํ๋์ง ํ์ธํด์ผ ํ๋ค.
์๊ฐ์ด ์ง๋๋ฉด์ ๋ฐฑ์๋ API ์คํ์ด ๋ณ๊ฒฝ๋ ์ ์์ผ๋ฏ๋ก, ๋ชจํน ์๋ฒ๋ ๊พธ์คํ ์
๋ฐ์ดํธํด์ผ ํ๋ค.
๋ชจํน ๋ฐ์ดํฐ์ ์ค์ ๋ฐ์ดํฐ ๊ฐ ์ฐจ์ด์ ์ฃผ์ํด์ผ ํ๋ค.
์ค์ ํ๊ฒฝ์์ ๋ฐ์ํ ์ ์๋ ์์ธ ์ํฉ๋ค์ ๋ฏธ๋ฆฌ ๋ชจํน ๋ฐ์ดํฐ๋ก ์ค๋นํด๋๋ ๊ฒ์ด ์ข๋ค.
๋ฐฐํฌ ์ ๋ชจํน ์๋ฒ๊ฐ ๋๋๋ก ์ค์ ํด์ผ ํ๋ค.
๋ชจํน ์๋ฒ๋ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ง ์ฌ์ฉํ๊ณ , ์ค์ ์๋น์ค์์๋ ๋ฐ๋์ ๋นํ์ฑํ๋์ด์ผ ํ๋ค.