programming

장고 That port is already in use 해결 방법


by Kitle · 2020. 09. 21.



안녕하세요. 오늘은 장고 서버 실행 시 포트 오류 해결 방법을 알려드리겠습니다.

장고를 로컬 서버에 띄우기 위해 보통 python manage.py runserver 명령어로 실행하실 텐데요.

보통 다음과 같은 에러에 직면하는 경우가 있습니다.


django - That port is already in use

위와 같은 포트가 이미 사용중이라는 오류를 만나는 경우가 있습니다. 디폴트로 장고는 8000번 포트를 사용하는데 이미 어떤 서비스에서 8000번을 사용하고 있기 때문에 나타납니다. 

보통 이 경우는 두가지 경우가 존재합니다.

A. 이미 띄워둔 Django서버가 아직 종료되지 않아서, 같은 포트에 띄울 수 없는 경우

B. 다른 서비스가 사용중인경우 입니다.

로컬 서버(개발 목적)으로 사용하는 경우 B인 경우는 드물 것이라 예상됩니다.


우선 명령어를 입력하여 해당 포트를 어떤 서비스가 사용하고 있는지 알아봅니다.

$ lsof -i:8000

명령어를 입력하여 봅니다. 


저는 다음과 같은 COMMAND 가 나왔습니다. Python 이라고 되어 있는 경우는 Django 서비스가 돌고 있는 것이라 보면 되겠습니다. 다른 곳에서 띄운적이 없거나, 종료해도 무방한 경우 강제 종료 명령을 써 보겠습니다.

프로세스 강제로 종료하기 명령어(Mac 기준)

$ kill -9 PID

로 종료 가능합니다. 위에서 lsof 로 확인한 포트번호가 95949 였습니다. 매번 달라질 겁니다.

한번 종료해보겠습니다. kill -9 95949 로 입력하면 아무 반응 없습니다. 정상적으로 종료된 것입니다.

lsof -i:8000 명령어를 다시 입력해봅니다.

아무 반응없습니다. 아무도 쓰고 있지 않는 포트이므로 아무 표시되지 않습니다. 정상입니다.


자 이제 python manage.py runserver 명령으로 다시 띄워 보겠습니다.


이런 화면이 나온다면 이제 정상적으로 8000번 포트에 장고 서비스가 실행된 것입니다.


만약 다른서비스가 포트를 쓰고 있고, 포트를 바꿔야 하는 경우는 포트번호를 지정해주면 됩니다.

예를들어 9000 번으로 변경하는 경우 다음과 같이 작성할 수 있습니다.

python3 manage.py runserver 0.0.0.0:9000


그렇다면 대체 중복현상은 왜 발생하는 걸까요?

아마도 제 생각엔 서버를 종료할때는 Ctrl + C 로 종료해야하나 실수로 종료하지 않았다거나, Ctrl + Z 등의 비정상적으로 종료되는 경우 발생하는 것으로 확인 했습니다. 서버 실행 후 중지는 항상 Ctrl + C 로 잊지말고 종료하시기 바라겠습니다.

이상 포스팅을 마칩니다.