본문 바로가기

오류일기

[nGrinder] 스크립트 검증 도중 Connection refused(feat. nGrinder 아키텍쳐, 터널링)

상황

nGrinder를 통해 테스트 스크립트를 작성하고 있었습니다 해당 로직은

  1. 로그인 요청
  2. 단순 로직 요청
  3. 로그아웃

이렇게 나누어져 있었습니다. 그리고 IDE에서는 다음과 같이 녹색불이 뜨며 올바르게 동작하였습니다

인텔리제이에서 실행한 모습입니다.

그러나... nGrinder 스크립트 작성창에서는 다음과 같이 나왔습니다.

Connection refused라고 나와있습니다.

 

그리고 이는 방화벽에 막혀있거나 엉뚱한 URI로 요청을 보낼시 다음과 같이 나옵니다... 

아니 분명 인텔리제이에서는 잘 되었는데... nGrinder에서는 왜...?? 라는 생각이 들었습니다.

그러나 다행히도 이러한 문제를 잘 설명해놓은 블로그 글이 있었고 이를 참고하여 문제를 해결하였습니다.

 

https://ordilov.github.io/posts/ngrinder%20%EB%A1%9C%EC%BB%AC%EC%97%90%EC%84%9C%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95

 

Ordinary

nGrinder 로컬에서 사용하는 방법nGrinder nGrinder는 서버 부하 테스트를 위한 오픈 소스입니다. 테스트를 위해 실제 사용할 서버로 구성해야 하겠지만, 로컬에서 단순하게 사용법을 익혀보겠습니다.

ordilov.github.io

 

사전지식

위의 블로그 내용을 토대로 설명을 하기이전에 nGrinder의 아키텍처에 대한 짧은 이해가 필요합니다.

아래 사진은  nGrinder의 아키텍쳐 입니다. (물론 간략하게 개념을 나타낸 것으로 자세한 아키텍쳐가 궁금하신분들은 공식 깃헙에 가시면 더 많은 자료들을 확인할 수 있습니다.)

더보기

세부적인 내용인 담긴 아키텍쳐입니다.

nGrinder 공식 git Hub에서 가져온 이미지 입니다.

nGrinder는 controller가 여러대의 agent를 가지고 해당 agent는 target 서버에 요청을 보냅니다. 각각의 역할은 다음과 같습니다.

  • controller: 사용자로부터 테스트 요청을 받아들이고 테스트를 관리할 하나의 콘솔과 여러개의 agent를 하나로 묶어서 테스트를 수행합니다.
  • agent: 컨트롤러의 요청을 받아서 실질적으로 테스트를 수행합니다.
  • Target: 사용자가 테스트를 하고 싶어하는 서버를 의미합니다.

추가로 agent는 커넥션 풀처럼 미리 만들어 놓고 controller의 콘솔 에 할당하는 방식으로 nGrinder는 동작합니다. (톰캣의 스레드 풀을 생각해보시면 이해가 빠릅니다.)

 

원인

이제 문제가 발생한 원인에 대해 이야기를 해보자면 실행 시키는 것은 동일한 로컬 머신에서 실행한다 하더라도 nGrinder 아키텍쳐상 agent, controller, target는 서로 다른 가상의 머신에서 실행됩니다. 그렇기에 agent에서 Localhost혹은 127.0.0.1을 이용하면 target이나 controller이 아닌 agent 자신을 가리키는 것이 됩니다.

 

해결 방법

target이 동작하고 있는 머신의 공인 IP를 알아낸후 포트 포워딩을 하여 테스팅을 하거나.. 혹은 터널링을 이용하면 됩니다...! 자세한 내용은 아래의 포스팅을 참고해주시기 바랍니다.

https://goto-pangyo.tistory.com/277

 

터널링(feat. ngrok 설치)

상황 개인 프로젝트를 하다 막히는 부분이 생겼습니다. 물리적으로는 동일한 머신에서 수행하지만 소프트웨어적으로는 서로 분리되어 있으며 분리되어 있는 머신간에 통신을 해야 했습니다.

goto-pangyo.tistory.com

 

그러면 다음과 같이 성공하게 됩니다..!