1 분 소요

MacOS에서 5000번 포트를 사용하면 에러가 발생한다??

MongoDB 공부를 위해 강의를 들으며 연습하던 도중,

app.listen(5000);

코드를 작성하고 실행하니, 아래와 같은 에러가 발생하였다.

시스템 설정

이미 5000번 포트를 사용중이다. 라는 뜻의 에러로 보인다.

발생하는 이유는?

바로 MacOS 몬트레이에서 5000번 포트를 Airplay 연결 포트로 등록해 놓았기 때문이다.

보통 많은 개발자들이 5000번 포트를 개발을 위해 사용하고 있고, 로컬 서버의 기능이라고 할 수 있는 5000번 포트를 왜 굳이굳이 Airplay의 연결을 위해 사용하였을까..? 싶은 생각이다.

해결 방법은?

아무튼, 우리에게 중요한 것은 이걸 어떻게 해결할 수 있는가? 라는 점이다.

5000번 포트 강제 탈취

특정 포트 번호를 사용중인 PID를 확인한다. PID란 참고로 process_id의 축약형이다. 그리고, 그 프로세스를 강제종료 하는 방법이다.

  • lsof -n -i TCP:5000

lsof(LiSt Open Files)라는 명령어로, 현재 실행중인 파일들을 리스트업 해주는 명령어이다. 5000번 포트를 사용중인 내용을 보여주는 명령어이다. lsof에는 이외에도 다양한 옵션들이 존재하지만, 지금 당장 우리에게 필요한 것은 이렇게 구성하면 된다.

COMMAND     PID     USER    FD    TYPE
ControlCe 12345    (...) (...)    IPv4
ControlCe 12345    (...) (...)    IPv6

이런 식으로 나올것이다.

COMMAND, PID, USER, FD, TYPE, DEVICE, SIZE/OFF, NODE, NAME 이렇게 다양하고 길게 나오지만, 지금 당장 필요한 것은 COMMAND와 PID이다. COMMAND는 실행한 명령어, PID는 앞에서도 말했듯, 프로세스 ID이다.

  • kill로 죽여버려

kill은 강제종료 하는 명령어이다. PID를 통해 현재 실행중인 해당 Process를 강제종료 한다. 우리는 Airplay가 사용중인 5000번 포트를 사수하기 위해 12345 PID를 가진 프로세스를 종료할 것이다.

kill -9 12345

하지만, ControlCe가 차지하고 있는 포트는 kill 명령어로 죽이고 죽이고 몇번을 죽여도 다시 잡는다.. Airplay 기능이 꺼지지 않는 한, 당연히 못잡을 것이다. 여기까지는 혹여나 다음에 나도 모르는 곳에서 사용중인 포트가 있다면 해결하기 위해 정리한 것이고, 진짜 해결 방법은 이제부터 시작이다.


Airplay기능 OFF

해결 방법은 그냥 Airplay기능을 끄는 것이다.

영어 : System Settings… > General > AirDrop & HandOff > Airplay Receiver OFF 한국어 : 시스템 설정.. > 일반 > AirDrop 및 HandOff > Airplay 수신 모드 OFF (나는 MacOS 기본 세팅이 영어로 되어 있어서 사진과 같이 보이지만, 한국어버전으로 따라오면 된다.)

  • System Settings…(시스템 설정..)로 들어간다.
시스템 설정
  • General(일반) 탭의 AirDrop & HandOff 탭으로 들어간다.
AirDrop 및 HandOff 탭
  • Airplay Receiver(Airplay 수신 모드) 기능을 Off한다.
AirplayReceiver 끄기

그런데 Airplay 기능도 사용하고 싶으면 어떻게 해요??

그렇다면, Airplay 기능을 껐을 때, 5000번 포트를 실행시키면 된다. 그 다음 Airplay 기능을 다시 ON하게 되면, 이미 5000번 포트는 사수한 상태이기 때문에, Airplay가 알아서 자동으로 다른 포트를 잡게된다. 하지만, 재부팅을 하거나 다른 영향이 생긴다면, Airplay는 다시 5000번 포트를 잡는다. 고로 Airplay 기능을 끄거나, 다른 포트를 사용하는 것이 정신건강에 좋을 수도 있다..ㅎㅎ

Reference

Algroot’s space

댓글남기기