Android 앱에서 로컬 서버 연결 문제 해결하기 (SocketTimeoutException)

Jake·2025년 2월 15일

문제 상황


Android Studio에서 실제 Android 기기(삼성 핸드폰)를 연결하여 앱을 개발하는 중, Retrofit을 사용하여 Spring Boot 백엔드 서버(노트북 실행)와 통신하려고 했으나 아래와 같은 오류가 발생했다.

HTTP FAILED: java.net.SocketTimeoutException: failed to connect to /192.168.0.2 (port 8080) from /192.168.0.6 (port 37604) after 15000ms

노트북에서 Spring Boot 서버 실행 중 (IP: 192.168.0.2, 포트: 8080)
노트북과 Android 기기는 동일한 Wi-Fi 네트워크를 사용
Retrofit을 통해 API 요청 시 연결 실패
핸드폰 브라우저에서 http://192.168.0.2:8080/ 접속해도 "사이트에 연결할 수 없음" 오류 발생


원인 분석 및 해결 과정

  1. 방화벽 설정 확인

문제: Windows 방화벽이 8080 포트에 대한 외부 접근을 차단하고 있을 가능성이 있음.

✅ 해결 방법 (PowerShell에서 8080 포트 허용):

New-NetFirewallRule -DisplayName "Allow 8080" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 8080

하지만 여전히 접속이 되지 않았다.


  1. 서버 바인딩 확인

문제: Spring Boot 서버가 특정 IP가 아닌 localhost에만 바인딩되어 있을 가능성이 있음.

✅ 해결 방법 (application.yml 설정 변경):

server:
port: 8080
address: 0.0.0.0 # 모든 네트워크 인터페이스에서 접근 가능하게 변경

이후 서버를 재시작했지만, 여전히 Android 기기에서 접근이 되지 않았다.


  1. 네트워크 설정 확인

문제:

노트북에서 핸드폰으로 ping이 가능했으나, 핸드폰에서 노트북으로 ping이 되지 않음 → 네트워크 문제 가능성

Windows 네트워크 프로필이 공용(Public)으로 설정되어 있을 경우, 외부 기기에서 접근이 차단될 수 있음.

✅ 해결 방법: 네트워크 프로필을 개인(Private)으로 변경

Windows 설정 열기 (Win + I)

네트워크 및 인터넷 → Wi-Fi → 현재 연결된 네트워크 클릭

네트워크 프로필 유형을 "개인(Private)"으로 변경

변경 후 다시 테스트

이후 핸드폰에서 노트북 서버로 요청이 정상적으로 이루어졌다! 🎉


  1. 필요 없는 방화벽 규칙 정리 (선택 사항)

앞서 PowerShell 명령어로 8080 포트를 열었는데, GUI에서 이미 수동으로 설정한 경우 중복될 가능성이 있음.
필요하다면 아래 명령어로 방화벽 규칙을 비활성화하거나 제거할 수 있다.

✅ 8080 포트 방화벽 규칙 삭제:

Remove-NetFirewallRule -DisplayName "Allow 8080"

✅ 8080 포트 방화벽 규칙 비활성화:

Set-NetFirewallRule -DisplayName "Allow 8080" -Enabled False


결론

Android 기기에서 로컬 Spring Boot 서버와 연결이 안 될 때 확인해야 할 사항은 다음과 같다:

Windows 방화벽 설정 확인 (8080 포트 허용)

Spring Boot 서버 바인딩 확인 (0.0.0.0으로 변경)

네트워크 프로필 유형 확인 ("공용"이 아닌 "개인"으로 변경)

필요하면 방화벽 규칙 정리

이 과정을 거치면 동일한 네트워크를 사용하는 Android 기기에서 정상적으로 Retrofit을 통해 로컬 서버와 통신할 수 있다.

0개의 댓글