리눅스(Linux) 포트 확인 방법 - 특정 포트를 사용하는 프로세스 찾기


Linux 서버에서 개발하거나 서비스를 운영하다 보면 

"이 포트가 열려 있나?", "8080 포트를 어떤 프로세스가 사용하고 있지?" 하고 

확인해야 할 때가 자주 있습니다.

특히 다음과 같은 오류를 만났을 때 포트 확인이 필요합니다.

Address already in use

또는 애플리케이션은 실행했는데 접속이 되지 않거나 Connection Refused가 발생한다면, 

가장 먼저 서비스가 실제 포트에서 실행되고 있는지 확인해볼 필요가 있습니다.

이번 글에서는 Linux에서 ss, lsof, netstat을 이용해 

열려 있는 포트를 확인하는 방법부터 특정 포트를 사용하는 프로세스와 

PID를 찾고 종료하는 방법까지 정리합니다.



1. Linux에서 열려 있는 포트 확인하기

현재 Linux 서버에서 LISTEN 상태인 TCP 포트를 확인하려면 다음 명령어를 사용할 수 있습니다.

ss -lntp

옵션의 의미는 다음과 같습니다.

-l : LISTEN 상태의 소켓 표시
-n : 서비스 이름 대신 포트 번호를 숫자로 표시
-t : TCP 소켓 표시
-p : 해당 소켓을 사용하는 프로세스 표시

프로세스 정보까지 제대로 확인하려면 권한이 필요할 수 있습니다.

sudo ss -lntp

결과는 대략 다음과 같은 형태로 나타납니다.

State   Local Address:Port
LISTEN  0.0.0.0:22
LISTEN  0.0.0.0:80
LISTEN  0.0.0.0:8000

예를 들어 0.0.0.0:8000 이 LISTEN 상태라면 현재 8000번 포트에서 연결을 기다리는 서비스가 있다는 의미입니다.




2. Linux에서 특정 포트만 확인하기

실무에서는 모든 포트보다 특정 포트가 사용 중인지 확인하는 경우가 더 많습니다.

예를 들어 8000번 포트를 확인하려면 다음과 같이 사용할 수 있습니다.

sudo ss -lntp | grep ':8000'

8080 포트를 확인한다면 숫자만 바꾸면 됩니다.

sudo ss -lntp | grep ':8080'

아무 결과도 나오지 않는다면 해당 조건에 맞는 LISTEN 소켓이 없는 것입니다.

반대로 결과가 나온다면 어떤 주소와 포트에서 LISTEN 중인지, 권한이 충분하다면 어떤 프로세스가 사용 중인지 확인할 수 있습니다.



3. 특정 포트를 사용하는 프로세스 찾기

특정 포트를 어떤 프로세스가 사용하고 있는지 확인할 때는 lsof 명령어가 편리합니다.

8000번 포트를 확인해보겠습니다.

sudo lsof -i :8000

다음과 비슷한 결과가 나타날 수 있습니다.

COMMAND   PID     USER   FD   TYPE   NAME
python    12345   user   3u   IPv4   TCP *:8000 (LISTEN)

여기서 확인해야 할 부분은 COMMANDPID입니다.

COMMAND : python
PID     : 12345

즉, PID가 12345 인 Python 프로세스가 해당 포트를 사용하고 있다는 것을 알 수 있습니다.

TIP
포트를 사용하는 프로세스를 바로 종료하기보다는 PID를 이용해 어떤 프로세스인지 먼저 확인하는 것이 좋습니다.




4. PID로 실행 중인 프로세스 확인하기

PID를 찾았다면 바로 종료하기보다는 어떤 프로세스인지 먼저 확인하는 것이 안전합니다.

ps -fp 12345

또는 다음과 같이 확인할 수도 있습니다.

ps -ef | grep 12345

운영 서버에서는 하나의 서버에서 여러 서비스가 실행될 수 있으므로, PID만 보고 바로 프로세스를 종료하는 것은 피하는 것이 좋습니다.




5. 특정 포트를 사용하는 프로세스 종료하기

불필요한 프로세스라는 것을 확인했다면 kill 명령어로 종료할 수 있습니다.

kill 12345

종료되지 않는다면 강제 종료 명령도 있습니다.

kill -9 12345
주의
처음부터 kill -9를 사용하는 것은 권장하지 않습니다. 먼저 일반적인 kill PID로 정상 종료를 시도한 뒤, 종료되지 않을 때 강제 종료를 고려하는 것이 좋습니다.

프로세스를 종료한 후 다시 포트를 확인합니다.

sudo ss -lntp | grep ':8000'

결과가 사라졌다면 해당 포트를 사용하던 프로세스가 종료된 것을 확인할 수 있습니다.




6. netstat으로 Linux 포트 확인하기

기존 서버나 오래된 Linux 관련 문서를 보다 보면 netstat 명령어도 자주 볼 수 있습니다.

전체 LISTEN 포트를 확인하려면 다음과 같이 사용합니다.

sudo netstat -lntp

