SSAFY에서 관통 프로젝트를 할때였다..
한창 Jippy(플젝이름 맞음)를 개발하고 프로젝트 발표시간이 다가오기
일주일전, 갑자기 부하테스트를 진행하고 싶은 생각이 들어버렸다 ㅎㅎ
백엔드 개발자로서 내가 개발한 API서버가 얼마나 버틸지 궁금했고.
발표에서 시각화 자료와 함께 짠~ 하고 보여주고싶었다.
K6 vs JMeter 고민이다..
한참 고민하다가 K6를 사용하기로 했다.
JMeter는 GUI를 지원하지만 한번에 설정하는게 어려웠고
심지어 XML기반이라 작성하기도 어려웠다
하지만 K6는 javascript기반이여서 일단 스크립트가 되게 친숙했다(ㅋㅋ)
그래서 빠른시간안에 배워서 적용하기엔 K6가 유리해 보여서 사용했습니다.
이럴땐 자바스크립트가 또 반갑네 ㅎㅎ;;
// 엔드포인트들
const urls = [
"/api/calendar/1/select",
"/api/calendar/1/select/1",
"/api/qr/1/select",
"/api/dashboard/staff/1/totalStoreSalary",
"/api/dashboard/staff/1/storeSalary?date=2025-01",
"/api/feedback/1/select",
"/api/cash/1/select",
"/api/attendance/1/tempChange/list",
"/api/stock/1/select",
"/api/chat/1/select/1",
"/api/todo/1/select",
"/api/storeStaff/1/select",
"/api/storeStaff/staff/earn?storeId=1&yearMonth=2024-10",
"/api/store/select/1",
"/api/store/select/list",
"/api/product/1/select",
"/api/product/1/select/1",
"/api/product/1/fetch/month?targetYear=2024",
"/api/product/1/fetch/all?startDate=2024-01&endDate=2025-01",
"/api/payment-history/list?storeId=1",
"/api/payment-history/sales/day?storeId=1&startDate=2024-01-01&endDate=2024-07-01",
"/api/payment-history/sales/month?storeId=1&startDate=2024-01&endDate=2024-12",
"/api/payment-history/sales/week?storeId=1&startDate=2024-01&endDate=2024-20",
"/api/category/1/select",
];
엔드포인트를 일일히 적는게 매우 불편했다. 할일도 많고..
그러다가 갑자기 Swagger API 문서가 떠올랐다.
코드분석해서 API 문서 만들어주는거면, 코드 분석해서 스크립트 만들 수 있겠는데?
아무튼 프로젝트가 끝나고나서 바로 라이브러리 제작에 돌입했다.
정확히는 @RestController 어노테이션이 붙은 class 파일을 탐색했다.
만약 @RequestMapping("/api/user"), @PostMapping("/create")
있다면 http 메서드와, 엔드포인트, 패키지경로를 담는 객체에 저장했다.
=> /api/user/create, POST, com.kiki.org
그후 정렬했다.
우선순위에따라 정렬하여 사용자가 편하게 커스텀 할 수 있도록 집합화 하여
스크립트를 생성했다.
/* ========== com.nok.authenticationserver.domain.web.controller ========== */
res = http.post(`${baseUrl}/api/auth/login/memberInfo`,authLoginMemberInfoPayload, params);
check(res, { 'status was 2xx': (r) => r.status >= 200 && r.status < 300 });
res = http.post(`${baseUrl}/api/auth/login/password`,authLoginPasswordPayload, params);
check(res, { 'status was 2xx': (r) => r.status >= 200 && r.status < 300 });
res = http.post(`${baseUrl}/api/auth/login/pattern`,authLoginPatternPayload, params);
check(res, { 'status was 2xx': (r) => r.status >= 200 && r.status < 300 });
res = http.get(`${baseUrl}/api/auth/verify/member-id/ssafy1`);
check(res, { 'status was 2xx': (r) => r.status >= 200 && r.status < 300 });
res = http.get(`${baseUrl}/api/auth/voice/fetch/1`);
check(res, { 'status was 2xx': (r) => r.status >= 200 && r.status < 300 });
/* ========== com.nok.bank.web.controller ========== */
res = http.put(`${baseUrl}/api/bank`,bankPayload, params);
check(res, { 'status was 2xx': (r) => r.status >= 200 && r.status < 300 });
res = http.post(`${baseUrl}/api/bank/auth`,bankAuthPayload, params);
check(res, { 'status was 2xx': (r) => r.status >= 200 && r.status < 300 });
res = http.post(`${baseUrl}/api/bank/check-deposit`,bankCheckdepositPayload, para
이렇게 패키지별로 정리후 http메서드를 기준으로 한번더 깔끔하게 정렬하여
생성했다.
Java코드를 작성하기만 해도 K6부하테스트 스크립트의 초안을 만들어 주는 게
매리트는 있는 것 같다.
사용해 본 사람들이 후기 남겨주는 것도 감사하고, 뿌듯했다.
지인들도 프로젝트 진행하면서 각자 프로젝트에서 적용해봤다고 한다.
덕분에 버그, 피드백을 많이 수집할 수 있었다. 이번 특화프로젝트가 끝나면
버그픽스 + 사용자경험을 개선한 정식 릴리즈버전을 배포해야겠다.
Maven Central Repository에 직접 배포까지 진행해서. jar파일을
항상 가지고 다닐 필요가 없게 됐다 ㅎㅎ
작게나마 스프링개발자 생태계에 기여한 것 같아서 좋았다.