본문 바로가기
IT

[리눅스 기초 #25] "이 포트 누가 쓰고 있어?" : netstat와 ss로 네트워크 통로 감시하기

by sunyjiny 2026. 2. 3.
반응형

리눅스 기초 시리즈의 25번째 주제에 오신 것을 환영합니다! 지난 시간에는 자동화의 심장인 crontab을 배웠습니다. 이제 우리는 파일 시스템과 자동화를 넘어, 리눅스 서버가 외부 세상과 소통하는 통로인 **'네트워크(Network)'**를 들여다볼 차례입니다.

개발을 하다 보면 가장 짜증 나는 순간 중 하나가 바로 "Address already in use (이미 사용 중인 주소)" 에러를 만날 때입니다. 분명히 프로그램을 껐는데, 포트는 여전히 누군가 점유하고 있어 새 서버를 띄울 수 없는 상황이죠. 오늘은 내 서버의 열린 문(Port)을 감시하고 범인을 찾아내는 두 자루의 돋보기, **netstat**와 ss 활용기를 공유합니다.


1. 나의 경험담: "유령 포트와의 전쟁"

최근 Flutter 웹 프로젝트를 로컬 리눅스 환경에서 테스트하고 있었습니다. 포트 8080에서 서버를 돌리다가 코드를 수정하고 다시 실행했는데, 갑자기 포트가 사용 중이라며 실행이 거부되었습니다.

터미널을 다 뒤져봐도 실행 중인 프로세스는 없었죠. 윈도우였다면 "컴퓨터 껐다 켜기"라는 최후의 수단을 썼겠지만, 이제 저는 리눅스 사용자입니다. 저는 침착하게 오늘 소개할 명령어를 입력했고, 백그라운드에서 죽지 않고 좀비처럼 살아있던 프로세스를 단 3초 만에 찾아내 '처단'할 수 있었습니다. 네트워크의 흐름을 볼 줄 안다는 것이 얼마나 큰 무기인지 실감한 순간이었습니다.


2. netstat: 클래식한 네트워크 탐지기

**netstat (Network Statistics)**는 리눅스 네트워크 모니터링의 조상님 격인 명령어입니다. 현재 내 컴퓨터에 연결된 모든 네트워크 연결 상태, 라우팅 테이블, 인터페이스 통계 등을 보여줍니다.

실험 코드: 열려 있는 포트 싹 다 보기

가장 많이 쓰이는 옵션 조합인 -tuln을 기억하세요.

Bash
 
# -t: TCP, -u: UDP, -l: Listening(대기 중), -n: 숫자로 표시(도메인 대신 IP)
netstat -tuln

결과 해석:

  • Local Address: 0.0.0.0:80이라면 외부의 모든 IP로부터 80번 포트 접속을 기다리고 있다는 뜻입니다.
  • State: LISTEN은 현재 연결을 기다리고 있는 '열린 문' 상태임을 의미합니다.

3. ss: 더 빠르고 똑똑한 차세대 수사관

최근 리눅스 배포판에서는 netstat 대신 **ss (Socket Statistics)**를 권장합니다. ss는 netstat보다 훨씬 빠르고 더 상세한 정보를 제공합니다. 특히 서버에 연결이 수만 개씩 몰리는 상황에서 ss의 진가가 드러납니다.

실험 코드: 프로세스 정보까지 한눈에 보기

-antp 조합을 사용하면 어떤 프로그램이 포트를 쓰고 있는지까지 알려줍니다.

Bash
 
# -a: 모두, -n: 숫자 표시, -t: TCP, -p: 프로세스 정보(PID/이름) 표시
sudo ss -antp

4. 실전 필살기: "8080 포트 점유자 검거하기"

에러 메시지 Address already in use: 8080을 만났을 때 사용하는 범인 검거 프로세스입니다.

검거 코드:

Bash
 
# 1. 8080 포트를 사용하는 프로세스 ID(PID) 찾기
# (sudo를 붙여야 다른 사용자의 프로세스 이름까지 보입니다)
sudo ss -tlnp | grep :8080

# 출력 예시:
# LISTEN 0 128 *:8080 *:* users:(("node",pid=1234,fd=18))

# 2. 범인(PID: 1234) 확인 후 종료하기 (주제 #16 복습!)
sudo kill -9 1234

(▲ Action: 포트를 점유하던 프로세스를 정확히 찾아 종료하고 나면, 다시 평화롭게 서버를 실행할 수 있습니다. grep과의 조합은 여기서도 빛을 발합니다.)


5. netstat vs ss 비교 가이드

두 명령어는 비슷해 보이지만 쓰임새가 약간 다릅니다.

비교 항목 netstat ss
속도 보통 (연결이 많으면 느려짐) 매우 빠름 (커널에서 직접 정보 호출)
권장 여부 구형 시스템/습관적 사용 최신 리눅스 표준
정보 상세도 요약 정보 위주 TCP 상태 등 매우 상세한 정보 제공
비유 돋보기 고해상도 현미경

6. 마치며: 서버의 문단속은 개발자의 기본

리눅스 기초 25단계를 거치며 우리는 이제 시스템의 내부 연산뿐만 아니라, 외부와 소통하는 통로까지 통제할 수 있게 되었습니다. 네트워크 포트를 관리하는 것은 단순히 에러를 해결하는 것을 넘어, 보안의 첫걸음이기도 합니다. 내가 열지 않은 낯선 포트가 LISTEN 상태라면 즉시 조사해야 하니까요.

오늘의 인사이트: "내 서버가 어디로 소통하고 있는지 모르는 것은, 내 집 문을 열어두고 누가 들어오는지 모르는 것과 같다."


25번째 이야기를 마칩니다. 이제 여러분은 네트워크 트러블슈팅의 전문가로 한 발짝 더 다가섰습니다. 다음 시간에는 이렇게 열려 있는 네트워크 통로를 지키는 파수꾼, **'방화벽(UFW) 설정으로 내 서버 보안 강화하기'**에 대해 다뤄보겠습니다.

오늘 확인한 포트 목록 중에 낯선 번호가 있어서 당황하셨나요? 그 포트가 어떤 서비스인지 구글링하기 전에 서비스 이름을 바로 확인하는 grep -w 포트번호 /etc/services 팁을 다음 포스팅에서 알려드릴까요?

반응형