내부망 네트워크 라인을 새로 까는 작업 하던 중에, 제대로 기가비트가 작동하는지 확인하기 위해 스피드 테스트가 필요하였다.
그나마 터미널 명령어인 speedtest-cli를 통해 테스트를 하면 서버를 직접 지정할 수 있기 때문에 테스트 하기가 용이하다. 웹에서는 서버 찾다가 끝나는데, 명령어에서 서버를 직접 지정해주고 테스트 하면 서버 찾는 시간을 건너뛰고 바로 테스트로 들어간다. 명령어에 서버 아이디를 넣으면 해당 서버로 바로 조회가 가능하다. 한국 서버 아이디는 6527이다.
speedtest-cli --server 6527
Bash
복사
그런데, speedtest-cli 명령어를 만지던 중에, '미니서버'라는 것을 지정하여 쓸 수 있다는 것을 알게 되었다.
% speedtest-cli --help
...
--mini MINI URL of the Speedtest Mini server
...
Bash
복사
빌드는 간단한데, 나는 아무리 빌드를 하고 테스트를 해봐도 되지가 않았다. HTTPS 인증을 하지 않아서인지, 계속 오류가 난다.
% speedtest-cli --mini http://172.168.0.1:8080
Retrieving speedtest.net configuration...
Testing from Korea Telecom (181.***.***.***)...
ERROR: Invalid Speedtest Mini Server: http://172.168.0.1:8080
Bash
복사
아이피가 아닌 호스트 주소로 지정하여 테스트 해도 마찬가지였다. Ookla에서 제공하는 테스터를 통해 확인해봤을 때는, HTTS가 적용되지 않은 것 빼고는 별다른 오류가 보이지 않았다. 미니 서버를 등록 해보려 해도 되지 않고, HTTPS를 적용하지 않은 것이 원인인가 싶지만 내 마음대로 적용할 수 있는 서버가 아니어서 손을 뗐다.
(나중에 알게된 것이지만, Ookla의 speedtest와 speedtest-cli는 서로 다른 것이었다. 필자는 이것을 모르고 열심히 Ookla 서버를 설치한 뒤, speedtest-cli에서 '미니 서버'로 바라보게 한 것이었다. speedtest-cli에서 --debug 파라미터가 되는 것을 확인 후, 해당 파라미터를 통해 'get' 주소를 직접 웹 브라우저에 넣어 비교해보면서 서로간의 커뮤니케이션 방식이 다르다는 것을 알게 되었다. 그리고 안타깝게도... 더이상 미니 서버 소스를 유지하여 주지 않는다.)
서버 지정한 터미널 명령어로 느릿느릿 테스트를 해가며 작업을 마친 후, 찾아보니 웹에 띄워 테스트할 수 있는 것으로 librespeedtest라는 것이 있었다. 작업 후에 확인이나 해볼 겸 테스트용 가상 서버에 간단히 설치하여 테스트를 해봤다.
설치 방법은 2cpu의 회원(무한도전)께서 공유해주신 글을 참고하였다. Centos 7.3을 기준으로 하였으나, 우분투에서 적용하는데 어려움은 없었다(참고로 테스트용 서버는 오래된 우분투 12.04 버전 서버이다). 필요한 것은 PHP와 HTTP를 띄울 수 있는 웹서버(아파치 or NGINX) 뿐이다. 테스트 결과 저장을 위해 SQL(SQLITE, MYSQL, POSTGRESQL)을 설정할 수도 있지만, 테스트는 SQL 없이도 충분히 가능하다. 명령어로는 wget과 unzip이 있어야 한다.
먼저 다운로드를 받고 압축을 푼다.
wget https://github.com/librespeed/speedtest/archive/master.zip
unzip master.zip
Bash
복사
*git이 설치되어 있는 경우 git으로 clone을 해도 된다.
git clone https://github.com/librespeed/speedtest.git
Python
복사
압축을 풀면 아래와 같은 파일들이 있다.
이 파일들로 웹서버에 올릴 폴더를 만들겠다.
cd speedtest-master/
mkdir ../speedtest
mv backend/ ../speedtest/
cp speedtest* ../speedtest/
mv examples/example-singleServer-progressBar.html ../speedtest/index.html
Bash
복사
이렇게 하면 speedtest라는 폴더에 필요한 파일들이 모인다. 이 후에 해당 폴더를 웹서버 폴더에 놓고, 권한을 지정한다.
sudo cp -r speedtest /var/www/html
cd /var/www/html
sudo chown -R www-data:www-data speedtest/
Bash
복사
*우분투 14.04 이후부터는 /var/www/html가 웹서버 폴더이니, 경로에 주의하자.
이 후 해당 서버 경로http://서버_주소/speedtest를 웹 브라우져에서 연 뒤 테스트를 하면 된다.
speedtest-cli 서버 빌드하려고 삽질하는데 2시간이 넘게 걸렸는데, 저건 20분이 채 안걸렸다. speedtest-cli보다 조회하는 시간도 훨씬 더 빠르다.
터미널 명령어로 조회가 되지 않는 것이 조금 아쉬웠는데, 찾아보니 터미널 명령어가 가능한 libspeedtest-cli가 있었다. 리눅스의 경우는 go를 사용하므로 go를 설치해주어야 하는 것이 조금 번거롭긴 하다.
sudo apt install golang-go
git clone https://github.com/librespeed/speedtest-cli
cd speedtest-cli
./build.sh
cd out
sudo mv ./librespeed-cli-linux-amd64 /usr/bin/librespeed-cli
Python
복사
OSX의 경우에는 hombrew에서 명령어 만으로도 설치가 된다.
brew tap librespeed/tap
brew install librespeed-cli
Bash
복사
명령어는 기본적으로 liberespeed의 공용 서버를 바라보게 되므로, 실행하면 미국에 있는 서버로부터 속도 테스트를 하는 것을 볼 수 있다. 로컬 서버를 바라보게 하려면 json으로 서버 리스트 설정 파일을 만들어주어야 한다. 컴퓨터마다 설치 후 설정파일을 만들려면 번거로울텐데, liberespeed의 경우 '서버'에 서버 리스트 설정 파일을 놓고 이것을 바라보게 할 수 있다. 설정 파일을 서버에 넣어놓고 그곳을 바라보게 하면 된다.
sudo touch /var/www/speedtest/server_list.json
sudo chown www-data:www-data /var/www/speedtest/server_list.json
sudo chmod 660 /var/www/speedtest/server_list.json
sudo vi /var/www/speedtest/server_list.json
Bash
복사
이후 파일에다 아래와 같이 서버 목록을 저장하자. server 경로의 경우 각각의 php 명령 파일들을 바라보게 해야 하기 때문에 backend까지 뒤에 적어주어야 한다. 서버 리스트 목록을 작성하는 것이라,여러 서버를 적어 놓는 것도 가능하다.
[
{
"id": 1,
"name": "PHP Backend",
"server": "http://서버_주소/speedtest/backend",
"dlURL": "garbage.php",
"ulURL": "empty.php",
"pingURL": "empty.php",
"getIpURL": "getIP.php"
}
]
JSON
복사
이 후 http://서버_주소/speedtest/server_list.json 를 웹 브라우저에서 조회하여 동일한 내용이 나오는지를 확인하자.
이제 속도를 체크하고자 하는 컴퓨터에서 아래와 같이 명령어를 입력하면 핑과 함께 속도 체크를 하게 된다.
% librespeed-cli --server-json http://서버_주소/speedtest/server_list.json
Retrieving server list from http:/서버_주소/speedtest/server_list.json
Selecting the fastest server based on ping
Selected server: PHP Backend [서버_주소]
You're testing from:
Ping: 0 ms Jitter: 0 ms
Download rate: 935.35 Mbps
Upload rate: 693.24 Mbps
Bash
복사
브라우져 테스트 시에는 다운로드 속도가 700Mbps를 넘지 못하였는데, cli 상에서는 다운로드 속도가 1Gbps에 가깝게 나온다. 테스트 시에 웹서버와 연동중인 다른 브라우저의 동작이 버벅일 정도이다. 네트워크 자원을 당겨 쓸 수 있는데 까지 최대한 사용하여 테스트 하는 것으로 보인다.
로컬 환경에서는 librespeedtest라는 좋은게 있으니, 필자처럼 괜히 Ookla의 speedtest나 speedtest-cli만을 고집하지는 말자. 필자는 간단한 빌드와 설정으로 매우 흡족한 결과를 얻었다.