안드로이드 앱을 개발하면서 로컬에서 백엔드 서버를 실행하고, 이를 앱에서 직접 호출하려는 경우가 많습니다. 하지만 localhost:포트번호
또는 10.0.2.2:포트번호
를 사용해도 연결되지 않아 당황한 경험, 한 번쯤 있으셨을 겁니다.
이 글에서는
- 왜
localhost
와10.0.2.2
가 작동하지 않을 수 있는지 - 로컬 IP 주소를 이용해 문제를 해결하는 방법
ipconfig
또는ifconfig
로 그 주소를 찾는 이유
까지, 개념부터 실용적인 해결책에 설명 하도록 하겠습니다!
기본 개념 , IP 주소와 네트워크의 구조
먼저 이 문제를 이해하려면 간단한 네트워크 구조를 알아야 합니다.
localhost
(또는127.0.0.1
)는 자기 자신을 의미합니다.- 에뮬레이터나 스마트폰에서
localhost
를 호출하면, 그 장치 자기 자신 내부의 서버를 호출합니다. 즉, 노트북에서 띄운 백엔드 서버는 전혀 모르고 있는 셈입니다.
노트북에서 띄운 서버에 접속하려면, 노트북의 네트워크 상 IP 주소를 통해 접근해야 합니다.
Android 개발 환경에서의 네트워크 연결 방식 요약
실행 환경 | 요청 주소 | 의미 | 성공 여부 |
---|---|---|---|
에뮬레이터 | localhost |
에뮬레이터 자신 | ❌ |
에뮬레이터 | 10.0.2.2 |
호스트 PC (노트북) | ⭕ |
실 디바이스 | localhost |
스마트폰 자신 | ❌ |
실 디바이스 | 10.0.2.2 |
의미 없음 (전용 가상 IP) | ❌ |
실 디바이스 | 192.168.x.x (PC의 IP) |
노트북 | ⭕ |
안드로이드 에뮬레이터로 서버에 접속할 때는 10.0.2.2 해당 주소를 이용하면 되지만,
안드로이드 스튜디오를 스마트폰과 연동해서 사용할 경우에는, IP 주소 확인이 필요합니다.
즉, 실제 스마트폰에서 노트북에 접근하고 싶다면 192.168.x.x와 같은 IP 기반 주소를 사용해야 합니다.
왜 ipconfig
또는 ifconfig
가 중요한가?
노트북의 IP 주소를 찾는 가장 쉬운 방법은 아래 명령어입니다
- Windows
ipconfig
- macOS / Linux
ifconfig
이 명령어를 실행하면 다음과 같은 정보를 볼 수 있습니다
이더넷 어댑터 Wi-Fi:
IPv4 주소 . . . . . . . . . : 192.168.0.23
서브넷 마스크 . . . . . . . : 255.255.255.0
기본 게이트웨이 . . . . . . : 192.168.0.1
여기서 IPv4 주소가 우리가 사용할 IP입니다.
→ http://192.168.0.23:포트번호
이렇게 작성하면 안드로이드 기기에서도 이 서버에 접근할 수 있습니다!
왜 이 방법이 통하는가?
1. 동일 네트워크(와이파이)에 연결되어 있기 때문
- 스마트폰과 노트북이 같은 와이파이에 연결되어 있다면, 서로의 IP 주소를 통해 직접 통신할 수 있습니다.
- 라우터는 DHCP를 통해 두 기기에 각각의 사설 IP를 부여합니다.
- 이 IP는 같은 네트워크 상에서 통신할 수 있는 주소이기 때문에, 스마트폰에서 노트북으로 요청을 보낼 수 있습니다.
2. 사설 IP는 로컬 네트워크 내에서만 유효
- 대부분의 가정용 공유기 환경에서는
192.168.x.x
,10.x.x.x
형식의 사설 IP 대역을 사용합니다. - 스마트폰에서 이 IP로 요청을 보내면, 같은 공유기 아래 있는 노트북에게 전달됩니다.
- 따라서 백엔드 서버가 노트북에서 실행 중이라면, 해당 IP와 포트로 정확히 접속 가능한 것입니다.
🛠 실전 예시
1. 백엔드 서버 실행 (FastAPI)
uvicorn main:app --host 0.0.0.0 --port 8000
--host 0.0.0.0 옵션은 외부에서 접속 가능하게 만드는 핵심입니다.
2. IP 주소 확인 (Windows 기준)
ipconfig
예시 결과
IPv4 주소: 192.168.0.23
3. 안드로이드 앱에서 API 호출 주소 설정
val BASE_URL = "http://192.168.0.23:8000"
이제 안드로이드 앱에서 로컬에서 실행 중인 백엔드 API에 접속할 수 있습니다!
주의할 점
- PC 방화벽이 해당 포트를 막고 있을 수 있습니다 → 방화벽 예외 설정 필요
- 서버가
127.0.0.1
에만 바인딩되어 있다면 외부 접속 불가 → 반드시0.0.0.0
또는 IP로 실행 - HTTPS 우회: 테스트용 환경에서는 HTTP를 쓰지만, 앱에서 허용하려면
network_security_config.xml
필요 - IP 주소는 재부팅하거나 라우터 재연결 시 바뀔 수 있음 → 정적 IP 할당 고려 가능
정리
문제 | 해결 방법 |
---|---|
localhost 로 연결 안 됨 |
스마트폰에서 자기 자신을 가리키기 때문 |
10.0.2.2 로 연결 안 됨 |
에뮬레이터 전용 IP이기 때문 |
백엔드 서버에 연결하고 싶음 | PC의 실제 IP 주소로 접근해야 함 |
IP 주소를 찾고 싶음 | ipconfig 또는 ifconfig 사용 |
서버에서 외부 접속 허용 안 됨 | --host 0.0.0.0 옵션 사용해야 함 |
결론
안드로이드에서 로컬 서버에 접속하고 싶다면, 아래 과정을 따르면 됩니다!
- PC에서 IP 주소 확인
ipconfig
또는ifconfig
- 서버 실행 시 외부 접속 허용
--host 0.0.0.0
으로 실행 - 안드로이드에서 IP로 요청
http://192.168.0.xx:포트번호
이렇게 하면, 실 디바이스에서 로컬 서버 접근이 가능해집니다!
'Tools > Android Studio' 카테고리의 다른 글
안드로이드 스튜디오에서 Flutter APK 추출하는 방법 (0) | 2025.01.29 |
---|---|
안드로이드 스튜디오에서 java코드를 kotlin 코드로 바꾸는 법 (1) | 2023.09.28 |
안드로이드 스튜디오(Android Studio) 설치 방법 (2) | 2023.03.14 |