///
Search
Duplicate
✍🏻

SportsEcho 테스트 시나리오

작성자: 정지성, 진유록
nGrinder Controller/Agnet 실행 환경
로컬 환경에 설치해서 EC2 서버에 요청을 보내는 방식으로 테스트
nGrinder Controller/Agent를 실행하는 비용도 존재하기 때문에 서버와 동일한 환경에 설치해서 진행하는것은 바람직하지 않고, 서버 환경에 대한 스펙은 명시하되 Controller/Agent가 실행되는 환경의 스펙은 명시하지 않아도 무관하다.
서버 스펙에 대한 참고사항
t2.micro: amazon linux 2023 ami / 1 vCPU / 1 GiB memory
위 서버 스펙은 aws freetier 스펙인데 실무에서는 4vCPU, 16GiB 환경을 주로 쓴다고 한다. 본 프로젝트는 학습의 목적이 크기 때문에 낮은 스펙으로 시작해 스펙을 올려가면서 테스트를 진행하고자함
고민해본 결과 spring application은 실행 시키기만 해도 메모리를 800mb나 잡아먹기 때문에 위 스펙으로 테스트를 진행했을시에 기대하는 테스트를 진행할 수 없을 것으로 판단. 테스트 머신의 최초 스펙은 아래와 같이 설정하고 시작하는 것으로 결정.
t3.medium: amazon linux 2023 ami / 2 vCPU / 4 GiB memory

1. HotDeal 동시성 테스트

테스트 개요
재고가 100개인 핫딜 상품에 대해 3000명의 사용자가 거의 동시에 (약 7.5초)구매 요청을 하는 시나리오. 동시성 처리 및 데이터베이스 무결성확인을 중점으로함
테스트 환경
서버 환경: AWS EC2 > DockerImage로 구동되는 Spring서버
t2.medium: amazon linux 2023 ami / 2 vCPU / 4 GiB memory
Docker 24.0.7, Spring Boot 3.2.1
테스트 시나리오 설계
3000명의 사용자가 약 7.5초 이내로 3개씩 핫딜 상품구매 요청을 보내는 테스트 진행
테스트 주소는 Post: http://13.125.46.61:8080/api/hotdeals/purchase로 진행
각 요청은 사용자, 상품 정보를 포함한 Groovy 스크립트를 작성해서 서버에 전송
기대하는 테스트 결과
재고 관리 정확성: 모든 구매 요청이 처리된 후, 핫딜 상품의 재고 수량이 정확하게 1이 되어야 합니다.
동시성 처리 능력: 시스템은 동시에 들어오는 대량의 요청을 효율적으로 처리할 수 있어야 합니다.
데이터 무결성: 데이터베이스의 무결성이 유지되며, 어떠한 경우에도 재고가 음수가 되지 않아야 합니다.

2. 상품 검색 기능 부하테스트 시나리오

테스트 개요
상품 검색 기능의 성능 최적화 전/후 서버에 부하를 발생시켜 상품 검색 서비스의 성능이 어느정도 개선되었는지 측정하고 최적화 후 서비스에서 어느정도의 트래픽을 견딜 수 있는지 안정성을 측정하기 위함
테스트 환경
서버 환경: AWS EC2 > DockerImage로 구동되는 Spring서버
t2.medium: amazon linux 2023 ami / 2 vCPU / 4 GiB memory
Docker 24.0.7, Spring Boot 3.2.1
테스트 시나리오 설계
성능 최적화 전/후의 상품 검색 코드를 서버에 올린 후 10명의 agent로 시작해 100, 1000명 단위로 늘려서 테스트를 진행한다. 요청 Duration은 30분으로 설정한다. 성능 최적화 전/후 상황에서 서버가 감당 가능한 agent의 수를 찾는다.
Optional: 위 테스트 시나리오와 별도로 테스트 진행시 SQL이 예상한대로 날아가고 있는지(2번의 쿼리가 나가도록 개발했는데 3개가 나간다는 등) 테스트를 진행
테스트 주소는 GET: http://13.125.46.61:8080/api/products 로 진행
각 요청은 nGrinder Groovy 스크립트를 이용해 페이지 정보(offset, size)와 검색 키워드를 파라미터로 함께 전달
성능 최적화 전/후의 TPS, MTT(nGrinder에서 확인 가능)와 서버의 CPU, MEM 사용률을 측정 비교한다.
CPU, MEM 사용률을 편하게, 그래프화해서 보고싶다면 AWS에서 제공하는 모니터링 기능을 사용해도 괜찮다.
하지만, 본 프로젝트를 학습의 목적으로 진행하는 것이기 때문에 EC2 상에서 직접 shell script를 작성해 5초에 한번씩 CPU, MEM 사용률을 기록한다. (간단하게 하려면 도커로 오픈소스를 불러와 사용)
기대하는 테스트 결과
Postman을 이용해 간단한 테스트를 해봤을때, 최적화 이전에는 평균 1500ms의 응답시간을 보여주고 있고 최적화 이후에는 평균 50ms의 응답시간을 보여주었음. 따라서, 성능 최적화 이후의 테스트에서 TPS, MTT 지표가 더 좋게 나올것으로 예상함
CPU, MEM 사용률의 경우에는 측정 후 분석을 해봐야할 것 같음

3. WebSocket Connection 부하 테스트

위 자료들을 읽고난후… nGrinder로 WebSocket Connection/부하 테스트를 진행하기에는 관련 자료가 적을 뿐더러 최적화가 되어있지 않아 WebSocket 연결을 수행하는 별도의 스크립트 작성에 시간이 많이 들 것이라고 판단했습니다. 프로젝트 마감 기한이 얼마 남지 않아 WebSocket에 대한 테스트는 테스트 환경이 잘 구축되어 있는 Jmeter로 진행하고자 합니다.
!!!!!Jmeter를 이용한 WebSocket 테스트는 Jmeter에 대해 좀 알아봐야해서 아직 작성하지 못했습니다ㅜㅜ 서둘러 정리해서 시나리오 짜보겠습니다!
테스트 개요
작은 단위에서 시작해 시작해 connection, send 메세지 단위를 점차 늘려가는 방식으로 WebSocket의 테스트를 진행(ex: 초기 사용자 10명, send 메세지 10개)
테스트 환경
서버 환경: AWS EC2 > DockerImage로 구동되는 Spring서버
t2.micro: amazon linux 2023 ami / 1 vCPU / 1 GiB memory
Docker 24.0.7, Spring Boot 3.2.1
테스트 시나리오 설계
기대하는 테스트 결과
추후 시간나면 해볼 테스트 (추상적)