개발자

Mac에서 포트가 이미 사용 중인 경우

TCP 포트와 주소에서 수신 대기할 수 있는 프로세스는 하나뿐입니다. 두 번째 서버는 “address already in use” 오류와 함께 중단됩니다.

적용 대상: 현재 지원되는 모든 macOS 버전.확인일: 2026년 10월 29일

증상

  • 개발 서버가 “EADDRINUSE” 또는 “address already in use” 오류와 함께 중단됩니다.
  • “port is already allocated” 오류로 Docker가 포트를 공개할 수 없습니다.
  • 편집기가 충돌하거나 재시동되기 전에는 포트가 비어 있었습니다.

가능한 원인

  • 이전에 실행한 서버. 이전에 실행한 서버가 아직 백그라운드에서 실행 중입니다.
  • 다른 앱. 다른 앱이 같은 포트를 사용합니다. macOS 12 이상에서는 AirPlay 수신기가 포트 5000과 7000을 사용합니다.
  • 컨테이너. 실행 중인 컨테이너가 Mac에서 같은 포트를 공개합니다.

확인 방법

  1. 포트에서 수신 중인 프로세스를 찾습니다. 3000을 해당 포트 번호로 바꾸세요.

    lsof -nP -iTCP:3000 -sTCP:LISTEN

    출력 COMMAND 및 PID 열에 프로세스가 표시됩니다.

  2. 다른 사용자의 프로세스를 보려면 sudo로 같은 명령을 실행하세요.

    sudo lsof -nP -iTCP:3000 -sTCP:LISTEN

    관리자 암호가 필요합니다.

  3. 프로세스에 대한 자세한 정보를 표시합니다.

    ps -p 12345 -o pid,command
  4. 해당 포트를 공개하는 컨테이너를 찾으세요.

    docker ps

해결 방법

  1. 직접 실행한 프로세스라면 해당 터미널 윈도우에서 Control-C로 중단하세요.

  2. 그렇지 않으면 PID를 사용해 종료 신호를 보냅니다.

    kill 12345
  3. 중단되지 않으면 kill -9을 사용하세요. 프로세스가 데이터를 저장할 수 없습니다.

  4. 프로세스가 macOS에 속하면 중지하지 마세요. 서버에 다른 포트를 선택하세요.

  5. 포트가 5000 또는 7000이면 Mac에서 포트 5000 또는 7000이 사용 중인 경우: AirPlay 수신기를 참고하세요.

Kilobat 사용

  1. 한 프로세스의 열린 소켓을 나열합니다.

    kilobat destinations --pid 12345
  2. PID로 프로세스를 종료합니다. 중단되지 않는 경우에만 --force을 추가하세요.

    kilobat quit 12345

질문

포트가 사용 중인데 lsof에 아무것도 표시되지 않는 이유는 무엇인가요?

lsof는 살펴볼 권한이 있는 프로세스만 표시합니다. 모든 프로세스를 보려면 sudo로 실행하세요.

-n과 -P는 어떤 기능을 하나요?

lsof가 주소를 이름으로, 포트를 서비스 이름으로 변환하지 않도록 합니다. 출력이 빨라지고 숫자로 표시됩니다.

출처

2026년 10월 29일 확인했습니다.