일상적 이야기들.

LoadImpact/K6 본문

프로그래밍/GOLang

LoadImpact/K6

noveljava 2021. 7. 28. 12:09

https://k6.io/

[

Load testing for engineering teams | k6

k6 is an open-source load testing tool and cloud service providing the best developer experience for API performance testing.

k6.io

](https://k6.io/)

개요

"과부하테스트" 혹은 "스트레스 테스트"라는 용어를 들어보셨나요?

제품의 성능을 테스트 하기 위해서, 최악의 상황에서 제품이 어느정도 버티는지 혹은, 제품이 가진 성능의 한계를 알기 위해서 하는 테스트입니다.

네트워크를 이용하는 프로그램의 경우에는 이러한 지표가 매우 중요합니다. 실 서비스에서 익명의 수많은 유저들이 이용할 시에 서비스가 몇명까지 버틸 수 있는지 혹은, DDoS 공격을 받을 시에 얼마만큼 버텨줄 수 있는지에 대해서 미리 알고 있어야 대응이 가능하기 때문입니다.

이러한 테스트를 위한 도구가 여럿 있는데, 제가 아는 것은 네이버에서 제공하는 "nGrinder"와 "K6" 제품입니다.

둘 모두 네트워크 성능을 테스트하기 위한 제품이고, 이를 위해서 개발자 혹은 테스터가 부하를 주기 위한 Script를 작성하여 테스트에 임할 수 있습니다.

사용법

K6의 사용법은 간단합니다.

테스트에 사용할 Script를 작성을 하고, 프로그램 수행 시에 Script의 경로를 입력해줌으로써, 테스트를 진행하게 됩니다.

https://k6.io/docs/using-k6/http-requests/

이 때, payload에 관련된 부분들을 작성하게 되는데 테스트 환경에 따라서 payload를 Script만으로 처리하지 못하는 경우가 발생하게 됩니다. 해당 Javascript는 nodejs와 같은 javascript 수행 환경에서 돌아가는 것이 아니라 Golang 기반의 언어에서 수행을 하기 때문에 Javascript상에서 외부 라이브러리가 필요하다면, 그 필요한 라이브러리의 코드 부분들을 모두 Golang에 올려줘야한다.

그렇기에 예전에 사용할때는 바벨을 이용하여, 필요한 모든 라이브러리의 코드가 포함된 테스트용 스크립트를 뽑았었습니다. (https://babeljs.io/)

근데 실질적으로 해당 방법이 좋은 방법은 아니더군요. 속도가 느리고 Test Code를 수정할때마다 번거로움이 발생을 하였습니다.

그래서 저는 다른 방법을 이용하여서, Payload를 생성할 수 있도록 변경을 하였습니다.

프로젝트 구조

https://github.com/grafana/k6

K6의 소스코드를 보게 되면, Js 폴더가 보입니다. 해당 소스코들이 Javascript를 의미하는 것이 아니라, 개발자 혹은 테스터들이 사용할 Javascript에서 사용가능한 Library를 의미하게 됩니다.

사용법에서 공식 사이트 링크에보면, import http from 'k6/http' 코드가 있습니다. 이는 Javascript에서 제공하는 코드가 아닌 k6 프로젝트에서 제공하는 함수로, "js" 폴더에 들어가면 있게 됩니다.

 

이제 Javascript에서 호출되는 소스코드에서 Golang의 소스코드가 대략적으로 호출되는 모습을 알 수 있게 되었습니다.

그렇다면, 개발자가 Golang 소스코드를 생성하고 프로젝트에 어떻게 적용하는지 알아보도록 하겠습니다.

 

프로젝트의 구조를 살려주기 위해서, Javascript에서 사용할 소스코드를 /js/modules/k6 폴더 밑에 생성을 해주도록 하겠습니다.

저는 편의상 test_code라는 이름으로 폴더를 생성해주었습니다.

이렇게 폴더를 생성하고, 필요한 코드들을 해당 폴더 밑에서 작성을 하면 됩니다.

그렇다고 여기서 끝나는 것은 아닙니다. K6에서 추가된 모듈에 대한 정보가 필요하므로, 모듈에 대한 정보를 등록 시켜줘야합니다.

 

js 폴더밑에 modules.go파일에, 새로이 추가된 폴더 이름, test_code로 줄을 추가시켜줍니다.

 

이렇게 하므로써, 이제 테스트용으로 작성된 Js에서 저희가 작성한 Golang의 함수를 호출하여 사용할 수 있게 되었습니다.

 

마치며

글을 작성하면서, 확인을 해본 결과 6개월 전이랑 프로젝트 구조가 변경이 되고, 프로젝트의 repository도 변경이 된 것을 확인을 하였습니다.

loadimpact/k6 에서 granfana/k6 로 변경이 되었고, 이에 따라 소스코드가 약간 변경이 됨을 확인을 하였습니다.

모듈 추가 부분이 조금 더 명확하게 변경이 되었는데, 이 부분은 차후에 테스트를 해보고 새로운 글로 작성하도록 하겠습니다.

 

'프로그래밍 > GOLang' 카테고리의 다른 글

Conf, Init 파일 사용하기  (0) 2021.11.09
Comments