네트워크 트러블슈팅 · HTTP 진단 · 실습
curl 로 HTTP 진단하기
목표
curl 로 상태 코드·헤더·리다이렉트·가상 호스트·타이밍을 뽑아, "느리다"와 "안 된다"를 구간 이름으로 바꾸는 훈련을 합니다.
왜 중요한가
curl -w 의 타이밍 필드는 요청 하나를 이름 해석 / TCP 연결 / TLS / 첫 바이트 / 전체 다섯 구간으로 쪼갭니다. 이 분해가 있으면 "API 가 느려요" 라는 신고를 "TLS 핸드셰이크가 800ms 입니다" 로 바꿀 수 있고, 그 순간 담당 팀과 조치가 정해집니다. --resolve 와 -H 'Host:' 는 배포 전 검증의 필수 도구입니다 — DNS 를 바꾸기 전에 새 서버를 실제 이름으로 시험하고, LB 뒤 백엔드를 직접 두드리면서도 가상 호스트 라우팅은 원래대로 태울 수 있습니다.
단계
1. /root/http 디렉터리를 만들고, /opt/fixtures/nt-http/server.py 를 8088 포트에 백그라운드로 띄우세요. 채점 시점에도 살아 있어야 합니다.
2. http://127.0.0.1:8088/ok 를 상세 모드로 요청해 요청·응답 헤더를 포함한 전체 출력을 /root/http/verbose.txt 로 저장하세요.
3. /ok, /notfound, /teapot, /redirect 네 경로의 상태 코드를 경로 코드 형식으로 한 줄씩 /root/http/status.txt 에 적으세요. (리다이렉트는 따라가지 말 것)
4. /ok 의 응답 헤더만 /root/http/headers.txt 로 저장하세요. X-Labhub-Node 헤더가 포함돼야 합니다.
5. /chain 을 리다이렉트를 따라가며 요청하고, 최종 상태 코드와 리다이렉트 횟수를 code=<코드> redirects=<횟수> 한 줄로 /root/http/redirect.txt 에 적으세요.
6. Host: shop.labhub.local 헤더를 붙여 /whoami 를 요청하고 응답 본문을 /root/http/host.txt 로 저장하세요.
7. --resolve 를 써서 http://shop.labhub.local:8088/ok 를 /etc/hosts 를 건드리지 않고 성공시키고, 그 응답 본문을 /root/http/resolve.txt 로 저장하세요.
8. /root/http/timing.txt 를 다음 4줄로 만드세요. 값은 /slow 경로를 요청해 얻은 실제 측정치입니다.code=<상태코드> / connect=<time_connect> / ttfb=<time_starttransfer> / total=<time_total>/slow 는 1.2초 지연이 있으므로 total 은 1 이상이어야 합니다.
참고
curl -o /dev/null -s -w '%{http_code}\n' <URL>로 코드만 뽑습니다.- 헤더만 보려면
curl -sD - -o /dev/null <URL>이 안전합니다.-I는 HEAD 를 보내므로 서버 구현에 따라 결과가 달라질 수 있습니다. --resolve <이름>:<포트>:<IP>형식입니다.- 흔한 실수 1: 3번에서 리다이렉트를 따라가 버리면
/redirect가 200 으로 나옵니다.-L을 빼세요. - 흔한 실수 2: 2번에서
-v출력은 표준 에러라>만으로는 저장되지 않습니다.
단계 8개
- 진단 서버 띄우기
- 요청과 응답 헤더 전체 보기
- 경로별 상태 코드 표
- 응답 헤더만 뽑기
- 리다이렉트 따라가기
- Host 헤더로 가상 호스트 시험
- DNS 없이 이름으로 접속
- 타이밍 분해와 보고서