프로그래밍을 하면서 내가 만든 웹 사이트가 전부 정상적으로 돌아간다면 너무나 좋겠지만, 만들어진 사이트를 운영하다보면 무수히 많은 불청객들이 찾아온다. 바로 버그이다. 간단한 오탈자, UI 오동작 부터 원인을 찾기힘든 여러가지 버그들이 발생한다. 이 같은 버그들을 미연에 방지하거나 해결하기 위해 이루어지는 작업을 디버깅이라고 한다.
프론트엔드에서 사용할 수 있는 디버깅 방법에는 어떤것들이 있을까? 이번 포스팅의 주제는 프론트엔드에서의 디버깅이다.
내가 가장 일반적으로 사용하고 있는 디버깅 방법은 console.log를 사용하여 데이터 핸들링이 필요한 곳에 로그를 남겨 하나 하나 동작을 확인하는 방법이다.
const Data = [];
// 데이터를 확인하고 싶은곳에 로그 코드 작성
console.log('Data >>>>>>>', Data);
이 방법은 가장 간단하면서도, 가장 많이 사용되는 방법일 것이다. 하지만 프로그램이 커지고 오래 진행되다보면 이 로그들을 제대로 지워주지 않는다면 개발자 도구에서는 불이 날것이다. 너무 많은 로그들 때문에 의도했던 디버깅도 제대로 진행되지 못하고, 매번 배포하기전에 log를 전부 지워주는 작업을 해주거나 별도의 세팅으로 배포시에는 로그가 노출되지 않도록 처리해줘야 한다. 또한 최악의 경우이지만 혹시나 작성해 놓은 로그들을 지우다가 바로 위나 아래 있는 핵심 로직을 같이 지우는 불상사가 발생할 수도 있다.(당연히 코드를 커밋하기 전에 꼼꼼히 체크를 하겠지만…)
이렇게 지금까지도 불편하지만 가장 빠르게 적용할 수 있고 무엇보다 편하기에 사용하고 있던 console log 방식외에 무엇이 있고 어떻게 활용할 수 있을지 이번기회를 통해 알아보려고 한다.
콘솔닌자는 VSCode에서 사용할 수 있는 확장프로그램이다.
console.log를 이용한 디버깅 툴이라서 위에서 발생했던 문제점들을 전부 해결 할 수는 없지만, 콘솔이 많아졌을 때 지금 진행중인 부분의 로그를 IDE 상에서 쉽게 확인 할 수 있다는 장점이 있다.(출력 횟수도 출력되어서 의도치 않은 호출을 미연에 방지할 수 있음)
콘솔닌자 보러가기
console.log
코드 추가 및 소스 실행 console.log("data ::::", data);
React 공식문서에서 디버깅 툴로 소개하고 있는 크롬 확장프로그램이다.
React 문서 보러가기
React Dev Tools가 제공하는 대표적인 기능은 다음과 같다.
확장 프로그램 설치하기
사파리는 따로 패키지를 설치 해야한다.
리액트로 개발된 사이트 또는 빌드되어 실행중인 로컬 주소에서 확장프로그램 사용하기
개발자 도구에서 기능 확인하기
components
와 profiler
라는 탭이 새로 추가된 것을 볼 수 있다.아래 튜토리얼에 따라서 필요한 방식으로 디버깅 진행
React와 React-Native에서 애플리케이션의 상태, 네트워크 요청 및 성능 지표를 모니터링 할 수 있게 도와주는 데스크탑 프로그램이다.
초기 세팅하기(기본 세팅 & zustand 세팅)
src/ReactotronConfig.ts
import Reactotron from 'reactotron-react-js';
import reactotronZustand from 'reactotron-plugin-zustand';
import useAuthStore from '@store/useAuthStore';
import usePartnerStore from '@store/usePartnerStore';
Reactotron.configure({})
.use(
reactotronZustand({
stores: [
{
name: 'auth',
store: useAuthStore,
},
{
name: 'partner',
store: usePartnerStore,
},
],
}),
) // we can use plugins here
.connect(); // let's connect!
```
src/main.tsx
import './ReactotronConfig.ts';
커스텀 로그 추가
import Reactotron from 'reactotron-react-js';
//...생략...
axiosInstance.interceptors.request.use(
Reactotron.display({
name: `Reqeust [${config.url}]`,
value: `${config.method} ${JSON.stringify(config.params)}`,
});
);
네트워크 요청시 데스크탑 앱에서 로그를 확인하듯이 확인할 수 있음
Store와 연결시 store의 상태도 쉽게 확인할 수 있다.
프론트엔드에서 활용할 수 있는 디버깅 툴들이 많다는 것을 느꼈다. React Dev Tools는 많이 사용하고 유명한 툴이여서 조금이지만 사용하고 있었지만, 많이 활용하지는 못했던것 같다. 위 3개뿐만 아니라 다양한 디버그 툴이 있었는데, 사용방식 별로 하나씩 정해서 리뷰를 진행해 보았다.
리뷰를 진행하다보니 하나하나의 기능들이 많아서 다 담기에는 이번 블로깅 주제와는 맞지 않는 것 같아서 다음 블로깅에 하나씩 자세하게 작성해보려고 한다.