Post View

이클립스에서 Port 오류로 인해 톰캣 서버 실행이 안되는 경우

언제나처럼 이클립스를 사용하여 블로그를 개발하던 중...
분명 어제까지 정상적으로 사용하고 잤는데 뭐지...?

일단 침착하고... 메시지를 보니 8009포트가 이미 사용중이라는 메시지가 나타납니다.
아무래도 어디선가 8009 포트를 쓰고있고, 프로세스가 종료되지 않은 채로 남아있어서 그런 것 같습니다.

먼저 포트 별 프로세스를 찾는 방법을 알아보겠습니다.

검색(https://ko.wikipedia.org/wiki/Netstat)을 해보니 netstat이라는 명령어를 통해 특정 포트를 사용하는 프로세스를 알 수 있다고 합니다.
명령프롬프트(cmd)를 실행한 뒤 netstat /help 명령을 입력하니 이미지와 같은 자세한 설명이 나옵니다.

* 명령프롬프트에서는 명령어 /help를 치면 자세한 사용법 및 옵션 등을 알려줍니다.

netstat -ano | findstr 8009 명령을 입력합니다.
나타나는 목록은 순서대로 프로토콜, 로컬 주소, 외부 주소, 상태, PID입니다.
해당 내용은 " | findstr 8009" 없이 "netstat -ano"만 입력하면 나타나지만, 지금은 findstr 명령(특정 문자열이 있는 행을 출력)을 사용해서 8009가 포함된 행만 출력되었습니다.
저는 로컬에서 개발하고 있으니 로컬 주소 부분에 8009가 입력되어있는 것을 보면 되는데, 여기서는 PID(프로세스 ID)가 동일하니 해당 프로세스가 어떤건지 찾아보겠습니다.

tasklist 명령은 실행중인 프로세스의 목록을 표시해줍니다.
tasklist /FI "PID eq 6504"를 입력하면 PID가 6504(netstat을 통해 찾은 PID)와 동일한 값을 찾아줍니다.
확인을 해보니 크롬 브라우저에서 사용하고 있었네요.
확인이 다 되었다면 해당 프로세스를 종료합니다.

taskkill 명령은 특정 프로세스를 종료시켜줍니다.
여기서는 /f 옵션을 추가해서 강제종료 되도록 하였고, /pid 6504로 프로세스 ID가 6504인 프로세스를 종료해줍니다.
성공했다는 메시지가 출력되면 됩니다.

이제 다시한번 Tomcat 서버를 시작해보겠습니다.

정상적으로 시작된 것 같네요.

localhost:8080으로 접속해보니 정상적으로 실행되는 것을 확인할 수 있습니다.

정리해보자면, Tomcat이 사용하는 기본 포트는 8080, 8009, 8005 등인데 이 중의 포트(8009)를 chrome.exe라는 프로세스가 이미 사용하고 있었습니다.
해당 프로세스를 종료하였으니 8009 포트는 사용되지 않게 되었고 Tomcat 서버를 시작하니 정상적으로 실행되었습니다.

사실 위의 명령어를 다 외울 수도 없고 외울 필요도 없습니다.
여기서 중요한 부분은 Port와 Process에 대한 이해인 것 같습니다.

Port라는 것은 각 Process에서 사용하는 경로의 역할을 해주는데, 하나의 Port는 하나의 Process에서만 사용될 수 있습니다.
* 8080 포트를 열어놓은 프로세스가 Tomcat 서버라면 127.0.0.1:8080으로 접근 시 Tomcat 서버에게 처리 요청을 함.
* 참조 : https://ko.wikipedia.org/wiki/포트_(컴퓨터_네트워킹)

위와 같은 개념을 이해한 상태에서 다시한번 처음의 Port가 중복되어 Tomcat 서버를 실행할 수 없다는 말이 이해가 되실거고,
자연스럽게 1. 포트 중복 확인, 2. 포트를 사용하는 프로세스 제거, 3. 서버 재실행을 하면 문제 해결이 될 것이라고 생각이 될겁니다.

위의 과정에 필요한 명령어는 구글에게 물어보면 됩니다.

사실 몇 줄만으로도 해결할 수 있었겠지만 자세한 설명을 위해 장황하게 설명했습니다.
읽어주셔서 감사합니다.

Comments