개발자
최근 성능 테스트의 중요성에 대해 알게 되어서 목표 성능치를 두고 부하테스트를 진행해보려는 계획에 있습니다! 테스트 툴로는 nGrinder를 사용할 생각인데요, 문제는 제 서버가 이메일 로그인을 지원하지 않고 oauth2와 jwt를 활용한 인증/인가 방식을 사용하는데 부하테스트 시 가상 유저에게 어떻게 accessToken을 발급해주어야 하는지에 대한 궁금증이 생겼습니다..! 제가 생각해본 방식들은 다음과 같습니다. 1. 실제 유저에 대한 accessToken을 하나 발급해두고 이를 고정값으로 사용한다. - 이 방식은 제일 편하지만 사실상 한명의 유저에 대한 시나리오만 테스트할 수 밖에 없고, 같은 유저에 대한 각종 캐싱된 데이터들로 인해 실제 상황과는 동떨어진 작업이 될 것 같아 채택하지 않았습니다. 2. FakeAuthServer와 같은 가상의 OAuth 서버를 만들어 로그인을 시도한다. - 구현하기는 어려워보이지만 그나마 가장 실제 서비스와 동일한 형태입니다. 하지만, 제가 테스트하려는 시나리오는 여러 요청에 대한 순차적인 테스트가 아닌 하나의 API가 얼마나 많은 부하를 견딜 수 있는지 보기 위한 테스트라서 굳이 로그인 과정을 테스트에 포함시킬 필요는 없어보입니다.. - 사실 하나의 API에 대한 테스트만 진행해도 괜찮은지 몰라서 이 방법을 버리지 못하고 있습니다 3. nGrinder의 테스트 스크립트에서 @BeforeThread에 jwt를 발급받는 로직을 작성해서 테스트 전 미리 토큰을 발급받아 요청한다. - 이 방식은 로그인 과정은 포함되어 있지 않고 이미 토큰을 발급받았다는 가정하에 하나의 API만 테스트하기 가장 적합한 방법이라고 생각이 되었습니다. - 번거롭지만 jwt를 직접 생성해주기 위해 jjwt 라이브러리를 nGrinder에 포함시켜야 될 것 같습니다 - 하지만 이렇게 스크립트에서 토큰을 발급해주는게 맞는지 실무에서도 이런식으로 사용하는 경우가 있는지 궁금합니다.. 처음 부하 테스트를 적용하려고 하는데 oauth2 + jwt로만 구성된 예제가 보이지 않네요 ㅠㅠ 어느 방법이 가장 적절한지 혹은 더 나은 방법이 있는지 조언을 구하고자 질문 남깁니다!
답변 0
첫 답변을 기다리고 있어요.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 09월 18일
OAuth2와 JWT를 이용한 부하 테스트에 대한 고민이 깊으시군요. 부하테스트는 시스템이 어떤 수준의 부하를 얼마나 오래 견딜 수 있는지 판단하기 위해 이루어져야 하고, 그렇기 때문에 말씀하신 방법들 중 3번째 방법을 추천드립니다. 즉, nGrinder의 테스트 스크립트에서 @BeforeThread에 JWT를 발급받는 로직을 작성해서 테스트 전 미리 토큰을 발급받아 요청하는 것입니다. 1번째 방법은 말씀해주신대로 같은 유저에 대한 캐싱된 데이터들로 인해 실제 상황과 동떨어진 결과를 얻을 수 있습니다. 2번째 방법도 구현이 복잡하고, 로그인 과정까지 포함할 필요가 없다면 굳이 선택하지 않아도 될 것 같습니다. 3번째 방법은 스크립트에서 토큰을 발급하는 것으로 비교적 간단히 구현할 수 있고, 다양한 사용자의 접근을 모사할 수 있다는 장점이 있습니다. 실제로 목표하는 API에 대한 부하 테스트를 위해서는 각기 다른 사용자가 접근하는 것을 시뮬레이션하는게 중요합니다. 실무에서도 이런 방식을 적용하는 경우가 있습니다. 특히 부하테스트 도구 자체에 대한 이해와 그 밖의 상황에 따라 적절한 방법은 달라질 수 있으니, 상황에 맞춰 유연하게 접근하시는 것이 좋습니다. 다만, 로그인 과정 없이 JWT 토큰만으로 API 요청을 하는 것은 실제 서비스에서의 유저 사용 패턴과 다르므로 이 부분은 고려해야 할 사항입니다. 만약 로그인 과정까지 포함된 부하 테스트가 필요하다면 OAuth 서버를 모사하는 방법도 고려해보셔야 합니다. 마지막으로, jjwt 라이브러리를 사용하여 JWT를 생성하는 것도 하나의 방법인데, 이 부분은 개발 환경과 프로젝트 사양 등 여러 요소를 고려하여 결정하기 바랍니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!