본문 바로가기

트러블슈팅 방법론

물리 계층부터 애플리케이션까지 연결 실패를 단계적으로 분리하고 증상·오류별 체크리스트로 원인을 좁힙니다.

서버에 접속이 안 됩니다.

개발자가 가장 자주 듣는 말 중 하나입니다.

하지만 접속이 안 되는 이유는 수십 가지입니다.

DNS가 안 풀리는 건지, TCP 연결이 안 되는 건지, 연결은 되지만 응답이 안 오는 건지, 응답은 오지만 에러인 건지.

계층별로 체계적으로 진단하는 방법을 알아야 원인을 빠르게 찾을 수 있습니다.

이름 해석·연결·TLS·HTTP를 나누어 증거를 모읍니다

DNS 응답의 주소와 관측 시각을 확인합니다. 성공 경로에서 응답 코드·출처·요청 ID를 모읍니다. 각 단계의 값과 전환 이유를 비교합니다.

진단 · 성공한 경계와 실패한 경계

이름 해석·연결·TLS·HTTP를 나누어 증거를 모읍니다

새 HTTPS/TCP 연결의 단순 조사 순서입니다. 이미 확보한 증거가 있으면 그 경계부터 시작하며, ping 성공 하나로 다른 프로토콜이나 서비스의 정상 상태를 판정하지 않습니다.

TCP 연결 성공 뒤에도 TLS 인증과 HTTP 응답을 나누어 본다새직접HTTPS/TCP연결사례의다섯노드네간선. 이미DNS주소와TCP443연결을확인한뒤TLS인증통과여부를분기한다. 실패면HTTP응답은미확인이고성공이면HTTP코드/응답출처/요청ID를관측한다. TLS통과가API성공을뜻하지않고모든장애를이한분기로열거하지않는다. 원steps는각경계의증거와한계를유지한다. 모바일예경로는TLS실패노드를통과하지않는다.DNS 주소 확보대상 TCP 443 연결TLS 서버 인증통과했는가?검증 실패 지점 기록HTTP 응답 미확인HTTP 응답 관측코드 · 출처 · 요청 ID아니요예
TCP 연결 성공 뒤에도 TLS 인증과 HTTP 응답을 나누어 본다새직접HTTPS/TCP연결사례의다섯노드네간선. 이미DNS주소와TCP443연결을확인한뒤TLS인증통과여부를분기한다. 실패면HTTP응답은미확인이고성공이면HTTP코드/응답출처/요청ID를관측한다. TLS통과가API성공을뜻하지않고모든장애를이한분기로열거하지않는다. 원steps는각경계의증거와한계를유지한다. 모바일예경로는TLS실패노드를통과하지않는다.DNS 주소 확보대상 TCP 443 연결TLS 서버 인증통과?검증 실패 지점 기록HTTP 응답 미확인HTTP 응답 관측코드 · 출처요청 ID아니요예
  1. DNS · 사용할 주소를 얻었는가

    관측: 응답 코드·주소·조회 서버와 시각을 기록합니다.

    한계: 주소를 얻어도 포트 연결과 HTTP 성공은 별도입니다.

  2. TCP · 해당 주소·포트에 연결했는가

    관측: 연결 성공·거부·시간 초과를 구분합니다.

    다음 확인: 리스너·바인딩·정책·양방향 경로를 대조합니다.

  3. TLS · 서버 인증과 협상을 마쳤는가

    관측: 접속 이름·인증서 검증·협상 오류를 기록합니다.

    한계: TLS 성공도 API의 처리 완료를 보장하지 않습니다.

  4. HTTP · 어떤 응답을 받았는가

    관측: 코드·헤더·내용·요청 ID와 첫 바이트 시간을 기록합니다.

    대조: 프록시·서버·의존 서비스의 같은 시각 로그를 잇습니다.

관측을 모으는 순서이며 자동 원인 판정기가 아닙니다. 캐시·연결 재사용·프록시·QUIC은 경로를 따로 해석합니다. 무응답이나 로그 부재만으로 특정 장비·방화벽·CPU를 원인으로 단정하지 않습니다.

이 예의 조건

  • 본문과 전체 도표의 예를 따라 주소 확보부터 HTTP 관측까지 진행합니다.
