애플리케이션 코드에는 문제가 없는데도 사용자가 서비스에서 데이터를 정상적으로 받지 못하는 상황이 종종 발생합니다. 대부분의 경우, 이런 문제의 근본 원인은 네트워크 병목 현상으로 인한 것입니다. 네트워크 병목 현상은 전체 시스템 성능에 부정적인 영향을 미치므로, 원인을 정확히 분석하고 신속히 해결하는 것이 중요합니다. 다음과 같은 원인들이 주로 네트워크 병목 현상을 유발합니다.
- 네트워크 대역폭 부족
- 네트워크 토폴로지 구성 문제
- CPU 또는 메모리 사용률 과부하
- 잘못 설정된 네트워크 구성
네트워크 문제가 의심되는 상황에서는 아래와 같은 명령어를 통해 빠르게 진단하고 원인을 분석할 수 있습니다.
4-1. Ping 명령어
사용 예시
// 횟수 4번 제한
$ ping -c 4 google.com결과 예시
$ ping google.com
PING google.com (142.250.206.238): 56 data bytes
64 bytes from 142.250.206.238: icmp_seq=0 ttl=116 time=36.298 ms
64 bytes from 142.250.206.238: icmp_seq=1 ttl=116 time=35.797 ms
64 bytes from 142.250.206.238: icmp_seq=2 ttl=116 time=37.942 ms
64 bytes from 142.250.206.238: icmp_seq=3 ttl=116 time=36.294 ms
64 bytes from 142.250.206.238: icmp_seq=4 ttl=116 time=35.885 ms결과의 응답 시간이 짧고 일정하면 네트워크가 안정적인 상태이며, 응답 시간이 길거나 패킷 손실이 발생할 경우 네트워크 문제를 추가로 조사할 필요가 있습니다.
4-2. Netstat 명령어
사용 예시
// 3000번 포트가 사용중인지 확인
$ netstat -an | grep 3000
tcp46 0 0 *.3000 *.* LISTEN
// tcp Listen 포트가 모두 출력
$ netstat -lnt이 명령어를 통해 서비스가 정상 작동 중인지, 혹은 예상치 못한 연결이 존재하는지를 확인하여 비정상적인 상태를 빠르게 식별할 수 있습니다. 자주 사용하는 옵션은 아래와 같습니다.
- netstat -nap : 연결을 기다리는 목록과 프로그램을 표출합니다.
- netstat -an | grep 포트번호 : 특정 포트가 사용 중인지 확인가능 합니다.
- netstat -nlpt : TCP listening 상태의 포트와 프로그램을 표출합니다.
- netstat -anb : 자세한 라이브러리까지 보여주어 유용성이 커 보이지만 결과를 호출하는 시간이 오래걸려서 아래의 ano를 주로 사용합니다..
- netstat -ano : -anb 대용으로 사용되어서 PID를 표시합니다.
- netstat 명령어 뒤에 3과 같은 숫자를 붙이면 3초에 한 번씩 반복되어 결과를 표출합니다.
4-3. Nslookup 명령어
사용 예시
조회 시 http, https와 같은 프로토콜을 포함하지 않아야 합니다.
nslookup google.com결과 예시
Server: ***.***.***.***
Address: ***.***.***.***#53
Non-authoritative answer:
Name: google.com
Address: 142.250.206.238이 결과는 DNS 서버가 정상적으로 동작하고 있으며 도메인 이름이 올바르게 해석되고 있음을 나타냅니다. 아래와 같이 -type 옵션을 통해 원하는 레코드 타입을 조회 가능합니다.
nslookup -type=[RECORD_TYPE] [DOMAIN]
nslookup -type=mx tistory.com- A 레코드(-type=a) : 도메인 이름을 IPv4 주소로 매핑하는 가장 기본적인 레코드 타입이며, -type 옵션이 생략되었을 때 A 레코드로 조회됩니다. MX 레코드(-type=mx) : 해당 도메인에 대한 메일 교환 서버(Mail eXchanger) 정보를 반환합니다.
- NS 레코드(-type=ns) : 해당 도메인을 관리하는 DNS 서버 정보를 반환합니다.
- TXT 레코드(-type=txt) : 도메인에 대한 설명이나 SPF와 같은 도메인 인증 정보를 텍스트로 반환합니다.
- CNAME 레코드(-type=cname) : 도메인의 별칭을 입력하면 원 도메인 정보를 반환합니다.
4-4. Tracert(Traceroute) 명령어
사용 예시
$ traceroute -I google.com
traceroute to google.com (142.250.206.238), 64 hops max, 72 byte packets
1 myrouter (***.***.***.***) 3.621 ms 3.237 ms 2.973 ms
2 ***.***.***.*** (***.***.***.***) 6.349 ms 3.916 ms *
3 ***.***.***.*** (***.***.***.***) 4.277 ms 4.365 ms 5.378 ms
4 ***.***.***.*** (***.***.***.***) 4.951 ms 4.147 ms 4.650 ms
5 ***.***.***.*** (***.***.***.***) 10.757 ms 21.561 ms 10.925 ms
6 ***.***.***.*** (***.***.***.***) 10.383 ms 11.227 ms 11.848 ms
7 72.14.202.136 (72.14.202.136) 38.670 ms 35.194 ms 35.539 ms
8 209.85.245.105 (209.85.245.105) 35.647 ms 36.431 ms 35.802 ms
9 108.170.248.188 (108.170.248.188) 43.146 ms 34.761 ms 34.591 ms
10 72.14.234.67 (72.14.234.67) 34.843 ms 35.008 ms 37.373 ms
11 142.250.58.92 (142.250.58.92) 38.362 ms 36.649 ms 37.958 ms
12 142.250.57.113 (142.250.57.113) 36.498 ms 37.410 ms 36.457 ms
13 142.250.58.193 (142.250.58.193) 37.762 ms 38.512 ms 36.785 ms
14 kix06s10-in-f14.1e100.net (142.250.206.238) 36.435 ms 37.261 ms 38.782 ms기본적으론 traceroute는 목적지에 도달하기 위한 경로를 최대 30개까지 표시한다. 출력에는 게이트웨이 이름, IP 주소, 그리고 3번의 왕복시간을 표시한다. 일부 네트워크에서 ICMP 대신 UDP/TCP trace 필요 합니다.
traceroute -I google.com # ICMP
traceroute -T google.com # TCP위와 같은 결과를 통해 특정 지점에서 과도한 지연이나 문제가 발생하고 있는지 명확히 진단할 수 있으며, 네트워크 성능 저하의 정확한 위치를 파악하는 데 유용합니다.
결론 및 추가적인 팁
소개된 네 가지 명령어(ping, netstat, nslookup, tracert)를 활용하면 네트워크 상태를 신속하고 정확하게 분석하여 서비스 품질을 높일 수 있습니다. 정기적으로 이러한 명령어를 통해 네트워크 상태를 점검하고, 전문적인 네트워크 모니터링 툴과 함께 사용하면 더욱 효과적으로 네트워크 성능을 관리하고 장기적인 시스템 안정성을 확보할 수 있습니다.