React Native 에뮬레이터에서 api 호출이 안 될때 해결 방법
2025. 5. 1. 16:51ㆍ리액트/리액트네이티브
728x90
1. 문제의 발단: React Native 에뮬레이터에서 Strapi 호출이 안 되는 이유
- 내 개발 머신에서
- Strapi 서버를 localhost:1337 에서 띄워 두고
- Postman이나 브라우저에서는 http://localhost:1337/articles 등이 잘 동작
- Android 에뮬레이터(또는 실제 디바이스)에서는
- 코드 상에 fetch('http://localhost:1337/...') 를 쓰면
- “localhost” 가 에뮬레이터 자신의 루프백 인터페이스(127.0.0.1) 를 가리킴
- 즉, 에뮬레이터 안에 Strapi 서버는 없으니 연결이 거부되거나 타임아웃 발생
- 결과적으로 react-query 나 fetch 에서 data 가 계속 undefined 로 남거나, 에러 로그만 찍힘
→ 원인: 에뮬레이터 네트워크 격리 때문에 “http://localhost” 요청이 개발 머신의 “localhost” 로 가지 않음.
2. Android Debug Bridge(adb) 와 포트 포워딩
2-1. adb reverse 가 하는 일
- adb reverse tcp:1337 tcp:1337
- 에뮬레이터(혹은 디바이스)의 포트 TCP 1337 을
- 호스트(개발 머신)의 TCP 1337 으로 포워딩(터널링)
- 에뮬레이터 내에서 localhost:1337 로 보내는 요청이
- 호스트 PC의 같은 포트(127.0.0.1:1337) 로 전달되도록 연결 경로를 재설정
→ 에뮬레이터가 개발 머신의 Strapi 서버에 접근 가능해짐
2-2. adb 바이너리가 있는 곳
- Android SDK 설치 경로 중 platform-tools/adb.exe 가 ADB 클라이언트
- Git Bash 등에서 기본 PATH 에 포함되지 않으므로,
- 직접 그 디렉터리로 이동(cd) 해서 ./adb 식으로 실행해야 “command not found” 에러가 사라짐
3. 왜 cd /c/Users/admin/AppData/Local/Android/Sdk/platform-tools 인가?
- Windows 경로
- SDK 기본 경로: C:\Users\admin\AppData\Local\Android\Sdk\platform-tools
- Git Bash 경로 표기
- Windows 드라이브는 /c/… 로 마운트
- 따라서 cd /c/Users/admin/AppData/Local/Android/Sdk/platform-tools
- 이 디렉터리에 가야 하는 이유
- 그 안에 adb.exe 가 있고,
- Git Bash 에선 ./adb 로 실행해야만
- OS 정책·MSYS2 계층을 통해 Windows .exe 를 제대로 띄울 수 있기 때문
4. 실행 과정의 인과관계
단계실행 커맨드 & 동작결과 & 의미
1 | cd /c/Users/admin/AppData/Local/Android/Sdk/platform-tools | adb.exe 가 있는 디렉터리로 이동 — 이제 ./adb 호출 가능 |
2 | ./adb version | ADB 클라이언트 버전 확인 → 올바른 파일인지 검증 |
3 | ./adb reverse tcp:1337 tcp:1337 | ADB 클라이언트가 ADB 서버(127.0.0.1:5037) 에 RPC 호출 “에뮬레이터-5554 에 port 1337 reverse 설정해 줘” |
4 | (출력 없음) | “에러 없이 성공” 의 신호. ADB 는 성공 시 stderr 를 남기지 않음 |
5 | ./adb reverse --list |
emulator-5554 tcp:1337 tcp:1337
→ 실제 매핑이 설정된 것을 최종 확인 !
728x90