지난 2024년 10월 말, 회사를 다니는 내내 생각만 했던 CLI 기반 API 로드 테스팅 툴 '신기전' 프로젝트 개발을 마쳤습니다.
1. 신기전을 만들게 된 이유
당시 한 프로젝트를 진행하며 DB에서 많은 양의 데이터를 조회하고 가공하여 리턴하는 REST API 를 만들었었는데 이때 API의 속도가 조금 느려 클라이언트 화면에서 조금 버벅거렸던 일이 있었습니다. 이때 API 성능 테스트에 필요성을 느꼈고 찾아보기 시작했습니다.
성능 테스트를 해야겠다는 생각을 한 후엔 node 진영에서 가장 메이저한 Artillery 와 Postman 을 사용해봤습니다. 둘 다 만족스럽게 사용했습니다.
두 툴을 만족스럽게 쓰긴했지만 한편으로는 조금 더 빠르고 간편하게 테스트를 하고 싶다는 생각이 들었습니다. 당시 레거시 코드에 대한 리팩토링에 집중하고 있었는데, 리팩토링을 하며 작은 개선 사항에 대해 테스트를 자주 진행해보고 싶었기 때문이였습니다. 물론 Artillery와 Postman으로 잦은 테스트가 어려움이 있을 정도는 아니였습니다. 다만 cli 명령 하나로 계속계속 테스트를 돌리고 싶은 마음이 있었습니다.
이 필요성을 느꼈을 때 로드 테스팅 툴을 만들기 시작했습니다. 이름은 Artillery 와 Gatling 을 오마주해서 '신기전' 으로 정했습니다.
컨셉은 시작부터 끝까지 CLI를 사용하며 최대한 간단하고 빠르게 동작하는 툴로 정했습니다.
2. 신기전을 만들며
CLI 로 동작하는 프로그램을 만들기 위해 node로 CLI 부터 만들기 시작했습니다. 처음엔 CLI를 직접 구현해보고 싶어 블로그 글들과 zerocho님 강의를 보며 cli 프로그램을 만들어봤습니다.
CLI를 만들어보며 다양한 요구 사항을 받으려면 라이브러리를 사용하는 것이 좋겠다 생각했고, commander.js 와 inquirer.js 에 대해 알아보고 사용해봤습니다. 최종적으로 다양한 요구 사항을 받기 적합한 inquirer.js로 최종 선택했습니다.
CLI 로 테스트 요구 사항을 입력받을 땐 cli 에서 직접 받는 방식과 json 파일을 통해 받는 두 가지 방식을 사용했습니다. CLI로는 테스트 프토로콜(REST API or GraphQL)을 입력받았고 json 파일을 통해서는 테스트 상세 요구 사항(테스팅 시간, 초당 requst 횟수, http header, body(query) 등)을 받았습니다.
그 후엔 테스팅 함수과 결과 산정 로직을 만들었습니다. CLI로 받은 테스트 상세 요구 사항을 기반으로 타켓에 요청을 보내도록 테스팅 함수를 만들었으며 요청에 대한 응답 정보를 바탕으로 평균 응답속도, 최소/중간/최대 응답속도를 산출하는 로직을 만들었습니다.
3. 마무리
당시 REST API, GraphQL 에 이어 gRPC 까지 지원하도록 개발하려고 했는데 GraphQL까지만 개발하고 잠시 멈추기로 했습니다. gRPC 부터는 제가 실질적으로 사용할 일이 많지 않을 것 같아 흥미가 조금씩 떨어지더라구요. gRPC 를 사용할 일이 좀 더 많아지면 아마 이어 개발할 수도 있겠습니다.
어찌되었든 제가 원헀던 '쉽고 빠르고 간편한 로드 테스팅 툴' 이라는 컨셉에 충실한 '신기전' 개발을 잘 마무리했네요.
지금은 마음이 조금 식었지만 언젠가 다시 열정이 불타올라 gRPC도 지원하도록 개발하고 고도화도 해서 메이저한 툴로 도약하는 날이 왔음 좋겠네요.
'회고' 카테고리의 다른 글
'커머스 서비스로 배우는 NestJS 실전 개발' 완강 후기 (0) | 2025.04.07 |
---|---|
웹 사이트 버그 찾아서 제보한 후기 (0) | 2025.01.31 |