특정 포트만 확인하려면:

sudo netstat -lntp | grep ':8000'

다만 최근 Linux 환경에서는 netstat이 기본으로 설치되어 있지 않은 경우가 있습니다.

Ubuntu에서 필요한 경우 net-tools 패키지를 설치할 수 있습니다.

sudo apt update
sudo apt install net-tools

새로운 환경에서는 별도로 netstat을 설치하기보다 ss 명령어를 사용하는 것도 좋은 방법입니다.




7. 127.0.0.1과 0.0.0.0도 확인하기

포트가 LISTEN 상태라고 해서 다른 PC나 서버에서 반드시 접속할 수 있는 것은 아닙니다.

다음 두 결과를 비교해보겠습니다.

127.0.0.1:8000
0.0.0.0:8000

127.0.0.1:8000 은 일반적으로 로컬 루프백 인터페이스에서만 연결을 받는 상태입니다.

반면 0.0.0.0:8000 은 모든 IPv4 네트워크 인터페이스에서 연결을 받도록 바인딩된 상태입니다.

예를 들어 FastAPI를 다음과 같이 실행했다면:

uvicorn main:app --host 127.0.0.1 --port 8000

같은 서버 내부에서는 접속할 수 있어도 다른 PC에서 서버 IP를 이용해 직접 접속하는 것은 되지 않습니다.

외부 인터페이스에서도 연결을 받도록 하려면 환경에 따라 다음과 같이 실행할 수 있습니다.

uvicorn main:app --host 0.0.0.0 --port 8000
TIP
0.0.0.0으로 바인딩했다고 해서 외부 접속이 자동으로 허용되는 것은 아닙니다. 서버 방화벽, 클라우드 보안그룹, Docker 포트 매핑, 네트워크 정책도 함께 확인해야 합니다.




8. 포트는 열려 있는데 접속이 안 될 때 확인 순서

여기부터는 실제 문제 해결에서 중요합니다.

포트가 LISTEN 상태인데도 접속되지 않는다면 무작정 설정을 변경하기보다 안쪽에서 바깥쪽으로 하나씩 확인하는 방법이 편합니다.

① 프로세스 확인

ps -ef | grep 프로세스명

② LISTEN 포트 확인

sudo ss -lntp | grep ':8000'

③ 바인딩 주소 확인

결과에서 다음 부분을 확인합니다.

127.0.0.1:8000

또는

0.0.0.0:8000

④ 서버 내부에서 직접 요청

HTTP 서비스라면 curl 을 이용해 확인할 수 있습니다.

curl http://127.0.0.1:8000

내부 요청은 정상인데 외부에서 접속되지 않는다면 애플리케이션 자체보다 바인딩 주소, 방화벽 또는 네트워크 영역을 확인할 필요가 있습니다.

⑤ 방화벽 확인

Ubuntu에서 UFW를 사용한다면:

sudo ufw status

⑥ Docker를 사용한다면 포트 매핑 확인

docker ps

PORTS 부분에 다음과 같은 형태가 있는지 확인합니다.

0.0.0.0:8000->8000/tcp

컨테이너 내부에서 서비스가 정상적으로 실행되고 있어도 Docker의 포트가 호스트에 제대로 매핑되지 않았다면 외부에서 접근할 수 없습니다.





9. Linux 포트 확인 명령어 한 번에 정리

마지막으로 개발하면서 다시 찾아보기 쉽도록 자주 사용하는 Linux 포트 확인 명령어를 정리해보겠습니다.

전체 LISTEN 포트 확인
sudo ss -lntp
특정 포트 확인
sudo ss -lntp | grep ':8000'
특정 포트를 사용하는 프로세스 확인
sudo lsof -i :8000
PID로 프로세스 확인
ps -fp 12345
프로세스 종료
kill 12345
프로세스 강제 종료
kill -9 12345
netstat으로 포트 확인
sudo netstat -lntp
서버 내부에서 HTTP 응답 확인
curl http://127.0.0.1:8000



마무리

Linux에서 포트 확인 방법이 갑자기 기억나지 않는다면 우선 다음 명령어부터 사용하면 됩니다.

sudo ss -lntp

특정 포트만 찾고 싶다면:

sudo ss -lntp | grep ':포트번호'

어떤 프로세스가 해당 포트를 사용하는지 찾고 싶다면:

sudo lsof -i :포트번호
Linux 포트 문제 확인 순서

프로세스 실행 여부 → LISTEN 포트 → 바인딩 주소 → 로컬 통신 → 방화벽 → 외부 네트워크

실제 서버 장애를 확인할 때는 단순히 "포트가 열려 있다/닫혀 있다"만 확인하지 않는 것이 중요합니다.

위 순서로 확인하면 어느 구간에서 문제가 발생했는지 훨씬 빠르게 좁힐 수 있습니다.

다음 글에서는 포트 문제와 함께 자주 발생하는 Connection Refused 오류의 원인과 해결 방법 을 정리해보겠습니다.

Post a Comment

다음 이전