icon

안동민 개발노트

14장 : 네트워크 트러블슈팅

트러블슈팅 방법론


서버에 접속이 안 됩니다. 개발자가 가장 자주 듣는 말 중 하나입니다. 하지만 접속이 안 된다의 원인은 수십 가지입니다. DNS가 안 풀리는 건지, TCP 연결이 안 되는 건지, 연결은 되지만 응답이 안 오는 건지, 응답은 오지만 에러인 건지. 계층별로 체계적으로 진단하는 방법을 알아야 원인을 빠르게 찾을 수 있습니다.


계층별 진단 접근법

네트워크 문제는 아래 계층부터 위로 진단하는 것이 원칙입니다.

계층별 진단 흐름
[L1 물리] 케이블? Wi-Fi? NIC?
    │ ✓

[L2 링크] 인터페이스 활성? ARP?
    │ ✓

[L3 네트워크] IP 할당? 게이트웨이 ping? 라우팅?
    │ ✓          도구: ping, traceroute, ip route

[L4 전송] 포트 열림? 방화벽? TCP 연결?
    │ ✓      도구: telnet, nc, ss

[L7 애플리케이션] HTTP 응답? 상태 코드? 내용?
                  도구: curl, wget

1계층 — 물리적 연결: 케이블이 빠져 있거나, 무선 신호가 약하거나, NIC가 비활성화되어 있지 않은지 확인합니다.

2계층 — 링크: 네트워크 인터페이스가 활성화되어 있는지, ARP 테이블에 게이트웨이의 MAC 주소가 있는지 확인합니다. arp -a로 확인할 수 있습니다.

3계층 — 네트워크: IP 주소가 올바르게 할당되었는지, 게이트웨이에 핑이 되는지, 목적지까지 라우팅이 가능한지 확인합니다.

4계층 — 전송: 목적지의 특정 포트에 TCP 연결이 되는지 확인합니다. 포트가 열려 있는지, 방화벽이 차단하고 있지 않은지 검사합니다.

7계층 — 애플리케이션: HTTP 요청을 보내고 응답을 확인합니다. 상태 코드, 헤더, 바디를 검사합니다.


통신이 안 될 때의 체크리스트

troubleshoot.sh
#!/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, ifconfigNIC, 케이블, DHCP 확인
ping OK, DNS 실패DNS 서버 문제cat /etc/resolv.confDNS 서버 변경
ping OK, 포트 연결 실패방화벽 차단iptables -L, 보안그룹방화벽 규칙 추가
Connection refused프로세스 미실행ss -tlnp서비스 재시작
Connection timed out방화벽 DROPtcpdump port 포트방화벽 규칙 확인
502 Bad Gateway백엔드 연결 실패프록시 로그 확인백엔드 상태 확인
503 Service Unavailable서버 과부하/점검서버 리소스 확인스케일아웃, 재시작
간헐적 느림패킷 유실, 재전송mtr 대상IP네트워크 경로 점검

네트워크 문제 vs 애플리케이션 문제

장애 상황에서 가장 먼저 구분해야 할 것은 네트워크 문제인가, 애플리케이션 문제인가입니다.

문제 유형 구분
네트워크 문제                          애플리케이션 문제
────────────────────────           ────────────────────────
* ping 실패 / 패킷 유실              * TCP 연결 OK, 응답 없음
* 모든 서비스 동시 영향              * 특정 URL/API만 문제
* 지연 시간 비정상 (>100ms 내부)     * 에러 로그에 앱 에러
* traceroute 특정 홉에서 끊김        * CPU/메모리 비정상
* 특정 네트워크 경로에서만 발생      * 특정 요청 패턴에서만 발생

→ 인프라팀 협력                      → 개발팀 협력

다음 절에서는 이 진단 과정에서 사용하는 핵심 도구들의 실제 사용법을 다루겠습니다.

목차