우분투 실전 명령어 | nc(netcat)로 포트 연결 테스트
서비스가 살아 있는지 가장 빠르게 확인할 때 nc(netcat)만큼 손에 익혀두기 좋은 도구가 없습니다. 헬스체크가 애매할 때, 방화벽 때문에 막힌 건지 애플리케이션이 안 뜬 건지 구분할 때 특히 유용합니다. 운영 중 장애 초반에 원인 범위를 줄이는 데 바로 써먹을 수 있습니다.
바로 쓰는 명령어
# 1) 특정 호스트/포트 TCP 연결 확인
nc -zv 127.0.0.1 22
# 2) 여러 포트 한 번에 스캔
nc -zv 10.0.1.15 22 80 443 5432
# 3) 타임아웃 지정
nc -zvw 3 db.internal 3306
예시 출력:
$ nc -zv 127.0.0.1 22
Connection to 127.0.0.1 22 port [tcp/ssh] succeeded!
$ nc -zvw 3 db.internal 3306
nc: connect to db.internal port 3306 (tcp) failed: Connection timed out
핵심 옵션/패턴
-z: 데이터 전송 없이 포트 오픈 여부만 검사-v: verbose 출력으로 성공/실패 원인 확인-w <초>: 연결 타임아웃 지정
자동화에서 자주 쓰는 패턴:
# 성공 시 0, 실패 시 1 이상
nc -z -w 2 127.0.0.1 8080 >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "port 8080 OK"
else
echo "port 8080 FAIL"
fi
또는 더 짧게:
nc -z -w 2 127.0.0.1 8080 >/dev/null 2>&1 && echo "UP" || echo "DOWN"
자주 하는 실수
nc -v host port만 쓰고 멈춘 화면을 보고 장애로 오해하는 경우
→ 포트 체크 목적이면-z를 같이 써야 빠르게 끝납니다.- 타임아웃 없이 원격 포트를 점검해서 스크립트가 오래 걸리는 경우
→ 운영 스크립트에는-w 2또는-w 3를 습관적으로 넣는 게 안전합니다. - UDP 점검을 TCP 방식으로 착각하는 경우
→ UDP는-u를 명시해야 합니다.
검증 방법
포트 점검 결과를 ss와 서비스 상태로 교차 확인하면 오판을 줄일 수 있습니다.
# 리스닝 포트 확인
ss -lntp | grep ':8080'
# systemd 서비스 상태 확인
systemctl status myapp --no-pager -l | sed -n '1,12p'
예시 출력:
$ ss -lntp | grep ':8080'
LISTEN 0 4096 0.0.0.0:8080 0.0.0.0:* users:(("myapp",pid=2143,fd=12))
$ systemctl status myapp --no-pager -l | sed -n '1,12p'
● myapp.service - My App API
Loaded: loaded (/etc/systemd/system/myapp.service; enabled)
Active: active (running) since Wed 2026-02-18 21:31:42 KST; 14min ago
운영 팁
운영 환경에서는 nc 단독 결과만 믿지 말고, 애플리케이션 로그(journalctl -u <service>)까지 같이 확인하세요. 포트는 열려 있어도 내부 의존성(DB, Redis, 외부 API) 오류로 실제 요청이 실패하는 케이스가 자주 나옵니다.
출처
- Ubuntu Manpages
- OpenBSD netcat 매뉴얼
- systemd 공식 문서