
VPS(가상 사설 서버)나 전용 서버가 필요하다면 선택할 수 있는 옵션은 무척 다양합니다. 그런데 시장이 포화 상태에 이르고 끊임없이 변화하기 때문에 모든 사람에게 딱 맞는 '최고의 서버'란 존재하지 않습니다. 적어도 모든 분야에서 두각을 나타내는 서버는 없다는 뜻입니다.
어떤 클라우드 제공업체는 저장 속도가 가장 빠른 VPS를 제공하지만 CPU 성능은 다소 아쉬울 수 있고, 또 다른 업체는 시장에서 가장 뛰어난 CPU 성능을 자랑하지만 저장 장치는 느릴 수 있습니다. 게다가 경쟁사의 고객을 빼앗기 위해 치열하게 경쟁하다 보면, 지금은 저장 장치가 느린 업체도 몇 달 뒤에는 장비를 업그레이드해 시장 최강자로 올라설 수 있습니다. 바로 이럴 때 벤치마크를 활용하면 여러 업체를 객관적으로 비교하고, 현재 시점에서 내 워크로드에 가장 적합한 서버를 선택할 수 있습니다.
벤치마킹에 대한 기본 개념
원래라면 벤치마크는 특정 사용 사례와 하드웨어에 맞춰 조정한 뒤, 장비에서 최대한의 성능을 짜낼 수 있는지 확인하는 방식으로 진행합니다. 하지만 이 글에서는 모든 잠재 성능을 100% 끌어내지 못할 수 있는 일반적인 테스트를 실행합니다. 대신 동일한 운영체제에서 동일한 파라미터로 테스트를 수행하기 때문에, 같은 조건에서 어떤 제공업체가 더 좋거나 나쁜 성능을 보이는지 쉽게 비교할 수 있는 실질적인 수치를 얻게 됩니다.
시작 전 준비 사항
- 운영체제는 우분투(Ubuntu) 최신 안정 버전 이미지를 사용하세요. 이 글을 작성하는 시점 기준으로는 18.04 LTS입니다. 나중에 다른 운영체제를 사용할 계획이라 해도 문제되지 않으며, 공통된 출발점을 만들어 주는 역할을 합니다.
- 튜토리얼의 일부 명령어는 필요에 따라 조정할 수 있습니다. 단, 정확한 비교를 위해서는 모든 서버에 완전히 동일한 파라미터를 사용해야 한다는 점을 꼭 기억하세요.
- 각 서버에서 동일한 벤치마크를 두 번 실행하는 것이 좋습니다. 일부 클라우드 제공업체는 결과가 들쑥날쑥한 경우가 있는데, 이는 게스트 운영체제 격리가 잘 되어 있지 않거나 하나의 하드웨어에 너무 많은 클라이언트를 몰아 넣었다는 신호입니다. 이런 업체는 아예 피하는 것이 현명합니다.
- 이 튜토리얼은 root 계정으로 로그인했다고 가정합니다. 일반 사용자로 로그인한 경우
apt명령어 앞에 sudo를 붙여야 하므로,apt update && apt install fio는sudo apt update && sudo apt install fio처럼 입력해야 합니다.
서버 저장소 벤치마크
먼저 벤치마킹 도구를 설치합니다.
apt update && apt install fio
fio를 찾을 수 없다는 메시지가 나오면 universe 저장소가 활성화되어 있지 않은 것입니다. apt install software-properties-common && add-apt-repository universe 명령으로 저장소를 활성화한 뒤, 위 명령을 다시 실행해 fio를 설치하세요.
순차 읽기(Sequential Read)는 데이터를 연속적으로 읽을 때 발생합니다. 예컨대 4GB 파일을 처음부터 끝까지 읽는 경우가 여기에 해당하며, 현재 사용 중인 파일시스템과 함께 저장 장치의 최대 읽기 속도를 보여주는 경우가 많습니다. 순차 읽기 테스트는 아래 명령으로 실행합니다.
fio --name=seqread --readwrite=read --direct=1 --ioengine=libaio --bs=1M --size=2000M
테스트가 20초 안에 끝난다면(SSD 환경에서 흔히 그렇습니다), 더 정확한 결과를 얻기 위해 아래 코드처럼 읽을 파일 크기를 늘려 주세요.
fio --name=seqread --readwrite=read --direct=1 --ioengine=libaio --bs=1M --size=8000M
결과에서 가장 주목해야 할 수치는 아래 이미지에 강조된 READ: bw(읽기 대역폭)입니다.

