애플리케이션 코드상에는 전혀 문제가 없는데
사용자가 서비스로부터 데이터를 가져오지 못하는 상황이 발생되기도 하는데,
이는 네트워크 병목 현상일 가능성이 있다.
🔎 병목 현상이란?
컴퓨터 또는 네트워크 리소스에 의해 데이터 흐름이 제한되는 불연속 조건을 나타낸다.
으잉 뭔소리지? 🤔
데이터 흐름은 다양한 시스템 리소스의 대역폭에 따라 제어된다.
네트워크에서 작동하는 시스템이 기존 네트워크 용량에서 지원하는 것보다
많은 양의 데이터를 전달하는 경우 네트워크 병목 현상이 발생한다.
네트워크 병목 현상의 주된 원인은 아래와 같다.
네트워크 대역폭
네트워크 토폴로지
서버 CPU, 메모리 사용량
비효율적인 네트워크 구성
만약 병목 현상이 네트워크로부터 발생한 문제점이라면?!
네트워크 성능 분석을 해봐야 한다. 이때 사용되는 명령어들은 아래와 같다.
⌨️ netstat
접속되어 있는 서비스들의 네트워크 상태를 표시하는 데 사용되며
네트워크 접속, 라우팅 테이블, 네트워크 프로토콜 등 리스트를 보여준다.
주로 서비스의 포트가 열려 있는지 확인할 때 쓴다.
- 전체 리스트 보기
netstat -rn
- 기본 게이트웨이 주소 알아보기
netstat -rn | grep "default" | awk '{print $2}'
➡️ 192.168.55.1
⌨️ ping
ping(Packet INternet Groper)은 네트워크 상태를 확인하려는 대상 노드를 향해 일정 크기의 패킷을 전송하는 명령어이다.
해당 노드의 패킷 수신 상태와 도달하기까지 시간 등을 알 수 있고 노드까지 네트워크가 잘 연결되어있는지 확인할 수 있다.
ping은 TCP/IP 프로토콜 중에 ICMP 프로토콜을 통해 동작한다.
ping 테스트하기
🏷️ 사용될 주소
> 컴퓨터와 공유기간 : 기본 게이트웨이 주소 입력
> 공유기와 외부 인터넷간 : 인터넷 주소 입력
공유기와 외부 인터넷간의 테스트에선 통신사 서버와 테스트하는 경우가 많길래 저는 SKT 서버 주소(210.220.163.82) 사용!
결과가 0~100ms 사이로 일정하게 나온다면 대개 만족할 속도!
중간중간 "Request timed out" 메시지 > 연결이 올바르지 않다는 의미!
- 컴퓨터와 공유기간 (아까 netstat으로 알아본 기본 게이트웨이 주소 입력)
ping 기본 게이트웨이 주소
➡️ [64 bytes] : 패킷
➡️ [ttl] : Time To Live, 패킷이 라우터에 의해 폐기될 때까지 네트워크 내부에 존재하도록 설정된 "홉"의 양
➡️ [time] : 응답시간 네트워크 전송 단위, 위의 경우 패킷이 약 1~25ms 마다 전송
* ctrl + c > 테스트 종료하고 통계 보여줌
- 공유기와 외부 인터넷간 (SKT 서버 주소 사용해봄)
* 도메인 이름으로도 가능!
⌨️ nslookup
DNS에 관련된 내용을 확인하기 위해 쓰는 명령어이다. 특정 도메인에 매핑된 IP를 확인하기 위해 사용한다.
- 원하는 도메인의 IP 확인
nslookup 도메인 명
- ns 레코드로 DNS 목록 확인
nslookup -type=ns 도메인 명
⌨️ traceroute
목적지 노드까지 네트워크 경로를 확인할 때 사용하는 명령어이다.
목적지 노드까지 구간들 중 어느 구간에서 응답 시간이 느려지는지 등을 확인할 수 있다.
첫번째 게이트웨이는 제 무선공유기임! 그 이후 지나가는 라우터의 주소 및 처리시간이 찍힘
이렇게 패킷이 라우터를 거쳐서 전달되는 과정을 라우팅이라 한다.
📌 네트워크 병목 현상 참고 : https://ko.theastrologypage.com/network-bottleneck
📌 ping 테스트 참고 : https://macinjune.com/app-posts/mac/tip/맥-윈도우-ping-테스트하는-방법/
📌 nslookup 테스트 참고 : https://haloaround.tistory.com/9
📚 네트워크 성능 분석 명령어 참고 문헌 : 면접을 위한 CS 전공지식노트 [주홍철 지음]
'네트워크' 카테고리의 다른 글
네트워크, 네트워크 토폴로지 (0) | 2023.04.15 |
---|---|
TCP/IP 4계층, 3-way/4-way handshake (0) | 2022.11.28 |
쿠키(Cookie)/세션(Session), 캐시(Cache) (0) | 2022.11.27 |
토큰(Token)이란? 쿠키/세션, 토큰 기반 인증(+JWT) (0) | 2022.11.27 |