왜 포트 8000이 내 로컬 머신에서 갑자기 작동을 멈췄을까 (그리고 내가 해결한 방법)
Source: Dev.to
몇 일 전, 전형적인 로컬 개발 문제에 부딪혔습니다. 서버가 더 이상 일반적인 주소에 바인드되지 않았습니다.
http://127.0.0.1:8000
시작하려고 하면 바로 다음과 같은 오류가 발생했습니다:
Failed to listen on 127.0.0.1:8000
다음 포트들(8001‑8010)도 같은 결과가 나왔습니다. 이 상황이 익숙하다면 계속 읽어보세요.
포트 확인하기
대부분의 개발자가 가장 먼저 하는 일은 포트가 이미 사용 중인지 확인하는 것입니다:
netstat -ano | findstr :8000
명령어는 아무 것도 반환하지 않았고, 포트가 비어 있는 것으로 보였지만 바인드가 여전히 실패했습니다.
Windows 예약 포트
Windows에서는 일부 포트가 운영 체제 자체에 의해 예약됩니다. 흔히 문제를 일으키는 대상은 다음과 같습니다:
- Hyper‑V
- WSL 2
- Docker Desktop
- Windows NAT (WinNAT)
- VPN 소프트웨어
사용자 모드 프로세스가 리스닝하고 있지 않더라도 Windows가 내부적으로 포트를 차단할 수 있습니다. 그래서 netstat에는 아무 것도 보이지 않지만 애플리케이션이 시작되지 않는 것입니다.
Windows가 제외한 포트 범위를 확인하려면 관리자 권한으로 다음 명령을 실행하세요:
netsh int ipv4 show excludedportrange protocol=tcp
내 컴퓨터에서는 다음과 같은 출력이 나왔습니다:
Start Port End Port
7943 8042
포트 8000은 이 범위에 포함되므로 OS가 해당 포트를 소유하고 있어 어떤 애플리케이션도 바인드할 수 없습니다. netstat에는 어떤 프로세스도 나타나지 않습니다.
왜 이 오류가 그렇게 답답한가
- 오류 메시지가 모호합니다.
- 포트 확인 도구가 충돌을 보여주지 않습니다.
- 프레임워크를 재설치하거나 프로세스를 종료해도 도움이 되지 않습니다.
- 근본 원인은 운영 체제이며, 코드가 아닙니다.
해결 방법
예약되지 않은 포트 사용하기
제외된 범위 밖의 포트를 선택하세요. 예:
- 8080
- 3000
- 5000
- 9000
Django 예시
python manage.py runserver 127.0.0.1:8080
관리자 권한 없이도 정상적으로 동작합니다.
Hyper‑V 비활성화 (필요하지 않은 경우)
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
비활성화 후 PC를 재시작하면 포트 예약이 영구적으로 해제됩니다.
WSL 2 종료 (빠른 해결)
wsl --shutdown
WinNAT 재시작
net stop winnat
net start winnat
⚠️ 관리자 권한이 필요합니다.
일반적인 조언
- Python, Node, Django 등 런타임을 재설치하지 마세요. 문제는 이들과 관련이 없습니다.
netstat만으로는 OS가 예약한 포트를 알 수 없으니 위에 보여준netsh명령을 사용하세요.
이 글이 시간을 절약하는 데 도움이 되었다면, 포트 8000에 막힌 다른 개발자와 공유해 주세요. 즐거운 코딩 되세요! 🚀