사용중인 포트가 없는데 있다고 ?
😠😠😠
오늘 집에서 인텔리제이를 통해 톰캣 서버를 돌리려는데 굉장히 당황스러운 문제가 발생했습니다.
"8080포트가 이미 사용 중입니다."
하지만 실제로 포트를 점유한 프로세스는 없는 기이한 상황이었어요. 🫤
1 시도했지만 실패한 방법들 👀
제가 시도한 방법은 다음과 같았습니다.
1. 현재 사용 중인 포트 확인 및 종료
결과: 사용 중인 포트가 없음.
2. 인텔리제이 내 프로세스 강제 종료
결과: 실행 중인 프로세스가 없음.
3. 톰캣 서버 포트 변경
결과: 8080~8099까지 모두 사용 중이라고 나옴.
4. 인텔리제이 캐시 초기화
결과: 효과 없음.
5. PC 재부팅
결과: 역시 효과 없음.
GPT에게 다른 방법을 물어봤으나.... 네트워크와 방화벽 문제일 가능성을 제시하더라구요 ?!
하지만 저는 로컬 환경인데 방화벽 문제라는 게 이해가 되질 않았습니다.
그래서 구글링을 하던 중 해답을 찾았어요 !!!! (출처 https://cr0c0.tistory.com/43)
---
해결 방법 😀
구글링을 통해 찾은 해결 방법은 다음과 같습니다.
명령 프롬프트(CMD)를 관리자 권한으로 실행한 뒤, 다음 명령어를 입력합니다.
net stop winnat
net start winnat

위 두 명령어를 차례로 입력하면 Windows NAT 서비스(winnat)가 재시작되면서 제가 겪은 포트 문제가 해결됩니다!
사진과 같이 winnat이 종료되고 다시 시작된 후 서버를 실행해보시면 포트 문제가 해결된 것을 확인할 수 있습니다 ㅎㅎ
원인 분석 🔍
이 문제는 Windows NAT(Network Address Translation) 서비스(`winnat`)가 특정 포트를 내부적으로 점유하고 있었기 때문이였습니다 !
잠시 winnat에 대해 알아보자면
Windows NAT (`winnat`) 서비스란?
- `winnat` (Windows NAT, Windows Network Address Translation) 서비스는 네트워크 트래픽을 관리하고 가상화된 환경에서 포트 포워딩을 수행하는 역할을 함.
- 특히 Docker, WSL(Windows Subsystem for Linux), Hyper-V, VPN, Windows 컨테이너 등을 사용할 때 자동으로 포트를 예약함.
- 이 서비스가 활성화되면 일부 포트가 사용 중이 아니더라도 Windows가 내부적으로 점유한 상태로 남을 수 있음.
즉, Window는 네트워크 환경을 최적화하고, 내부적인 충돌을 방지하기 위해 특정 포트 범위를 자동으로 예약하는데 이 과정 중 Window가 특정 범위의 포트를 시스템적으로 예약해 다른 프로세스가 사용할 수 없게 막아두었다는 문제입니다 !!!
이 문제에 대한 근본적인 원인은 제 생각엔 Docker 때문이 아닌가 생각이 듭니다. Docker는 winnat을 사용하기 때문에 포트 예약이 더 빈번히게 이루어지고, 이러한 과정 중 8080 ~ 8099 범위의 포트를 점유하여 실행이 되지 않았던 것입니다 !
만약 포트와 서버에 대한 개념이 없었더라면 저는 아마 방화벽과 네트워크 사이에서 땀을 흘리고 있지 않았을까요 😭
마지막으로 Port에 대해 간략하게 알아보면서 오늘 글을 마무리하도록 하겠습니다 !
📚 포트(Port) 개념 간략 정리
포트(Port)는 컴퓨터가 네트워크에서 데이터를 주고받을 때 사용하는 논리적인 출입구입니다!
쉽게 말해, IP 주소가 "어느 집으로 갈지"를 결정한다면, 포트는 "어느 방(프로그램)으로 들어갈지"를 결정하는 역할을 합니다.
📦 IP 주소 = 아파트 주소
🚪 포트 = 각 세대(집)의 문 번호
👨💻 프로그램 = 집 안에 사는 사람
즉, 같은 주소(IP)라도, 몇 호(포트)인지 알아야 정확한 방(프로그램)으로 배달(데이터 전달)이 가능하다!
자주 쓰이는 주요 포트
서비스 | 포트 번호 |
HTTP (웹사이트) | 80 |
HTTPS (보안 웹) | 443 |
SMTP (이메일 전송) | 25 |
SSH (원격 접속) | 22 |
MySQL 데이터베이스 | 3306 |
Tomcat 기본 포트 | 8080 |
이 글로 비슷한 문제를 겪는 분들께 도움이 되길 바랍니다!!!!! 😊