본문 바로가기
IT

AWS 부하 테스트 도구 - 1

by 힁구띠 2022. 7. 11.

부하 테스트 도구란 무엇인가?

대상 시스템에 대해 많은 요청을 하고 DOS, DDOS 공격이 들어오는 상태로 만드는 등 시스템 상태를 고부하로 만들어주는 도구를 부하 테스트 도구라고 한다.

 

부하 테스트 도구 용어

도구마다 조금씩 차이는 있지만 기본적으로 아래 내용을 포함한다.

용어 설명
시나리오 클라이언트별 설정된 HTTP 요청 패턴
시나리오 실행 횟수 클라이언트가 시나리오에 따라 요청을 보내는 횟수 
클라이언트 HTTP 요청을 동시에 1개만 줄 수 있는 요청 생성기
클라이언트 동시 가동 수  테스트 시작 수에 테스트 도구에 사용할 수 있는 클라이언트 수
Ramp-up 기간 테스트 시작 후 모든 클라이언트를 기동하기까지의 준비 기간

Throughput: 시스템이 시간당 처리할 수 있는 요청수

Latency: 테스트 도구가 요청을 보내고 응답을 받을 때까지의 시간

 

부하 테스트 도구 조건

시스템에 알맞은 부하를 생성하기 위해서는 부하 테스트 도구에 필요한 조건이나 기능은 아래와 같다.

1. 대상 시스템에 충분한 부하를 발생시켜야 함

사용하는 테스트 도구에 따라 어디까지 효율적인 부하를 발생시킬 수 있는지 결정된다. 대상 시스템의 성능 지표에 따라 사용할 수 있는 테스트 도구는 달라진다.

 

2. 요청을 정확하게 시뮬레이션한다.

Apache Bench를 사용하면 시나리오 기반의 테스트를 할 수 없다. 정확한 요청 패턴을 시뮬레이션할 수 없는 도구도 있다. 시나리오가 필요한 부하 테스트는 이러한 도구를 사용할 수 없다.

 

3. 부하 정도를 조정 가능해야 한다.

클라이언트 동시 접속자 수, 요청 간격, 최대 Throughput 등을 조정하여 공격 강도를 조절해야 한다. 이런 설정은 대부분의 테스트 도구에서 가능하다.

 

4. 부하 테스트 도구, 설치, 장소 및 가동 장소를 선택할 수 있어야 한다.

부하 테스트 도구에 따라 수행할 수 있는 서버에 제약이 있을 수 있어 부하 테스트 서버를 설치하는 장소 제약이 있을 수 있음. 또 SaaS 서비스로 원격에 설치된 서버에서 부하를 주는 도구도 있다.

 

테스트 도구 실행 프로세스

1. 부하 테스트 서버에서 HTTP 요청 생성

2. HTTP 요청이 네트워크로 이동

3. ELB가 요청을 웹 서버로 전달

4. HTTP 요청을 웹 서버가 받음

5. HTTP 응답을 웹 서버가 보냄

6. ELB를 통해 외부로 나감

7. HTTP 응답이 네트워크로 이동

8. 부하 테스트 서버가 HTTP 응답받은 후 다시 1번 절차로 돌아감

주의 사항

  • 부하 테스트 도구에서 보이는 Latency는 부하 테스트 대상 시스템의 Latency 와는 다름: 부하 테스트 도구의 Latency는 네트워크로 전송되는 동안 발생하는 Latency나 SSL디코드에 대한 Latency도 포함된 값이다. 부하 테스트 대상 시스템이 빠르게 응답해도 해당 값이 반영되었는지 모른다. 각 시스템의 실제 Latency는 서버 로그를 보거나 보드 밸런서에서 보인 Latency를 확인해야 한다.
  • 부하 테스트 도구의 클라이언트 동시 가동 수와 시스템에서 처리되는 동시 처리 수는 다름: 부하 테스트 도구에서 생성된 요청 대부분은 네트워크나 서버에 있으며 실제 부하를 생성하는 시스템에서 처리 중인 요청은 전체 요청 중 일부분일 뿐이다. 특히 네트워크 Latency가 클 때는 부하 테스트 도구에서 설정한 클라이언트의 동시 가동 수와 비교하여 실제 시스템에서 처리 중인 요청 비율은 낮다. 이런 상황에서 충분한 부하를 주기 위해 부하 테스트 서버에서는 클라이언트 동시 기동 수를 높여야 하며, 그 설정 작업은 부하 테스트 서버에 부하를 줄 수 있고 부하 테스트 결과를 불안정하게 하는 원인이 될 수 있다.
  • 부하 테스트 도구의 클라이언트는 앞의 요청이 완료되지 않으면 다음 요청을 생성하지 않음: 서버나 네트워크 어딘가에 일부 요청에 대한 응답을 처리하지 못하게 되면 전체 Throughput에 많은 영향을 준다. 그러나 이 현상은 부하 테스트 특유의 현상이며, 실제 사용자가 접속했을 때의 현상과는 다르다.

부하 테스트 도구의 문제와 부하 테스트 환경 구성 차이에서 오는 테스트 도구에서의 요청 생성 패턴과 실제 사용자 접속에 따른 요청 생성 패턴은 다름. 테스트 도구를 사용하기 위해 이런 접속 패턴의 차이와 부하 테스트 도구 사용 시의 특유의 문제는 무엇이고, 어떤 문제가 실제 사용자 접속으로 인해 발생할 수 있을지 미리 알아야 함.

 

서버 수, 네트워크 차이

부하 테스트 서버는 1~n 대이지만, 서비스 환경에서는 요청을 한 수만큼 사용자가 존대한다. SSL을 사용한 사이트의 부하 테스트 환경에서는 SSL 접속과 계산 처리 부하가 부하 테스트 서버에 집중되지만, 차이가 있다. 또한 SSL 접속을 안 해도  HTTP 요청 때마다 통신을 끊고 다시 접속하게 되면 부하 테스트 서버에 과부하가 발생한다. 시스템에 효율적으로 부하를 주기 위해 Keep-Alive 설정에 대한 테스트도 필요함. 네트워크도 부하 테스트 환경에서는 집중이 되지만, 실제 서비스 환경에서는 분산된다. 그러므로 테스트 서버의 사양이 높아도 네트워크 대역이 충분하지 않으면 부하 테스트를 실행할 수 없다.

 

요청 서버와 엔드포인트 차이

엔드포인트가 되는 서버가 부하 테스트 환경에서는 테스트 서버별로 일정 시간 동안 DNS 정보를 캐시 할 때가 있다. 그래서 부하를 받는 서버가 스케일 아웃되더라도 성능을 못 낼 때가 많다. 그러나 서비스 환경에서는 요청을 보내는 사용자가 하나의 서버가 아닌 여러 곳으로 분산되어 서비스를 받기 때문에 이러한 문제는 발생되지 않는다.

테스트 환경에서 이러한 문제를 해결하기 위해서는 대상 시스템의 가까운 지점에서 부하를 주어 내트워크 영향을 최소화시킬 필요가 있고 각 엔드포인트에 같은 양의 요청이 있는지 항상 확인이 필요하다.

'IT' 카테고리의 다른 글

SQL의 기본 개념 - 2  (0) 2022.07.13
SQL의 기본 개념 - 1  (0) 2022.07.12
AWS 부하 테스트 목적 - 1  (0) 2022.07.08
SQL 기본 이론 - 1  (0) 2022.07.06
RDB의 관계 기본 개념 - 1  (0) 2022.07.05

댓글