Part 4의 ps 로 애플리케이션이 실제로 실행 중인지 봅니다. 안 떠 있으면 네트워크를 볼 필요가 없습니다.
이 파트에서 다루는 내용
연결 문제는 가까운 곳부터 확인합니다
서버가 안 붙는다는 신고는 원인이 여러 층에 걸쳐 있습니다. 서버 자체가 안 떴을 수도, 포트가 안 열렸을 수도, 방화벽이 막았을 수도, 주소 해석이 안 됐을 수도 있습니다.
무작정 여기저기 보지 말고 가까운 곳부터 한 층씩 확인하면 원인이 빠르게 좁혀집니다. 내 쪽에서 시작해 상대 쪽으로 나아갑니다.
프로세스가 떠 있어도 포트를 안 잡고 있으면 접속이 안 됩니다. 서버가 해당 포트를 듣고 있는지 확인합니다.
서버 자기 자신에서 접속이 되는지 봅니다. 되면 애플리케이션은 정상이고 문제는 바깥 경로에 있습니다.
로컬은 되는데 바깥에서 안 되면 방화벽이나 네트워크 경로 문제입니다. 범위가 확 좁혀집니다.
안 붙는다는 한 문장을 층으로 나누면 진단이 쉬워집니다. 서버가 떴는지, 포트를 잡았는지, 로컬에서 붙는지, 바깥에서 붙는지를 순서대로 물으면 어느 층에서 끊겼는지 드러납니다.
포트가 열려 있는지 확인합니다
프로세스가 떠 있어도 포트를 듣고 있지 않으면 접속이 안 됩니다. 어떤 프로세스가 어떤 포트를 잡고 있는지 확인하는 것이 핵심입니다.
포트 충돌도 흔합니다. 다른 프로세스가 이미 그 포트를 쓰고 있어 애플리케이션이 못 뜨는 경우입니다.
서버가 포트를 열고 접속을 기다리는 상태입니다. 목록에 내 포트가 LISTEN 으로 없으면 애플리케이션이 그 포트를 안 잡은 것입니다.
Spring Boot 코스에서 다룬 Port already in use 가 이 경우입니다. ss 로 누가 그 포트를 쓰는지 찾아 정리하거나 포트를 바꿉니다.
127.0.0.1 로 열려 있으면 서버 자신만 접속 가능하고 바깥에서는 안 됩니다. 0.0.0.0 이어야 외부에서 붙습니다. 로컬은 되는데 바깥이 안 될 때 확인할 지점입니다.
ss -tlnp듣고 있는(LISTEN) 포트와 프로세스 확인ss -tlnp | grep 8080특정 포트를 누가 잡고 있는지 확인netstat -tlnpss 가 없는 예전 서버에서 같은 용도lsof -i :8080특정 포트를 쓰는 프로세스 상세 확인연결과 응답을 직접 테스트합니다
포트가 열렸으면 실제로 붙는지 확인합니다. 단순 연결이 되는지, 애플리케이션이 제대로 응답하는지를 나눠서 봅니다.
상대 서버까지 아예 닿지 않는 것입니다. 다만 보안상 ping 을 막아 둔 서버도 많아, ping 실패만으로 단정하지 않습니다.
연결은 되는데 응답이 이상하면 애플리케이션 문제입니다. 상태 코드로 구분합니다. 응답 자체가 없으면 연결이나 방화벽, 있으면 애플리케이션을 봅니다.
- Connection refused: 포트가 닫혀 있음. 서버 미기동이나 포트 문제
- timeout: 응답이 없음. 방화벽이 조용히 막았을 가능성
- 이 둘의 차이가 원인을 크게 좁힙니다
ping example.com상대 서버까지 네트워크가 닿는지 확인curl http://localhost:8080/health실제 HTTP 응답 확인. API 코스와 연계curl -v http://localhost:8080연결 과정과 헤더까지 자세히 표시curl -I http://localhost:8080응답 헤더와 상태 코드만 확인nc -zv localhost 8080포트에 연결만 시도해 열림 여부 확인주소가 제대로 풀리는지 확인합니다
도메인 주소로 접속할 때는 그 이름이 올바른 IP로 변환돼야 합니다. 이 변환(DNS)이 잘못되면 엉뚱한 곳으로 가거나 아예 못 찾습니다.
폐쇄망에서는 사내 DNS나 hosts 파일로 주소를 관리하는 경우가 많아, 이 부분에서 문제가 자주 생깁니다.
/etc/hosts 에 적힌 주소는 DNS보다 먼저 적용됩니다. 예전에 넣어 둔 잘못된 매핑이 남아 엉뚱한 서버로 가는 경우가 있습니다. 접속이 이상하면 이 파일을 확인합니다.
nslookup 은 정상인데 접속이 안 되면 이름 해석은 문제가 아닙니다. 포트나 방화벽으로 넘어가 확인합니다.
폐쇄망은 외부 DNS를 못 쓰고 사내 서버를 씁니다. 이 설정이 빠지거나 바뀌면 사내 주소를 못 찾습니다. 환경 설정을 먼저 확인합니다.
nslookup api.example.com도메인이 어떤 IP로 풀리는지 확인dig api.example.com이름 해석 과정을 더 자세히 확인cat /etc/hosts수동으로 지정된 주소 매핑 확인getent hosts api.example.com시스템이 실제로 어떻게 해석하는지 확인네트워크 진단은 계층을 따라 좁히는 일입니다. 서버가 떴나, 포트를 잡았나, 로컬에서 붙나, 이름이 풀리나, 바깥에서 붙나. 각 층을 순서대로 확인하면 어느 지점에서 끊겼는지 반드시 드러납니다. 무작정 재시작하기 전에 어느 층인지부터 찾습니다.