React & React Native/라이브러리 활용

[RN] React Native 환경에서 reactotron-react-native 이해하고 적용하기 -1 : Apisauce, AsyncStorage, Benchmarking, Networking, Redux

adjh54 2024. 11. 25. 14:33
반응형
해당 글에서는 reactotron-react-native 라이브러리를 활용하여 모니터링을 하는 방법에 대해 알아봅니다.

1) reactotron-react-native


💡 reactotron-react-native

- React Native 애플리케이션을 디버깅하고 모니터링하기 위한 강력한 개발 도구입니다.
- 이 도구는 애플리케이션의 상태, API 요청, Redux 액션, 콘솔 로그 등을 실시간으로 추적하고 분석할 수 있게 해 줍니다.

 

1. 주요 기능


주요 기능 설명
API 모니터링 네트워크 요청과 응답을 실시간으로 추적하고 검사할 수 있습니다.
Redux 통합 Redux 스토어의 상태 변화와 디스패치된 액션을 모니터링할 수 있습니다.
AsyncStorage 검사 AsyncStorage의 데이터를 실시간으로 확인하고 수정할 수 있습니다.
콘솔 로깅 애플리케이션의 로그를 시각적으로 확인할 수 있습니다.
성능 모니터링 애플리케이션의 성능 지표를 추적하고 분석할 수 있습니다.

 

 

2. 플러그인


💡 플러그인

- reactotron을 사용할 때, 각각 지원해 주는 라이브러리를 확인하고 사용할 수 있습니다.
- 해당 플러그인을 통해서 React Native의 라이브러리들을 디버깅하고 모니터링할 수 있습니다.

https://docs.infinite.red/reactotron/plugins/

 

Reactotron Plugins | Open Source at Infinite Red

Reactotron has a powerful plugin system with ready-made plugins for you to use in your app. You can also create your own plugins to extend Reactotron's functionality.

docs.infinite.red

플러그인 설명
Apisauce Axios 라이브러리의 API 요청과 응답을 모니터링하고 디버깅하기 위한 플러그인
AsyncStorage AsyncStorage 라이브러리의 로컬 저장소 데이터를 확인하고 관리하기 위한 플러그인
Benchmarking React Native의 성능 측정 및 분석을 위한 도구 플러그인
Mobx State Tree Mobx 상태 관리 라이브러리와의 통합하는 플러그인
Networking XMLHttpRequests의 네트워크 요청과 응답을 모니터링을 하는 플러그인
Open In Editor 코드를 에디터에서 바로 열어볼 수 있는 기능
Image Overlay 이미지 오버레이 기능을 통한 UI 디버깅 플러그인
MMKV react-native-mmkv 고성능 키-값 저장소 MMKV 데이터 확인하는 플러그인
Redux Redux 라이브러리의 상태 관리 및 액션 모니터링
Storybook Storybook 라이브러리의 UI 컴포넌트 개발 환경과의 통합하는 플러그인
Global Errors 전역 에러 추적 및 모니터링을 하는 플러그인
Global Logs 전역 로그 추적 및 확인을 하는 플러그인

 

 

 

 

반응형

 

 

2) 앱 설치


 

1. Reactotron App 설치


💡 Reactotron App 설치
# reactotron 앱을 homebrew를 통해 설치합니다.
$ brew install --cask reactotron
 

reactotron

Homebrew’s package index

formulae.brew.sh

 

💡 [참고] 아래의 경로에서 Reactotron App 앱을 다운로드할 수 있습니다.
 

Releases · infinitered/reactotron

A desktop app for inspecting your React JS and React Native projects. macOS, Linux, and Windows. - infinitered/reactotron

github.com

 

💡 앱을 실행하면 아래와 같은 형태로 앱을 확인할 수 있습니다.

 

 

2. reactotron 라이브러리 설치


 

# reactotron 라이브러리 설치(npm)
$ npm i --save-dev reactotron-react-native

# or

# reactotron 라이브러리 설치(yarn)
$ yarn add reactotron-react-native -D

 

 

3. index.tsx


💡 index.tsx

- 해당 페이지에서는 앱이 실행될 때 구성한 reactotron을 수행할 수 있도록 구성합니다.
- React Native의 DEV 환경 변수를 통해 개발모드에서만 수행되도록 하며 ./src/reactotron.config를 통해서 구성한 파일을 참조합니다.
/**
 * init Register App
 * @format
 */
import { AppRegistry } from 'react-native';
import App from './src/App';
import { name as appName } from './app.json';

if (__DEV__) {
    import('./src/ReactotronConfig');
}

AppRegistry.registerComponent(appName, () => App);

 

 

4. ReactotronConfig.ts


💡 ReactotronConfig.ts

- 해당 페이지에서는 ReactotronConfig의 환경 설정을 수행합니다. 이 부분에서 plug-in을 추가하고 관리가 됩니다.

