14장 : 네트워크 트러블슈팅
트러블슈팅 방법론
서버에 접속이 안 됩니다. 개발자가 가장 자주 듣는 말 중 하나입니다. 하지만 접속이 안 된다의 원인은 수십 가지입니다. DNS가 안 풀리는 건지, TCP 연결이 안 되는 건지, 연결은 되지만 응답이 안 오는 건지, 응답은 오지만 에러인 건지. 계층별로 체계적으로 진단하는 방법을 알아야 원인을 빠르게 찾을 수 있습니다.
계층별 진단 접근법
네트워크 문제는 아래 계층부터 위로 진단하는 것이 원칙입니다.
[L1 물리] 케이블? Wi-Fi? NIC?
│ ✓
▼
[L2 링크] 인터페이스 활성? ARP?
│ ✓
▼
[L3 네트워크] IP 할당? 게이트웨이 ping? 라우팅?
│ ✓ 도구: ping, traceroute, ip route
▼
[L4 전송] 포트 열림? 방화벽? TCP 연결?
│ ✓ 도구: telnet, nc, ss
▼
[L7 애플리케이션] HTTP 응답? 상태 코드? 내용?
도구: curl, wget1계층 — 물리적 연결: 케이블이 빠져 있거나, 무선 신호가 약하거나, NIC가 비활성화되어 있지 않은지 확인합니다.
2계층 — 링크: 네트워크 인터페이스가 활성화되어 있는지, ARP 테이블에 게이트웨이의 MAC 주소가 있는지 확인합니다. arp -a로 확인할 수 있습니다.
3계층 — 네트워크: IP 주소가 올바르게 할당되었는지, 게이트웨이에 핑이 되는지, 목적지까지 라우팅이 가능한지 확인합니다.
4계층 — 전송: 목적지의 특정 포트에 TCP 연결이 되는지 확인합니다. 포트가 열려 있는지, 방화벽이 차단하고 있지 않은지 검사합니다.
7계층 — 애플리케이션: HTTP 요청을 보내고 응답을 확인합니다. 상태 코드, 헤더, 바디를 검사합니다.
통신이 안 될 때의 체크리스트
#!/bin/bash
# 네트워크 트러블슈팅 체크리스트 스크립트
TARGET=${1:-"example.com"}
PORT=${2:-443}
echo "=== 1. 인터넷 연결 확인 ==="
ping -c 2 8.8.8.8 && echo "[OK] 인터넷 연결" || echo "[FAIL] 인터넷 불가"
echo ""
echo "=== 2. DNS 확인 ==="
nslookup "$TARGET" && echo "[OK] DNS 정상" || echo "[FAIL] DNS 실패"
echo ""
echo "=== 3. 대상 서버 PING ==="
ping -c 2 "$TARGET" && echo "[OK] PING 응답" || echo "[WARN] PING 차단 가능"
echo ""
echo "=== 4. 포트 연결 확인 ==="
nc -z -w 3 "$TARGET" "$PORT" && echo "[OK] 포트 $PORT 열림" || echo "[FAIL] 포트 $PORT 닫힘"
echo ""
echo "=== 5. HTTP 응답 확인 ==="
STATUS=$(curl -s -o /dev/null -w "%{http_code}" "https://$TARGET" 2>/dev/null)
echo "HTTP 상태 코드: $STATUS"
echo ""
echo "=== 6. 경로 추적 ==="
traceroute -m 10 "$TARGET" 2>/dev/null || tracert "$TARGET" 2>/dev/null에러별 원인 진단표
| 증상 | 가능한 원인 | 확인 명령 | 해결 방향 |
|---|---|---|---|
ping 8.8.8.8 실패 | 인터넷 연결 자체 문제 | ip addr, ifconfig | NIC, 케이블, DHCP 확인 |
ping OK, DNS 실패 | DNS 서버 문제 | cat /etc/resolv.conf | DNS 서버 변경 |
ping OK, 포트 연결 실패 | 방화벽 차단 | iptables -L, 보안그룹 | 방화벽 규칙 추가 |
Connection refused | 프로세스 미실행 | ss -tlnp | 서비스 재시작 |
Connection timed out | 방화벽 DROP | tcpdump port 포트 | 방화벽 규칙 확인 |
502 Bad Gateway | 백엔드 연결 실패 | 프록시 로그 확인 | 백엔드 상태 확인 |
503 Service Unavailable | 서버 과부하/점검 | 서버 리소스 확인 | 스케일아웃, 재시작 |
| 간헐적 느림 | 패킷 유실, 재전송 | mtr 대상IP | 네트워크 경로 점검 |
네트워크 문제 vs 애플리케이션 문제
장애 상황에서 가장 먼저 구분해야 할 것은 네트워크 문제인가, 애플리케이션 문제인가입니다.
네트워크 문제 애플리케이션 문제
──────────────────────── ────────────────────────
* ping 실패 / 패킷 유실 * TCP 연결 OK, 응답 없음
* 모든 서비스 동시 영향 * 특정 URL/API만 문제
* 지연 시간 비정상 (>100ms 내부) * 에러 로그에 앱 에러
* traceroute 특정 홉에서 끊김 * CPU/메모리 비정상
* 특정 네트워크 경로에서만 발생 * 특정 요청 패턴에서만 발생
→ 인프라팀 협력 → 개발팀 협력다음 절에서는 이 진단 과정에서 사용하는 핵심 도구들의 실제 사용법을 다루겠습니다.