MSW(Mock Service Worker)는 Service Worker를 이용해 서버를 향한 실제 네트워크 요청을 가로채서(intercept) 모의 응답 (Mocked response)를 보내주는 API Mocking 라이브러리
Next로 개발중 MSW를 사용했는데 전 프로젝트 리팩토링 중 개발환경에서 데이터가 필요해서 Vite + Typescript에 사용해보기로 결정하였다.
npm install msw
설치후에 public 폴더에 mockServiceWorker.js 파일이 자동으로 생긴다는데 안생겨서
npx msw init public/ --save
로 생성해주었다.

src 폴더 안에 mocks라는 폴더를 만들고 두 개의 파일을 넣어준다.

1️⃣ browser.ts
worker 인스턴스를 생성하고, 요청 핸들러를 정의하는 파일
// src/mocks/browser.ts
import { setupWorker } from "msw/browser";
import { handlers } from "./handlers";
const worker = setupWorker(...handlers);
export default worker;
2️⃣ handlers.ts
REST API 방식의 HTTP 메서드를 작성해서 API를 모킹하는 파일
가로채기 할 API : "/api/fundings/movies?genre=${genre}"
장르에 따른 영화 목록을 가져오려고 한다.
// src/mocks/handlers.ts
// 업데이트 이후로 rest인스턴스가 http인스턴스로 바뀜
import { http, HttpResponse } from "msw";
export const handlers = [
http.get("/api/movies", ({ request }) => {
// 쿼리스트링 가져오기
const url = new URL(request.url);
const id = url.searchParams.get("genre");
console.log(id);
// 장르가 1이면
if (id == "1") {
return HttpResponse.json({
movieList: [
{
movieId: 1,
poster: "http://file.koreafilm.or.kr/thm/02/00/04/31/tn_DPK011800.jpg",
},
{
movieId: 2,
poster: "http://file.koreafilm.or.kr/thm/02/00/04/31/tn_DPK011800.jpg",
},
// 3부터...356까지
{
movieId: 357,
poster: "http://file.koreafilm.or.kr/thm/02/00/01/39/tn_DPK004235.JPG",
},
],
totalCnt: 357,
});
}
}),
];
쿼리스트링 전까지 Api 써주고 쿼리스트링 부분이 필요하면
searchParams로 가져오면 된다.
return은 HttpResponse을 사용하면 된다.
get부분에 post, delete, put 등 필요한 요청을 쓰면 된다.
export const handlers = [
http.get("/api/movies/:genre", ({ request, params }) => {
const { genre } = params;
}
이러면 parameter값도 가져올 수 있다.
main.ts에 worker실행하는 코드추가
// main.tsx
import worker from "./mocks/browser";
if (process.env.NODE_ENV === "development") {
worker.start({
serviceWorker: { url: "/mockServiceWorker.js" },
onUnhandledRequest: "bypass",
});
}
개발환경에서만 적용이 되도록 조건을 걸어주고
핸들러가 정의되지 않은 요청에 대해 경고가 떠서 onUnhandledRequest : "bypass" 추가하였다.
console 확인

위에 같은 메세지가 뜨면 MSW가 활성화 된 상태
( 처음에 빨간색이라 오류난줄;; )
관리자도구 > Application > Service workers에서도 확인가능
mockServiceWorkder.js가 등록되어 있으면 된다.

이제 API MOCKING한 페이지로 가보면 요로케
![]() | ![]() |
|---|
데이터 집어넣기 성공ㅎㅎㅎ
조건을 걸어서 장르별로 다른데이터를 return하도록 구현하였다
처음에 분명 실행이 되서 잘 나왔는데....
자꾸 등록되어있는 Service Worker가 mockServiceWorker.js에서 dev-sw.js 바뀌는 현상 발생....
오류해결은...
다음 포스트에서 이어서...!