[React] MSW 잘 사용해보기

2023. 6. 8. 14:37·React/실험실
반응형

MSW란 서버의 API가 아직 개발 중인 단계일 때 프론트엔드에서 API 명세를 토대로 연동 작업을 할 수 있게 도와주는 

라이브러리이다. 

 

서버가 API를 완성하는 단계에서 프론트가 API 연동을 하는게 이상적이지만 현실은 일정을 완벽하게 맞추는게 

쉽지 않은 일이다. 이때 MSW는 정말 많은 도움이 되는 친구이다. 

 

프론트에서 보낸 body / params / query가 서버에 정상적으로 전달될지 테스트도 가능하고 명세에 따른 데이터를

실제로 받아서 테스트할 수 있기 때문이다.

 

하지만 개인적으로 한 가지 불편한 점이 있었는데, MSW를 사용하는 환경과 서버와 통신하는 환경을 

모두 동시에 사용할 수 없었던 것이다. 

내가 모르는 좋은 방법이 있을 지는 모르겠지만 MSW를 설정하면 모든 요청은 MSW를 타고 가기 때문에 

서버와 테스트를 하려면 해당 코드를 제거하거나 MSW를 꺼야하기 때문이다. 

 

그러다 문뜩 생각난 것이 있다. 

일반적으로 프로젝트는 development와 production 모드로 나뉠텐데 development 환경에서도 msw를 사용하는 환경과 

사용하지 않는 환경을 나누는 것이다! 

 

사용 방법도 아주 간단한데, 

// package.json

"scripts": {
    "start": "set REACT_APP_DEV=LOCAL&& set PORT=3123&& craco start",
    "dev": "set REACT_APP_DEV=SERVER&& set PORT=3000&& craco start",
    
    // ...
}

먼저 package.json에서 develop 환경에서도 구분할 수 있도록 .env를 설정하였다. 

REACT_APP_DEV가 LOCAL이라면 MSW를 사용하는 환경, SERVER라면 사용하지 않는 환경이다. 

 

또한 동시에 실행시키기 위해서 PORT를 다르게 주었다. 

PORT를 다르게 주면 실행할 때 사용하는 포트가 할당한 값으로 변경된다. 

// src/index.js

if (
  process.env.NODE_ENV === "development" &&
  process.env.REACT_APP_DEV === "LOCAL"
) {
  worker.start();
}

msw를 실행하는 index.js에서 NODE_ENV만 조건을 거는 것이 아닌 package.json에서 할당한 REACT_APP_DEV도 

추가로 조건을 거는 것이다. 

 

이것으로 LOCAL 환경에서는 msw를 사용하고 아니라면 사용하지 않게 되었다. 

 

생각보다 간단한데, 이것으로 실제 서버 API와 MSW를 동시에 테스트할 수 있는 환경을 만든 것이다. 

더 좋은 방법이 있다면 해당 방법을 사용하겠지만 그 전까지는 위와 같은 방법을 사용할 것이다. 

반응형
저작자표시 비영리 변경금지 (새창열림)

'React > 실험실' 카테고리의 다른 글

[React] day.js vs moment.js  (0) 2023.06.22
[React] dayjs  (0) 2023.06.13
[React] Cookie  (1) 2023.06.01
[React] Polymorphic 한 컴포넌트  (1) 2023.05.17
[React] useMemo를 사용하지 말아야 한다!  (0) 2023.04.20
'React/실험실' 카테고리의 다른 글
  • [React] day.js vs moment.js
  • [React] dayjs
  • [React] Cookie
  • [React] Polymorphic 한 컴포넌트
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    네트워크
    ChatGPT
    자바스크립트
    알고리즘
    webpack
    next.js
    Babel
    타입스크립트
    Node.js
    CCNA
    react
    식물
    CSS
    프로그래머스
    redux
    typescript
    타일러영어
    javascript
    리얼학습일기
    덤프
    Docker
    영어독학
    ReactNative
    리액트
    바질
    바질 키우기
    리얼클래스
    다이소
    영어회화
    네이버 부스트캠프
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[React] MSW 잘 사용해보기
상단으로

티스토리툴바