순차 쓰기(Sequential Write) 속도를 테스트하려면 다음 명령을 실행하세요.
fio --name=seqwrite --readwrite=write --direct=1 --ioengine=libaio --bs=1M --size=2000M
동일한 항목의 수치를 확인하면 됩니다.
가장 부하가 심한 조건에서 클라우드 스토리지가 어떻게 작동하는지 테스트하려면 아래 명령을 실행합니다.
fio --name=randrw --readwrite=randrw --direct=1 --ioengine=libaio --bs=4k --size=200M --group_reporting --numjobs=8
앞서와 마찬가지로 테스트가 너무 빨리 끝나면 --size 값을 늘려 주세요. 이 테스트에서는 대역폭보다 IOPS가 더 중요하므로, 대역폭은 부수적인 지표로만 생각하면 됩니다.
먼저 read: IOPS와 write: IOPS 수치를 살펴보세요.

실제 사례로 비유하면, 대형 데이터베이스가 끊임없이 읽기·쓰기 작업을 반복하는 트래픽이 매우 많은 웹사이트에서 서버 스토리지가 받는 부하와 비슷한 상황입니다.
서버 CPU 및 메모리 벤치마크
Geekbench 다운로드 페이지에 접속해 최신 Geekbench 압축 파일의 링크를 복사한 뒤 wget 명령에 붙여넣습니다. 예를 들어 이 글을 작성하는 시점의 링크는 "https://cdn.geekbench.com/Geekbench-4.3.3-Linux.tar.gz"입니다. 아래 명령은 Geekbench를 서버로 내려받습니다.
wget https://cdn.geekbench.com/Geekbench-4.3.3-Linux.tar.gz
압축 파일의 내용을 풀어줍니다.
tar -xzvf *.tar.gz

압축이 풀린 디렉터리로 이동합니다. 디렉터리 이름은 앞선 명령의 출력 결과(위 이미지 참조)에서 확인할 수 있는 프로그램 버전과 일치합니다.
cd Geekbench-4.3.3-Linux
이 글을 작성하는 시점의 실행 파일 이름은 geekbench4지만, 향후 변경될 수 있습니다. 현재 디렉터리의 파일 목록을 확인해 보세요.
ls

필요하다면 실행 파일 이름을 바꾸고 벤치마크를 실행합니다.
./geekbench4
모든 테스트가 완료되기까지 시간이 걸립니다. 완료되면 결과를 확인할 수 있는 링크가 제공됩니다.

서버 네트워크 대역폭 벤치마크
Speedtest 클라이언트를 설치합니다.
apt install speedtest-cli
벤치마크를 실행합니다.
speedtest

일반적으로 유틸리티는 서버와 가장 가까운 곳에 위치한 테스트 서버를 자동으로 찾습니다. 위치 감지에 실패하면 아래 명령처럼 국가별 서버 목록을 직접 조회할 수 있습니다.
speedtest --list | grep -i germany
목록에서 원하는 번호를 골라 다음 명령처럼 지정해 실행하면 됩니다.
speedtest --server 4462
Speedtest가 사용하는 일부 서버는 당시 가용 대역폭이 부족할 수 있다는 점에 유의하세요. 벤치마크 결과가 지나치게 낮게 나온다면 다른 업로드/다운로드 서버로 바꿔 다시 시도해 보세요.
마무리
지금까지 CPU, 메모리, 저장소, 네트워크의 기본적인 벤치마킹 과정을 살펴봤습니다. 각 테스트가 끝날 때마다 수치를 확보하게 되는데, 이를 서로 비교하면 내 워크로드에 가장 유리한 성능을 보여주는 서버를 선택할 수 있습니다.