많은 웹개발자들과 서버 관리자들이 가장 두려워하는 것은 엄청난 트래픽 때문에 웹사이트가 다운되는 사태다. 트래픽 폭주의 원인은 DoS 공격 등 여러가지가 있지만 분명한 것은 더이상 웹사이트를 사용할 수 없도록 만든다는 사실이다.
이런 필요 때문에 등장한 것이 바로 부하 테스트 툴이다. 사이트가 어떤 트래픽 수준에서 다운되는 지를 테스트하는 소프트웨어로, 이미 좋은 툴들이 많이 출시돼 있다. ‘WAPT’라는 상용 소프트웨어는 Builder.com에 서 리뷰하기도 했다. 필자는 무료로 사용할 수 있는 오픈소스 툴을 선호하는데, 오픈소스 부하 테스트 툴 가운데 가장 널리 사용되며 꾸준히 업데이트되는 소프트웨어로는, 이름과도 잘 어울리는 ‘시즈(Siege, 포위공격)’가 있다.
시즈의 특징
‘시 즈’라는 이름은 이 툴의 모든 것을 말한다. 서버를 에워싸 서버가 어떤 이유로 문제를 일으켰는지를 보여주는 것이다. 유닉스 기반의 명령행 기반 툴인 시즈는 GNU GPL 오픈소스 라이선스를 따르기 때문에 사용, 수정, 배포가 모두 무료다.
시즈는 단일 URL의 부하 테스트는 물론 많은 URL을 메모리로 불러들여 사용자가 설정한 시뮬레이션 유저만큼의 부하를 동시에 테스트할 수 있다. 또한 기록된 총히트수와 전송된 바이트수, 반응시간, 병행성(Concurrency), 리턴 상태 등을 보여주며, HTTP 1.0/1.1 프로토콜, GET/POST 디렉티브, 쿠키, 트랜잭션 로깅, 기본적인 인증 등을 지원한다.
이런 필요 때문에 등장한 것이 바로 부하 테스트 툴이다. 사이트가 어떤 트래픽 수준에서 다운되는 지를 테스트하는 소프트웨어로, 이미 좋은 툴들이 많이 출시돼 있다. ‘WAPT’라는 상용 소프트웨어는 Builder.com에 서 리뷰하기도 했다. 필자는 무료로 사용할 수 있는 오픈소스 툴을 선호하는데, 오픈소스 부하 테스트 툴 가운데 가장 널리 사용되며 꾸준히 업데이트되는 소프트웨어로는, 이름과도 잘 어울리는 ‘시즈(Siege, 포위공격)’가 있다.
시즈의 특징
‘시 즈’라는 이름은 이 툴의 모든 것을 말한다. 서버를 에워싸 서버가 어떤 이유로 문제를 일으켰는지를 보여주는 것이다. 유닉스 기반의 명령행 기반 툴인 시즈는 GNU GPL 오픈소스 라이선스를 따르기 때문에 사용, 수정, 배포가 모두 무료다.
시즈는 단일 URL의 부하 테스트는 물론 많은 URL을 메모리로 불러들여 사용자가 설정한 시뮬레이션 유저만큼의 부하를 동시에 테스트할 수 있다. 또한 기록된 총히트수와 전송된 바이트수, 반응시간, 병행성(Concurrency), 리턴 상태 등을 보여주며, HTTP 1.0/1.1 프로토콜, GET/POST 디렉티브, 쿠키, 트랜잭션 로깅, 기본적인 인증 등을 지원한다.
시 즈 최신버전은 Builder.com 다운로드 사이트에 서 받을 수 있다. 설치는 GNU 오토콘프(autoconf)를 사용해 유닉스 애플리케이션용 컴파일 절차를 따른다. 표준 ANSI C 컴파일러(대부분의 기본 *nix 인스톨의 일부)를 지원하는 최근의 리눅스 시스템이나 다른 *nix 시스템 환경이라면 설치는 매우 간단하다. 먼저 다운로드한 파일의 tar 압축을 다음과 같이 해제한다.
이제 다음과 같이 설정한다(디폴트 설정을 추천한다).
설정에 대한 도움말은 -help 서픽스(suffix)를 이용하면 된다. 필자가 개인적으로 추가한 것은 SSL 지원으로, ‘-with-ssl=/usr/local/ssl’ 서픽스를 통하면 된다. 여기까지 마쳤으면 이제 남은 것은 다음과 같이 컴파일해 설치하는 것이다.
시 즈는 웹서버를 테스트하는 다양한 옵션을 제공한다. 가장 간편한 실행 방법은 단일 URL 테스트다. 이것은 특정 페이지가 대량 트래픽에 어떻게 반응하는지를 잘 보여준다. 이때 중요한 옵션 두 가지가 동시 접속자수(-c 옵션, 디폴트는 10)와, 반복 쿼리수 혹은 시간으로 표현되는 테스트 기간(-t)이다. 예를 들어 25명이 동시에 1분간 접속하는 환경이라면 다음과 같이 실행하면 된다
이밖에도 딜레이를 설정하는 -v와 -d 옵션을 자주 사용하는데 기본값은 0 이다
여기까지 실행했다면 시즈는 당신의 코드와 서버가 대량 트래픽에 어떻게 반응했는지를 알려준다. 다음은 위의 명령을 실행했을 때의 결과 화면이다.
가용성(Availability)은 가장 중요한 요소인데 이것이 100%에 미달했다는 것은 사용자 중의 일부가 사이트에 접속하지 못했다는 것을 의미한다. 따라서 위의 실행결과는 문제가 된다. 1분에 25명이 접속했을 때 가용성이 99.75%에 불과했기 때문이다.
병행성 (Concurrency)은 각 트랜잭션 처리 시간을 경과시간으로 나눈 것이다(이때 트랜잭션이란 모든 인증시도를 포함한 서버의 히트수다). 이를 통해 평균 동시 접속 수준을 알 수 있는데, 병행성이 높을수록 서버가 어려움에 봉착했음을 암시한다. 그 이유는 새로운 트래픽 처리를 위해 소켓을 열어야 하는 상황에서, 서버가 한 트랜잭션을 완료하는데 걸리는 시간이 길면 길수록, 동시에 처리해야 할 트래픽이 많아져 서버 성능이 떨어지기 때문이다.
필자가 시즈 초기버전을 사용했을 때는, 서버에 준 부하에 성공과 실패가 서로 뒤섞여 있었다. 단순히 동시 접속자와 테스트 시간을 늘려 결과를 살펴보는 정도였다. 그러나 시즈 최신버전에는 봄바드먼트(Bombardment)라는 툴이 포함돼 있어, 명령어 옵션으로 클라이언트 숫자를 증가시킬 수 있다. 그러나 봄바드먼트(Bombardment)는 버보스(verbose) 출력이나 로깅 기능 등 시즈가 기본적으로 지원하는 사용자 옵션이 없어 제대로 실행되지 않는 단점이 있다.
적당한 회귀 테스팅도 단일 URL 이상에서만 가능하다. 시즈는 과거에 ‘스카우트(Scout)’라는 툴을 이용해, 특정 도메인에서 URL들을 추출한 후 이를 시즈 테스트 목록에 포함시키는 기능을 지원했었다. 현재 스카우트는 더 이상 업데이트되지 않지만 이전 버전은 다운로드해 사용할 수는 있다.
시즈 최신 버전에는 스카우트 대신 새로운 테스팅용 URL 추출기인 ‘스프록시(Sproxy)’가 포함돼 있다. 그러나 필자는 개인적으로 스카우트에 더 후한 점수를 주고 싶다. 스프록시는 옵션을 사용자 브라우저 프록시로 설정하면, 사용자가 방문한 모드 사이트의 링크를 테스트 목록에 추가하기 때문이다. 유일한 추가 옵션은 수동으로 모든 URL을 입력하는 것이다.
시즈는 사이트내에 존재하는 모든 GET/POST, 인증, 쿠키에 대한 부하 테스트를 할 수 있으며, 사용자는 단지 URL을 입력하거나 스프록시나 스카우트 등의 툴을 이용하면 된다. 다수 URL에 -i 옵션을 사용하면 동시 쓰레드 방식으로 URL을 난수화해 보다 실제에 가까운 테스트도 할 수 있다.
시즈는 URL 부하를 테스트하는 간단한 툴일 뿐이다. 따라서 가용성과 반응시간 등을 개선하기 위해서는 이를 결정하는 두 가지 요소, 즉 네트워크적인 요인과 웹 개발자에 의해 좌우되는 웹페이지의 요소들을 살펴봐야 한다.
먼저 네트워크 측면을 보면 호스트 웹서버의 대역폭(처리 능력)과 메모리가 가장 중요하다. 로드 밸런스 환경이라면 호스트 웹서버 대신 서버가 된다. 웹페이지 부분에서는 코드를 효율적으로 개발하는 만큼, 이론적으로는 파일 크기가 작아지기 때문에, 네트워크 자원의 낭비도 줄일 수 있다.
댓글 없음:
댓글 쓰기