관계도의 보충 설명
전체 도표의 표기·관계·조건
구분전체 도표의 내용
관계 설명새 직접 HTTPS/TCP 연결 사례의 다섯 노드와 네 간선입니다. 이미 DNS 주소와 TCP 443 연결을 확인한 뒤 TLS 인증 통과 여부로 분기합니다. 실패하면 HTTP 응답은 미확인이고 성공하면 HTTP 코드/응답 출처/요청 ID를 관측합니다. TLS 통과가 API 성공을 뜻하지 않으며 모든 장애를 이 한 분기로 열거하지 않습니다. 각 단계는 각 경계의 증거와 한계를 유지합니다. 모바일 예 경로는 TLS 실패 노드를 통과하지 않습니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
주소 확보

DNS 응답의 주소와 관측 시각을 확인합니다.

  • 진단 증거 1: DNS usable address
  • 사용할 주소 확보; 포트와 HTTP 성공은 아직 미확인
TCP 연결

해당 주소의 443 포트 연결을 확인합니다.

  • 진단 증거 1: TCP connected
  • TCP 연결 증거 확보; TLS·인증·업무 결과는 별도
TLS 확인

서버 인증과 TLS 협상을 판정합니다.

  • 진단 증거 1: pass→HTTP 조사
  • 진단 증거 2: fail→검증지점 기록
  • 실패는 검증 지점에 기록; 성공한 경우 HTTP 조사로 진행
HTTP 관측

성공 경로에서 응답 코드·출처·요청 ID를 모읍니다.

  • 진단 증거 1: code/출처/request ID
  • TLS 성공만으로 API 완료를 확정하지 않음; 캐시·프록시·QUIC 경로 별도

이름 해석·연결·TLS·HTTP를 나누어 증거를 모읍니다

DNS 응답의 주소와 관측 시각을 확인합니다. 성공 경로에서 응답 코드·출처·요청 ID를 모읍니다. 각 단계의 값과 전환 이유를 비교합니다.

진단 · 성공한 경계와 실패한 경계

이름 해석·연결·TLS·HTTP를 나누어 증거를 모읍니다

새 HTTPS/TCP 연결의 단순 조사 순서입니다. 이미 확보한 증거가 있으면 그 경계부터 시작하며, ping 성공 하나로 다른 프로토콜이나 서비스의 정상 상태를 판정하지 않습니다.

TCP 연결 성공 뒤에도 TLS 인증과 HTTP 응답을 나누어 본다새직접HTTPS/TCP연결사례의다섯노드네간선. 이미DNS주소와TCP443연결을확인한뒤TLS인증통과여부를분기한다. 실패면HTTP응답은미확인이고성공이면HTTP코드/응답출처/요청ID를관측한다. TLS통과가API성공을뜻하지않고모든장애를이한분기로열거하지않는다. 원steps는각경계의증거와한계를유지한다. 모바일예경로는TLS실패노드를통과하지않는다.DNS 주소 확보대상 TCP 443 연결TLS 서버 인증통과했는가?검증 실패 지점 기록HTTP 응답 미확인HTTP 응답 관측코드 · 출처 · 요청 ID아니요예
TCP 연결 성공 뒤에도 TLS 인증과 HTTP 응답을 나누어 본다새직접HTTPS/TCP연결사례의다섯노드네간선. 이미DNS주소와TCP443연결을확인한뒤TLS인증통과여부를분기한다. 실패면HTTP응답은미확인이고성공이면HTTP코드/응답출처/요청ID를관측한다. TLS통과가API성공을뜻하지않고모든장애를이한분기로열거하지않는다. 원steps는각경계의증거와한계를유지한다. 모바일예경로는TLS실패노드를통과하지않는다.DNS 주소 확보대상 TCP 443 연결TLS 서버 인증통과?검증 실패 지점 기록HTTP 응답 미확인HTTP 응답 관측코드 · 출처요청 ID아니요예
  1. DNS · 사용할 주소를 얻었는가

    관측: 응답 코드·주소·조회 서버와 시각을 기록합니다.

    한계: 주소를 얻어도 포트 연결과 HTTP 성공은 별도입니다.

  2. TCP · 해당 주소·포트에 연결했는가

    관측: 연결 성공·거부·시간 초과를 구분합니다.

    다음 확인: 리스너·바인딩·정책·양방향 경로를 대조합니다.

  3. TLS · 서버 인증과 협상을 마쳤는가

    관측: 접속 이름·인증서 검증·협상 오류를 기록합니다.

    한계: TLS 성공도 API의 처리 완료를 보장하지 않습니다.

  4. HTTP · 어떤 응답을 받았는가

    관측: 코드·헤더·내용·요청 ID와 첫 바이트 시간을 기록합니다.

    대조: 프록시·서버·의존 서비스의 같은 시각 로그를 잇습니다.

