React Native 전환 로드맵 4. RN 디버깅 플레이북
JS·렌더링·브리지·네트워크 등 다층 문제를 추적하기 위한 React Native 디버깅 절차와 도구
Posted
By okorion
React Native 전환 로드맵 4. RN 디버깅 플레이북
React Native에서 디버깅이 어려운 이유는 단순하다.
문제가 발생하는 층이 하나가 아니기 때문이다.
- JS 로직 문제일 수도 있고
- 렌더링 문제일 수도 있고
- 네이티브 브리지 문제일 수도 있으며
- 네트워크/환경 문제일 수도 있다
이 글의 목적은 “감으로 찍는 디버깅”이 아니라
층을 나누고, 순서대로 제거하는 표준 절차를 만드는 것이다.
에러 유형 지도 (반드시 분류부터)
RN 에러는 먼저 어디에서 발생했는지부터 나눠야 한다.
1️⃣ 런타임 에러 (JavaScript)
특징
- undefined 접근
- 잘못된 state 업데이트
- 함수 호출 오류
증상
- 빨간 에러 화면
- stack trace에 JS 파일 표시
대응
- 콘솔 로그
- 코드 레벨 문제
2️⃣ 렌더링 에러 (UI / State)
특징
- 화면이 안 뜸
- 일부 컴포넌트만 렌더링
- 무한 리렌더
원인
- 조건부 렌더링 오류
- 잘못된 key
- state 구조 설계 문제
3️⃣ 네이티브 에러 (Bridge / Module)
특징
- 앱 즉시 종료
- iOS/Android에서만 발생
- 에러 메시지 불친절
원인
- 네이티브 모듈 설정 오류
- 권한/SDK 문제
- Expo / CLI 환경 불일치
4️⃣ 네트워크 에러
특징
- 데이터 안 옴
- 로딩 무한
- 특정 기기에서만 실패
원인
- CORS 착각 (RN에는 없음)
- 네트워크 권한
- 로컬 IP / 실제 기기 이슈
👉 디버깅 시작은 항상 “이게 어느 층 문제인가?”다.
로그 전략 (구조화해서 남겨라)
로그를 찍는 목적
- 값 확인 ❌
- 흐름 확인 ⭕
나쁜 로그
1
console.log(data);
→ 맥락 없음, 의미 없음
좋은 로그
1
2
3
4
console.log('[AddItem]', {
input,
itemsLength: items.length,
});
실무 로그 규칙
태그 붙이기
[ScreenName],[Action],[API]
- 객체로 묶기
- 상태 변경 전/후 분리
1
2
3
console.log('[DeleteItem:before]', items);
setItems(...)
console.log('[DeleteItem:after]');
Remote Debugging 실전 주의점
Remote Debugging이란
- JS 코드를 Chrome/V8 환경에서 실행
- 브라우저 DevTools 사용 가능
장점
- breakpoint 사용 가능
- 네트워크 요청 추적 쉬움
- React DevTools 연동 편함
치명적인 단점
- 실제 디바이스 환경이 아님
- 성능/타이밍 문제 왜곡
- 애니메이션/제스처 관련 버그 숨김
실무 원칙
- 로직 확인용으로만 사용
- 성능/렌더링 문제는 반드시 디바이스 기준으로 재확인
React DevTools로 봐야 할 핵심 포인트
React DevTools는 “컴포넌트가 왜 다시 그려졌는가”를 추적하는 도구다.
반드시 확인할 것 4가지
리렌더 빈도
- state 하나 바뀌었는데 전체 화면 리렌더?
props 변화
- 불필요한 객체/함수 새로 생성 중인가
state 위치
- 너무 상위에 있지 않은가
key 문제
- 리스트 아이템 재사용 꼬임
자주 터지는 패턴
- inline 함수 props
- 불변성 깨진 state
- index 기반 key
👉 렌더링 문제의 80%는 구조 문제다.
10분 진단 루틴 (체크리스트)
문제 발생 시, 아래 순서대로 기계적으로 진행한다.
1분차: 에러 분류
- JS / 렌더링 / 네이티브 / 네트워크?
2~3분차: 로그 삽입
- 이벤트 시작/끝
- 상태 변경 지점
4~5분차: 조건 제거
- 조건부 렌더링 제거
- 하드코딩으로 확인
6~7분차: 환경 분리
- 에뮬레이터 vs 실제 기기
- Remote Debugging ON/OFF
8~9분차: DevTools 확인
- 리렌더 원인
- props/state 변화
10분차: 원인 범위 확정
- 코드 문제인가?
- 환경 문제인가?
- 설계 문제인가?
10분이 지나도 범위가 안 좁혀지면 문제는 단일 버그가 아니라 구조 문제일 확률이 높다.
이 파트의 결론
- RN 디버깅은 “툴 싸움”이 아니라 절차 싸움
- 로그는 출력이 아니라 설계
- 빨리 고치는 사람의 공통점은 → 문제를 정확히 분류한다
이 디버깅 루틴이 몸에 붙으면 다음 단계인 상태 관리·내비게이션 설계에서 시행착오가 급격히 줄어든다.
This post is licensed under CC BY 4.0 by the author.
