이번 장부터는 필자가 재직 중인 회사에서 진행하는 신규 프로젝트의 사용자가 많아졌을 때를 대비한 벤치마크를 진행하고
실제로 동접자가 많아졌을 때 발생할 문제를 미리 발생시켜서 서비스 출시 이전에 서비스를 개선한 과정들에 대해서 살펴보도록 한다.
환경
- 부하 테스트 환경을 간략하게 그려보면 아래와 같다.
- 부하 테스트를 진행하는 개발자의 PC가 클라이언트 역할을 하게되어 EC2 Instance에서 실행되고 있는 서비스에 부하를 준다.
- Pinpoint Agent에 의해 Pinpoint Server로 전달된 도커 컨테이너 리소스 사용량을 개발자는 웹브라우저로 접속해서 확인한다.
- EC2 Instance에 설치되어 있는 nmon에 의해 생성된 {filename}.html 파일을 개발자 PC로 복사하여 리소스 사용량을 확인한다.
Pinpoint Agent에 의해 측정된 리소스 사용량이 도커 컨테이너가 Instance로 부터 할당받은 리소스의 사용량인지 Instance 자체의 리소스 사용량인지 명확하지 않아서 nmon을 사용하여 추가로 확인하였다. 물론 pinpoint에서는 수집하지 못하고 nmon으로만 확인되는 부분(예를들어 process switching count)이 있다. 만약 글을 읽으면서 nmon에서 제공하는 기능들이 필요없다면 생략하고 진행해도 무관하다. 필자는 개인적으로 nmon 사용을 추천한다.
필자가 부하테스트를 진행하기 위해서 사용한 Tool들의 목록이다.
공식문서 링크를 걸어 놓았으므로 궁금한 경우 아래의 링크로 접속하여 확인하도록 한다.
- Apache Jmeter (링크): 클라이언트 및 Request TPS 확인
- Pinpoint (링크): 컨테이너 리소스 확인 (직접 서버를 설치해야 함, 설치 방법은 공식문서에 친절하게 나와있으니 참고하거나 필자가 작성한 Pinpoint 관련 글을 읽어보면 될듯하다.)
- Nmonchart (링크): 인스턴스 리소스 확인
부하 테스트의 목적
- 서비스를 사용 할 수 있는 최대 동접자의 수를 파악한다.
- 동접자가 몰렸을 경우 가장 먼저 부족해지는 리소스 (ex cpu)를 확인한다.
- 리소스를 많이 사용하는 코드를 파악하여 수정한다.
부하 테스트 방법
부하 테스트는 개발DB에 Dummy 데이터를 넣고 진행한다.
Dummy데이터를 만드는 쿼리는 서비스 로직이 담겨있어서 추가하지 못하였다. (만약 필요하다면 추후에 Dummy 데이터 생성 글을 작성하도록 하겠다.)
부하 테스트는 Read Request만으로 진행한다. 서비스마다 다르겠지만 필자의 경우 가장 빈번하게 발생하는 요청이 Read이며 서버 입장에서도 가장 비싼 요청이기 때문이다. (사실 CUD는 데이터가 변경되기 때문에 부하 테스트의 복잡성이 늘어나고 재현이 힘들다는 점 때문에 제외하였다.)
이번 장에서는 부하 테스트를 진행하기 위한 간략한 환경에 대해서 알아보았다.
다음 장에서는 부하 테스트 진행을 위한 클라이언트(Jmeter)를 세팅하는 방법을 상세하게 알아본다.
'Stress Test' 카테고리의 다른 글
[부하 테스트] Jmeter 상세 설정 (0) | 2022.01.22 |
---|---|
[부하 테스트] Jmeter 설정 (0) | 2022.01.22 |
[Pinpoint] 로컬 Agent 구축 (0) | 2021.12.29 |
[Pinpoint] 로컬 서버 구축 (0) | 2021.12.28 |
[Pinpoint] 개념 (0) | 2021.12.28 |