관측을 모으는 순서이며 자동 원인 판정기가 아닙니다. 캐시·연결 재사용·프록시·QUIC은 경로를 따로 해석합니다. 무응답이나 로그 부재만으로 특정 장비·방화벽·CPU를 원인으로 단정하지 않습니다.

이 예의 조건

  • 본문과 전체 도표의 예를 따라 주소 확보부터 HTTP 관측까지 진행합니다.

관계도의 보충 설명

전체 도표의 표기·관계·조건
구분전체 도표의 내용
관계 설명새 직접 HTTPS/TCP 연결 사례의 다섯 노드와 네 간선입니다. 이미 DNS 주소와 TCP 443 연결을 확인한 뒤 TLS 인증 통과 여부로 분기합니다. 실패하면 HTTP 응답은 미확인이고 성공하면 HTTP 코드/응답 출처/요청 ID를 관측합니다. TLS 통과가 API 성공을 뜻하지 않으며 모든 장애를 이 한 분기로 열거하지 않습니다. 각 단계는 각 경계의 증거와 한계를 유지합니다. 모바일 예 경로는 TLS 실패 노드를 통과하지 않습니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
주소 확보

DNS 응답의 주소와 관측 시각을 확인합니다.

  • 진단 증거 1: DNS usable address
  • 사용할 주소 확보; 포트와 HTTP 성공은 아직 미확인
TCP 연결

해당 주소의 443 포트 연결을 확인합니다.

  • 진단 증거 1: TCP connected
  • TCP 연결 증거 확보; TLS·인증·업무 결과는 별도
TLS 확인

서버 인증과 TLS 협상을 판정합니다.

  • 진단 증거 1: pass→HTTP 조사
  • 진단 증거 2: fail→검증지점 기록
  • 실패는 검증 지점에 기록; 성공한 경우 HTTP 조사로 진행
HTTP 관측

성공 경로에서 응답 코드·출처·요청 ID를 모읍니다.

  • 진단 증거 1: code/출처/request ID
  • TLS 성공만으로 API 완료를 확정하지 않음; 캐시·프록시·QUIC 경로 별도

계층별 진단 접근법

범위가 불분명하면 아래 계층부터 위로 좁히는 접근이 유용합니다. 이미 확보한 증거가 있으면 해당 경계부터 시작할 수 있습니다. 아래 흐름의 체크 표시는 조사 순서이지 ping 하나로 하위 계층 전체가 정상임을 증명한다는 뜻은 아닙니다.

