React Native 에뮬레이터에서 api 호출이 안 될때 해결 방법

2025. 5. 1. 16:51리액트/리액트네이티브

728x90

1. 문제의 발단: React Native 에뮬레이터에서 Strapi 호출이 안 되는 이유

  1. 내 개발 머신에서
    • Strapi 서버를 localhost:1337 에서 띄워 두고
    • Postman이나 브라우저에서는 http://localhost:1337/articles 등이 잘 동작
  2. 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 인가?

  1. Windows 경로
    • SDK 기본 경로: C:\Users\admin\AppData\Local\Android\Sdk\platform-tools
  2. Git Bash 경로 표기
    • Windows 드라이브는 /c/… 로 마운트
    • 따라서 cd /c/Users/admin/AppData/Local/Android/Sdk/platform-tools
  3. 이 디렉터리에 가야 하는 이유
    • 그 안에 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