이러쿵저러쿵


MAC 컴퓨터에서 로컬 환경에서 웹 사이트 개발 작업을 하다보면 아래와 같은 메시지를 만나는 경우가 있습니다.

 

address already in use ::: 포트번호

로컬 환경에서 작업 중인 사이트를 띄우기 위해 node나 tomcat, apache 등 웹 서버(WAS, WEB 구분 없이)를 띄울 때, 발생하는 것인데, 웹서버를 띄우려면 일단 지정된 특정 포트를 열어야 하는데, 지정된 포트가 이미 다른 웹서버나 다른 서비스에 의해 사용하고 있어서 발생하는 메시지 입니다.

 

다른 서비스가 이미 점유했을 수도 있고, 앞서 띄웠던 웹서버가 올바르게 종료되지 않고, 프로세스상에 남아서 계속해서 점유하고 있어서 발생하기도 합니다.

 

1) 사용중인 특정 포트 확인하기

이런 경우, 해당 포트를 사용하고 있는 서비스(프로세스)를 강제로 종료 시킨 후, 다시 사용하면 됩니다.

 

sudo lsof -i :[포트번호]

 

특정 포트를 어떤 서비스가 사용중인지 확인하기 위한 명령어입니다. sudo권한으로 실행해야 합니다.

lsof 명령어는 'list open files' 라는 뜻의 명령어로 현져 열려 있는 파일의 목록, 또는 그 파일들을 열고 있는 프로세스들의 목록을 조회하기 위한 명령어입니다.

 

-i 옵션 없이 sudo lsof 명령어로만 실행하게 되면 모든 시스템의 모든 열려있는 파일들에 대한 정보가 출력되는데, 우리는 특정 포트만 확인하면 되므로 '-i :[포트번호]' 위의 옵션울 추가해줍니다.

 

명령어 : sudo lsof -i :3000 

3000번 포트를 사용(점유)하고 있는 프로세스 확인하기

그리고 PID가 현재 사용중인 프로세스의 고유번호입니다. 이 번호를 잘 기억해두세요. 이 프로세스를 이제 강제로 종료시켜야 하니까요.

 

2) 해당 프로세스를 강제 종료 시키고, 포트를 다시 사용할 수 있도록 하기

포트를 새로 띄워려는 웹서버에서 사용하게 하기 위해서는 현재 해당 포트를 점유하고 있는 프로세스를 종료시켜주어야 합니다.

실제 중요한 서비스가 점유중이라면 절대 종료시키면 안될테니, 먼저 어떤 프로세스가 점유하고 있는지 잘 확인하시고, 가능한 로컬 환경에서의 웹 서버 포트는 시스템 등의 프로스세가 사용하지 않는 높은 번호의 포트를 사용하세요. 3000(node), 8000, 8080 (그냥 HTTP 80포트랑 유사..) 등을 많이 사용하는 것 같은데, 사실 뭐 정해진 것은 없습니다.

 

kill -9 [프로세스ID]

 

이제 위의 명령어를 이용하여 해당 포트를 점유하고 있는 프로세스를 강제로 종료시킵니다. 앞에서 확인된 프로세스 아이디는 25182였으니, 아래의 명령어로 호출하면 되겠지요?

 

명령어 : sudo kill -9 25182

프로세스ID가 25182인 프로세스를 강제로 종료시킵니다.

 

그럼 다시 sudo lsof -i :3000 명령어를 실행시켜 봅니다.

이제 더 이상 조회되는 프로세스가 없지요? 이제 다시 웹 서버를 해당 포트로 띄우시면 정상적으로 웹서버가 구동되는 것을 확인하실 수 있습니다.

 



Comment +0