계층별 진단 흐름
[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 요청을 보내고 응답을 확인합니다.

상태 코드, 헤더, 바디를 검사합니다.

HTTPS에서는 TCP 연결 뒤 TLS 협상·서버 인증도 따로 확인합니다. 주소·포트 연결이 성공했어도 인증서 검증에서 멈추면 아직 그 연결로 HTTP 응답을 읽은 것은 아닙니다. 프록시가 있다면 클라이언트→프록시와 프록시→원본의 연결도 구분합니다.

확보한 증거로 실패 경계 고르기 A는 새 직접 HTTPS/TCP 연결에서 DNS 주소를 받고 대상 443 포트 연결도 성공했지만 인증서 검증 오류가 나며 HTTP 응답은 없습니다. B는 프록시가 HTTP 503을 반환했고 해당 요청 ID의 프록시 로그에는 정상 백엔드 대상 0개라고 남았습니다. 두 경우 어느 경계까지 확인했으며, 아직 단정할 수 없는 것은 무엇인가요?

관측 발생지와 미확인 경계를 나누는 풀이

A는 그 주소·포트의 TCP 연결까지 확인했지만 TLS 서버 인증을 통과하지 못했습니다. HTTP 코드 000만으로는 원인을 알 수 없으나 이 조건에서는 인증서 검증 오류라는 별도 증거가 있습니다. 접속 이름·신뢰 체인·인증서 유효 시각을 대조할 수 있고, API가 정상 또는 비정상이라고는 아직 판단하지 않습니다.

B는 클라이언트가 프록시의 HTTP 응답을 받은 것이며, 프록시가 선택할 정상 대상이 없다는 로그를 확보했습니다. 모든 원본 서버의 프로세스가 죽었다고 단정하지 말고 대상 등록·건강 검사 조건과 결과를 대조해야 합니다. ICMP가 실패했다는 증거로 DNS나 HTTP 결과를 덮어 판단하지도 않습니다. 이 두 입력은 가정 사례이며 대상에 진단 요청을 실제로 보내지 않았습니다.


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

troubleshoot.sh
#!/bin/bash
# Linux 계열 도구를 사용하는 관측 체크리스트 (대상은 HTTPS 서비스)
TARGET=${1:-"example.com"}
PORT=${2:-443}

echo "=== 1. 외부 ICMP 응답 확인 ==="
ping -c 2 8.8.8.8 && echo "[OK] 해당 대상의 ICMP 응답" || echo "[WARN] ICMP 응답 미확인"

echo ""
echo "=== 2. DNS 확인 ==="
nslookup "$TARGET" && echo "[OK] 조회 명령 성공" || echo "[FAIL] 조회 명령 실패"

echo ""
echo "=== 3. 대상 서버 PING ==="
ping -c 2 "$TARGET" && echo "[OK] PING 응답" || echo "[WARN] 응답 미확인(차단/손실/경로/호스트 상태 확인)"

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:$PORT" 2>/dev/null)
echo "HTTP 상태 코드: $STATUS"

echo ""
echo "=== 6. 경로 추적 ==="
traceroute -m 10 "$TARGET" 2>/dev/null || tracert "$TARGET" 2>/dev/null

이 스크립트는 관측을 모으는 예제이며 자동 원인 판정기가 아닙니다. ICMP 응답 여부는 HTTPS 가용성과 다르고, nslookup 실패도 응답 코드·서버·경로를 추가로 확인해야 합니다. PORT에는 HTTPS 서비스 포트를 넣습니다. curl의 000은 유효한 HTTP 응답 코드가 아니며, 예시는 curl 종료 코드와 오류 출력을 보존하지 않고 전체 시간 제한도 두지 않습니다.


에러별 원인 진단표

관측다음 확인과 가능한 원인
ICMP 무응답ip addr·라우트·대상 정책을 확인합니다. ICMP 차단·손실·호스트 상태 등이며 인터넷 전체 장애로 단정하지 않습니다.
DNS 조회 실패응답 코드, 사용한 DNS 서버와 /etc/resolv.conf, 질의 경로를 비교합니다. 곧바로 DNS 서버를 바꾸지 않습니다.
포트 연결 실패리스너·주소 바인딩·보안 그룹·방화벽·반환 경로를 확인합니다. ping 성공이 해당 포트의 성공을 보장하지 않습니다.
연결 거부Connection refused는 대상 또는 중간 장비의 거부 단서입니다. ss -tlnp와 양쪽 캡처로 리스너·거부 규칙을 구분합니다.
시간 초과Connection timed out은 기한 내 완료하지 못했다는 뜻입니다. DROP·라우팅·호스트 무응답·반환 경로 등을 비교합니다.
502 응답프록시가 유효한 상위 응답을 얻지 못한 경우입니다. 연결 실패·리셋·잘못된 응답 등을 프록시 로그에서 구분합니다.
503 응답과부하·점검·정상 대상 부재 등 서비스의 일시적 처리 불가 사유를 확인합니다.
간헐적 지연손실·재전송 외에 서버 대기열·DB·런타임 지연도 같은 시간대 로그와 대조합니다.

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

장애 상황에서는 먼저 네트워크 문제인지 애플리케이션 문제인지 구분해야 합니다.

관측 지점서로 대조할 정보
클라이언트목적지·시각·HTTP 요청 ID, DNS·연결·첫 바이트 시간을 기록합니다.
프록시·LB받은 요청과 백엔드 선택·연결·응답 시간, 실패 원인을 같은 ID로 잇습니다.
서버요청 도착 여부·애플리케이션 로그·의존 서비스 시간을 확인합니다. 로그 부재만으로 패킷 미도착을 단정하지 않습니다.

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