인텔리제이에서 어제까지 잘 실행하다가 오늘 갑자기 실행하니까 아래와 같은 port 충돌 오류가 났다
Web server failed to start. Port 8080 was already in use.
Action: Identify and stop the process that's listening on port 8080
or configure this application to listen on another port.
찾아보니까 대부분 아래와 같은 방식의 해결방법으로 진행하더라
netstat -ano | findstr 8080
명렁어 입력근데 찾아본 방법으로 진행했는데도 현재 실행중인 8080포트에 대해서 아무런 값이 나오지 않았다.
그래서 다른 방법으로 포트 충돌을 해결했다.
1. cmd를 관리자 모드로 실행
2. net stop winnat
과net start winnat
명령어 입력
3. 인텔리제이 재실행
winnat 이란?
WinNAT(Windows Network Address Translation)은 Windows에서 NAT(Network Address Translation) 기능을 제공하는 서비스이다.
특히, Windows에서 Docker, WSL2, Hyper-V 등의 가상화 네트워크를 사용할 때 이 서비스가 백그라운드에서 네트워크 주소를 매핑해준다.
net stop winnat
→ WinNAT 서비스를 중지해 네트워크 포트 포워딩 설정 등이 해제되는 걸 의미한다
net start winnat
→ WinNAT 서비스를 다시 시작
포트 충돌 문제가 해결된 이유?
8080 포트를 점유하고 있던 게 일반 프로세스가 아니라, winnat을 통해 설정된 포트 포워딩이었을 가능성이 있다.
→ 이 경우 netstat로도 안 보이거나 LISTENING 상태가 아니어서 PID가 안 나올 수 있다.
Docker를 사용한다면 내부적으로 8080 포트를 컨테이너에 포워딩할 수 있고, 이건 WinNAT을 통해 처리된다.
wsl
lsof -i :8080 | grep LISTEN | awk '{print $1, $2}'