프로젝트를 진행하는데
문득 의문이 들었다..
내가 개발한 API의 성능은 과연 좋을까? 나쁠까?
그래서 성능 측정 Tool에 대해서 알아봤고!
가장 대중적이고 쉽게 사용할 수 있는 nGrinder 를 선택하여 사용해보기로 했다!
자! 오늘도 가보자!!
후비고~!~!~!
mkdir nGrinder
vi docker-compose.yml
version: '3.8'
services:
controller:
image: ngrinder/controller
restart: always
ports:
- "9001:80"
- "16001:16001"
- "12000-12009:12000-12009"
volumes:
- /ngrinder-controller:/opt/ngrinder-controller
agent:
image: ngrinder/agent
restart: always
links:
- controller
docker compose up -d
docker ps
초기 ID, PW : admin
Script Name : 사용자 임의 지정 script 이름
URL to be tested : 테스트하려는 API HTTP 메소드 & URL
기본으로 작성되는 Script 에서 변경하지 않고,
Validate 클릭 시 아래 Error가 없고, test 결과가 나온다면 성공입니다!
오..... 나도 이제 API 성능 측정을 할 수 있는 것인가..??!!!
그렇다..
우리는 이제 성능 측정을 통해서 내 API 성능을 확인할 수 있다!!!
하지만,, 아직 이정도로 할 수 있다고 말할 수 있겠는가?
nGrinder의 가장 큰 장점으로
Groovy script를 커스텀으로 직접 코드를 작성해서
API 성능 측정을 유연하게 할 수 있다는 것인데!!!
script 작성법과 요령에 관해서는 다른 자료를 찾아봐서 성능 측정을 해야할터!
하지만,
단순히 Get 요청 API 측정은 아래 text 메소드에
HTTPResponse를 여러 개 작성해서 성능 측정을 하면된다!
@Test
public void testMultipleAPIs() {
// 첫 번째 API 호출
HTTPResponse response1 = request.GET("https://서버주소/api/health-check", params);
checkResponse(response1);
// 두 번째 API 호출
HTTPResponse response2 = request.GET("https://서버주소/api/another-endpoint", params);
checkResponse(response2);
// 추가적인 API 호출이 필요한 경우 여기에 더 추가
}
private void checkResponse(HTTPResponse response) {
if (response.statusCode == 301 || response.statusCode == 302) {
grinder.logger.warn("Warning. The response may not be correct. The response code was {}.", response.statusCode);
} else {
assertThat(response.statusCode, is(200));
}
}
Agent : 방금 생성한 한 개의 script가 있기 때문에 1 입력
(적용할 script 개수)
Vuser per agent : 테스트할 사용자 수 입력하시면 됩니다.
(실행하는 controller 서버 사양에 따라 잘 조절하며 진행)
Duration : 테스트할 시간을 지정합니다.
(보통 저는 5-10분으로 측정합니다)
Save and Start : 오른쪽 위 파란 버튼 클릭 후 바로 실행하면 됩니다.
이렇게 nGrinder 를 사용해서 간단하게 API 성능 측정을 해보았다!
이제 진짜 내가 작성한 API 성능 측정을 하러가자!
근데, 테스트를 진행할 때 어떤 방법으로 해야할까?
뭐.... 자신의 상황에 따라서 테스트 하는 방법을 선택해야한다.
첫 번째 방법 : 단일 스크립트 내에서 여러 요청 처리
다른 API 엔드포인트를 순차적으로 호출하는 것은
코드를 간단하게 유지하고
한 세션 내에서 여러 요청을 테스트하고 싶을 때 유용하다.
두 번째 방법 : 별도의 스크립트로 분리
테스트를 독립적으로 실행하고자 할 때 좋은 방법이다!
이 방법은 병렬 실행을 용이하게 하고,
각 API 테스트의 관리를 단순화할 수 있습니다.
nGrinder에서는 테스트 스크립트마다
다른 설정(예: VUser 수, 파라미터 등)을 적용할 수 있으므로,
각 테스트 케이스의 요구 사항에 맞게 조정할 수 있습니다.
!! 결론 !!
테스트의 목적에 따라 적절한 방법을 선택해서 하면 될 듯..
간단한 API 성능 검증이 목적이라면 ?
한 스크립트에서 여러 요청을 처리하는 것이 좋을 수 있고!
더 복잡하거나 분리된 테스트가 필요하다면 ?
각 API에 대해 별도의 스크립트를 작성하고
에이전트를 조정하는 것이 효과적일 수 있겠다!
이제 API 성능에 대해서도 고려하면서 개발하는 개발자로
한층 더 성장할 수 있다는 것에 매우 기쁘다!!!
이제 프로젝트에서 JPA N+1 문제와 DB 접근을 최소화하여 성능을 개선시켰을 때,
실제로 수치로 확인을 하여 기록을 할 수 있다는 사실이 매우 신이난다!
빨리 개발하러 가야겠다!!
쓩~