본문으로 바로가기
반응형



실제로 운영중인 운영서버의 경우는 대부분 포트 번호를 체계적으로 관리하기 때문에 개발자나 서버 구축을 하는 담당자가 포트가 중복될 경우가 많지 않다.


하지만, 웹 개발자가 개발을 위해 로컬 서버를 올리거나 FTP구축을 한다거나 로컬 DB서버를 구축하거나 할 때에 해당 포트를 이미 사용하고 있어서 오류가 발생하는 경우가 종종 발생한다.


사실 이 글을 쓰게된 이유도 시점에도 이클립스에 spring boot 내장 톰캣을 구동하려다 8080 포트가 이미 사용중이라는 에러와 함께 서버 구동이 되지 않았기 때문이다.


중복되는 포트의 사용처를 이미 알고 있는 경우에는 그 서비스를 중지하던, 새로 구축하려는 서비스의 포트를 변경해서 다시 구동하던 하면 될 것이다.

하지만 높은 확률로 대체 어떤 서비스가 사용중인 포트인지 모를 것이다.


이럴때 사용할 수 있는 방법은 두가지가 있다.


A. 윈도우 제어판의 리소스 모니터를 통해 GUI 방식으로 처리한다.

B. cmd로 포트를 사용중인 PID를 알아내서 작업 관리자로 서비스 명을 알아내고, 서비스를 중단시킨다.


A의 경우 매우 쉽고 편리하지만, 안타깝게도 윈도우 버전이나 회사 정책에 따라 리소스 모니터를 사용할 수 없는 경우가 많다.

따라서, B 방법으로 확인해 보도록 하겠다.



1. cmd netstat 명령어로 포트 확인


윈도우 명령 프롬프트(cmd)에서 현재 사용중인 포트를 확인할 수 있다. 

cmd는 netstat 명령어로 사용중인 포트를 확인하는 기능을 제공한다.

netstat 명령어의 모든 사용법을 알기 위해서 netstat/? 를 입력해보면 아래와 같은 설명을 볼 수 있을 것이다.



 -a            모든 연결과 수신 대기 포트를 표시합니다.

 -b            각 연결 또는 수신 대기 포트 생성과 관련된 실행 파일을 표시합니다. 

    잘 알려진 실행 파일에서 여러 독립 구성 요소를 호스팅하는 경우 연결 또는 수신
    대기포트 생성과 관련된 구성 요소의 시퀀스가 표시됩니다.

               이러한 경우에는 실행 파일 이름이 아래에 대괄호로 표시되고 위에는 TCP/IP에
               도달할 때까지 호출된 구성 요소가 표시됩니다.

               이 옵션은 시간이 오래 걸릴 수 있으며 사용 권한이 없으면 실패합니다.

 -e            이더넷 통계를 표시합니다. 이 옵션은 -s 옵션과 함께 사용할 수 있습니다.

 -f            외부 주소의 FQDN(정규화된 도메인 이름)을 표시합니다.

 -n            주소와 포트 번호를 숫자 형식으로 표시합니다.

 -o            각 연결의 소유자 프로세스 ID를 표시합니다.

 -p proto    proto로 지정한 프로토콜의 연결을 표시합니다. proto는 TCP, UDP, TCPv6 또는
                UDPv6 중 하나입니다. -s 옵션과 함께 사용하여 프로토콜별 통계를 표시할 
               경우 proto는 IP, IPv6, ICMP,

               ICMPv6, TCP, TCPv6, UDP 또는 UDPv6 중 하나입니다.

 -r            라우팅 테이블을 표시합니다.

 -s            프로토콜별 통계를 표시합니다. 기본적으로 IP, IPv6, ICMP,

               ICMPv6, TCP, TCPv6, UDP 및 UDPv6에 대한 통계를 표시합니다.

               -p 옵션을 사용하여 기본값의 일부 집합에 대한 통계만 표시할 수 있습니다.

 -t            현재 연결 오프로드 상태를 표시합니다.

 interval      다음 화면으로 이동하기 전에 지정한 시간(초) 동안 선택한 통계를 다시 표시합니다.

               통계 다시 표시를 중지하려면 <Ctrl+C>를 누르십시오.

               이 값을 생략하면 현재 구성 정보가 한 번만 출력됩니다.



다양한 명령을 실행할 수 있는 인수들이 있다. 이 중 우리가 알아내기 원하는 포트가 어떤것인지 알아내기 위해서는 -a , -n, -o를 사용한다.


-a            모든 연결과 수신 대기 포트를 표시합니다.

-n            주소와 포트 번호를 숫자 형식으로 표시합니다.

-o            각 연결의 소유자 프로세스 ID를 표시합니다.


-a를 통해 모든 포트를 표시해 줄 것이고, -n은 표시되는 내용을 우리가 알아볼 수 있게끔 익숙한 형식의 123.111.23.45:8080 과 같은 식으로 표시해 줄 것이다.

이 중 원하는 포트를 찾아서 -o 명령어가 보여주는 프로세스 ID(PID)를 알아내면 된다.


cmd창에  netstat -ano  를 입력해 보자.



위와 같이 활성 연결 내역을 입력해준 옵션값들대로 보여준다.

내가 찾기 원하는 포트는 8080이므로 찾아보면, 8080은 PID 2792에서 사용중인 것을 알 수 있다.



2. windows 작업 관리자에서 PID확인


cmd상에서 바로 해당 포트를 정지시키는 것도 가능하지만, 다소 까다롭기도 하고 이 프로세스가 어떤것인지를 알아야 의사결정을 할 수 있기 때문에 다른 방법을 사용한다.


windows 작업 관리자를 실행한다.

(작업표시줄 끝쪽의 △ 아이콘에 오른쪽버튼을 눌러서 실행하거나, ctrl + alt + delete를 눌러 실행할 수도 있다.)



작업 관리자의 서비스 탭에서 PID로 정렬하면 내가 찾고자 하는 PID가 어떤 서비스인지 확인할 수 있고, 이 서비스를 종료하고자 한다면 해당 서비스에 오른쪽 버튼을 누른 뒤, 서비스 중지를 선택하면 종료가 가능하다.





반응형

 Other Contents