Open Happhee opened 2 years ago
MSW๋ Mock Service Worker๋ก ์๋น์ค ์์ปค๋ฅผ ์ด์ฉํ์ฌ API๋ฅผ ๋ชจํนํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ๋คํธ์ํฌ ์์ฒญ์ ๊ฐ๋ก์ฑ๋๋ก ์ค๊ณ๋ Service Worker API๋ฅผ ํ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ชฉ ์ฌ์ฉ ์ฌ๋ถ ๊ด๊ณ ์์ด ๋์ผํ ์ ํ๋ฆฌ์ผ์ด์ ๋์์ ๋ณด์ฅํ๋ค. ๋ํ, ๋ชจํน์ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ด ๊ฐ์ฅ ํฐ ์ฅ์ ์ด๋คโ๏ธ
Next.js + TypeScript + MSW
์๋ฒ API๊ฐ ๋ง๋ค์ด์ง๊ธฐ ์ ์ ํ ์คํธ๋ฅผ ์ํ API ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์์ต๋๋ค โจ
ํธ๋ค๋ฌ(handler)
setupWorker()
_app.tsx์ ํ๋จ์ ์ฝ๋๋ฅผ ์คํํ์ฌ mocking์ ํ์ฑํํ๋ค.
if (process.env.NEXT_PUBLIC_API_MOCKING === 'enabled') { import('../mocks'); }
๐ yarn dev ๋ก ์คํํ๋ฉด Devtools > Console์ Mocking enabled๊ฐ ๋ํ๋๋ค.
ํ์ฌ recoil, useSWR ์ฐ๊ฒฐ์ ์ํ ์ํ...! ์ด๊ฑด ์ค์ API๊ฐ ๋์์ผ ํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค!!
๐ ์ฌ์ฉ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค
const handler = () => { fetch('/auth/login/naver/happhee') .then((res) => res.json()) .then((res) => console.log(res)); }; <Image src={ImgNaverLogo} width={56} height={56} style={{ padding: '1.5rem' }} onClick={() => handler()} />
๐ ๋ชจ๋ฅด๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ์ธ์ ๋ ์ง ์ง๋ฌธ ํด์ฃผ์ธ์ ๐
๐ Mocks Service Worker
Next.js + TypeScript + MSW
์๋ฒ API๊ฐ ๋ง๋ค์ด์ง๊ธฐ ์ ์ ํ ์คํธ๋ฅผ ์ํ API ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์์ต๋๋ค โจ
โ ํด๋ ๋ฐ ํ์ผ ์ค๋ช
๐ mocks/data
๐ mocks/handlers
ํธ๋ค๋ฌ(handler)
์ฝ๋๋ฅผ ์์ฑํ ํด๋์ ๋๋ค๐ mocks/browsers.ts (๋ธ๋ผ์ฐ์ ํ๊ฒฝ) or server.ts (๋ ธ๋ ํ๊ฒฝ)
setupWorker()
ํจ์๋ฅผ ์ฌ์ฉํด์ ์๋น์ค ์์ปค๋ฅผ ์์ฑํ๋ค.โจ MSW ์คํํ๊ธฐ
_app.tsx์ ํ๋จ์ ์ฝ๋๋ฅผ ์คํํ์ฌ mocking์ ํ์ฑํํ๋ค.
๐ yarn dev ๋ก ์คํํ๋ฉด Devtools > Console์ Mocking enabled๊ฐ ๋ํ๋๋ค.
โ ์ฌ์ฉ๋ฒ
๐ ์ฌ์ฉ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค
๐ ๋ชจ๋ฅด๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ์ธ์ ๋ ์ง ์ง๋ฌธ ํด์ฃผ์ธ์ ๐