💡 [참고] 해당 플러그인에 대해서 Reactotron 내에서 모니터링하도록 구성하였습니다.
플러그인 설명
Apisauce Axios 라이브러리의 API 요청과 응답을 모니터링하고 디버깅하기 위한 플러그인
AsyncStorage AsyncStorage 라이브러리의 로컬 저장소 데이터를 확인하고 관리하기 위한 플러그인
Benchmarking React Native의 성능 측정 및 분석을 위한 도구 플러그인
Networking XMLHttpRequests의 네트워크 요청과 응답을 모니터링을 하는 플러그인
Redux Redux 라이브러리의 상태 관리 및 액션 모니터링

 

 

💡 아래와 같이 추가적인 라이브러리 설치가 필요합니다.

- 이외에도 다른 라이브러리가 존재하니, 필요에 따라 각각은 아래의 문서를 참고하여 추가하여야 합니다.
# 라이브러리 설치(npm)
$ npm i --save-dev reactotron-apisauce reactotron-redux

# or

# 라이브러리 설치(yarn)
$ yarn add reactotron-apisauce reactotron-redux -D
 

Reactotron Plugins | Open Source at Infinite Red

Reactotron has a powerful plugin system with ready-made plugins for you to use in your app. You can also create your own plugins to extend Reactotron's functionality.

docs.infinite.red

 

💡 ReactotronConfig.ts 구성 소스코드

- 각각 추가하려는 모니터링에 대해서 추가를 수행하였습니다.
import Reactotron, { openInEditor } from 'reactotron-react-native';
import { reactotronRedux } from 'reactotron-redux'
import AsyncStorage from '@react-native-async-storage/async-storage';
import apisaucePlugin from "reactotron-apisauce"
import config from '../app.json';

Reactotron
  .configure({
    name: config.name,
    onDisconnect: () => {
    },
  })
  .setAsyncStorageHandler(AsyncStorage)   // AsyncStorage의 모니터링 설정
  .useReactNative({
    asyncStorage: true,                   // AsyncStorage의 모니터링 설정
    networking: true,                     // netwrok의 모니터링 설정
  })
  .use(reactotronRedux())                 // Redux 모니터링 설정
  .use(apisaucePlugin())                  // Apisauce 모니터링 설정
  .use(openInEditor())                    // 편집기에서 열기 설정
  .connect();

 

 

3) 앱을 실행합니다.


 

1. Reactotron App을 실행합니다.


 

 

2. 안드로이드의 디바이스를 이용하는 경우 포트포워딩을 해줍니다.


💡 안드로이드의 디바이스를 이용하는 경우 포트포워딩을 해줍니다.

- 안드로이드 디바이스를 사용하는 경우는 안드로이드 기기의 포트를 포트포워딩을 통해서 9090 포트로 연결을 해주어야 합니다.

- 이는 Reactotro이 통신할 수 있도록 안드로이드 디바이스와 Reactotron를 설정하는 필수적인 단계입니다.
- 디바이스를 연결한 뒤 아래의 명령어를 통해서 포트포워딩을 수행합니다.
$ adb reverse tcp:9090 tcp:9090

 

💡 해당 포트포워딩을 수행하고 Metro Bundler를 새로고침 하면 연결됨을 확인할 수 있습니다.

 

 

3. React-native 앱의 Metro Bundler를 재 실행합니다.


 

 

4. Timeline 탭을 선택하고 앱을 동작시킵니다.


💡 Timeline 탭을 선택하고 앱을 동작시킵니다.

- 위에서 지정한 Redux(Async Storage)와 API Response에 대한 로그 및 일반 DEBUG에 대해서 출력이 됨을 확인하였습니다.

 

 

5. 오른쪽에 필터 버튼을 눌러서 필요한 로그에 대해서만 확인이 가능합니다.


 

 💡 필터를 선택하였습니다.

 

💡 아래와 같이 ‘API’ 필터만 선택한 경우, 이에 따르는 각각에 대해서만 확인이 가능합니다.

 

 

4) 앱 내에 상세 값 확인


 

1. RTK(Redux Tool Kit) : AsyncStorage 값 확인


 💡 RTK(Redux Tool Kit) : AsyncStorage 값 확인

- 아래와 같이 AsyncStorage 내에 저장한 Redux값에 대해 아래와 같이 key, value 형태로 확인 할 수 있음을 확인하였습니다.

 

 

 

2. API 통신 데이터 확인 : Axios 요청/응답 값 확인


 

2.1. API 통신 요청 값 확인


💡 API 통신 요청 값 확인

- 아래와 같이 데이터 통신 엔드포인트와 요청/응답 시간, 요청 시 사용했던 값을 아래와 같이 확인 할 수 있습니다.

 

2.2. API 통신 응답 값 확인


💡 API 통신 응답 값 확인

- 아래와 같이 데이터 통신 엔드포인트와 통신 시간, 응답 값을 아래와 같이 확인 할 수 있습니다.

 

 

3. 개발자 콘솔 조회


3.1. 디버그 콘솔


💡 디버그 콘솔

- 아래와 같이 하나의 콘솔내에 여러 개 출력 중이며, JSON 형태의 데이터의 경우는 prettier 된 형태로 출력이 됩니다.

 

 

3.2. 에러 콘솔


💡 에러 콘솔

- 아래와 같이 에러 콘솔을 출력하고 에러가 발생한 지점을 추적할 수 있습니다.

 

 

 

 

오늘도 감사합니다. 😀

 

 

 

 

 

반응형