본문 바로가기

혼자 공부하기/개발 스터디

처음 해보는 부하 테스트(nGrinder) - (1)

728x90
반응형

 

부하 테스트가 뭔지도 몰랐다. 물론 흐름과 내용은 알고 있지만, 어떻게 하는지 아예 모르는 백지 상태이다.

내가 맡은 일이라고 하니 일단 진행해본다.

부딪혀가며 업무를 쳐내는 재미로 지내는 것 같다.

 

본 스터디는 ChatGPT와 여러 블로그를 참고할 예정이다.

 

 

먼저 근본적인 흐름부터 공부하는 김에 정리해보겠다.

부하 테스트란?

나의 질문
부하테스트란 뭘까?


ChatGPT 답변
부하 테스트(Load Testing)는 시스템에 실제로 부하를 가했을 때 시스템이 어떻게 반응하는지 평가하는 일종의 성능테스트입니다. 이 테스트의 목적은 정상적인 사용 환경에서 시스템이 어느 정도의 부하를 견딜 수 있는지를 파악하는 것입니다. 구체적으로는 다음과 같은 것들을 확인합니다.

1. 동시 처리 능력: 부하 테스트는 동시 접속 사용자 수가 증가할 때 시스템이 그 부하를 어떻게 처리하는지를 측정합니다. 예를 들어, 웹 서비스라면 많은 사용자들이 동시에 요청을 보낼 때 응답 속도가 어떻게 변하는지 확인합니다.

2. 성능 한계 확인: 시스템이 최대 부하를 견디는 한계점을 파악합니다. 부하가 일정 수준을 넘겼을 때 응답 시간이 느려지거나, 오류가 발생하거나, 시스템이 다운되는 현상을 관찰합니다.

3. 시스템 자원 사용량 분석: 부하가 가해졌을 때 CPU, 메모리, 네트워크 대역폭 등 시스템 자원의 사용량을 확인합니다. 시스템이 얼마나 효율적으로 자원을 활용하는지, 자원 부족으로 인한 성능 저하가 발생하는지를 확인할 수 있습니다.

4. 응답 시간 측정: 부하가 커질수록 시스템의 응답 시간이 어떻게 변화하는지를 측정합니다. 이는 사용자 경험에 큰 영향을 미치기 때문에, 사용자 요청에 대한 응답 시간이 과도하게 길어지는지 확인하는 것이 중요합니다.

5. 안정성 검증: 시스템이 부하를 견디는 동안 얼마나 안정적으로 운영되는지를 평가합니다. 예를 들어, 서버가 멈추지 않고 계속 운영되는지, 오류가 발생하더라도 복구가 가능한지를 확인합니다.

6. 병목현상 발견: 부하가 발생할 때, 병목 현상이 어디에서 발생하는지를 확인합니다. 이는 시스템의 성능을 저하시키는 특정 자원(CPU, 메모리, 네트워크 등)이 무엇인지 파악하는 데 도움을 줍니다.

7. 실제 사용 환경 시물레이션: 부하 테스트는 실제 사용자가 접속하는 환경을 시뮬레이션 하여, 시스템이 다양한 시나리오에서 어떻게 동작하는지를 확인하는 데 유용합니다. 이를 통해 예기치 못한 오류나 문제를 미리 발견할 수 있습니다.


즉, 부하 테스트의 결과로 얻을 수 있는 것
 - 성능 한계 및 개선이 필요한 부분
 - 예상 트래픽 대비 서버의 안정성
 - 자원 사용 최적화 여부
 - 시스템의 처리 용량과 확장성

정리하면, 부하테스트는 시스템의 성능과 안정성을 평가하고, 이를 통해 시스템이 실제로 사용할 환경에서 적절하게 운영될 수 있는지를 검증하는 과정입니다.

 

 

 

반응형

 

 

 

그럼 내가 테스트할 nGrinder는...?

 

 

nGrinder?

나의 질문
부하테스트란 뭘까?


ChatGPT 답변
부하 테스트( der는 오픈 소스 성능 테스트 툴로, 분산 부하 테스트를 수행하는 데 사용됩니다. 주로 웹 애플리케이션, API 서버, 데이터베이스 등의 성능을 테스트하기 위한 목적으로 사용되며, Java 기반의 스크립트를 통해 가상 유저를 생성하고 다양한 테스트 시나리오를 실행할 수 있습니다.


nGrinder의 주요 특징
1. 분산 부하 테스트: nGrinder는 여러 에이전트(agent)를 활용한 분산 테스트를 지원합니다. 즉, 여러 서버에서 동시에 가상 유저를 발생시켜 대규모 부하를 테스트할 수 있습니다. 이를 통해 실제로 수천에서 수만 명의 사용자가 접속하는 환경을 시뮬레이션 할 수 있습니다.

2. 쉽고 직관적인 웹 기반 UI: nGrinder는 웹 기반 사용자 인터페이스(UI)를 제공하여, 테스트 계획을 세우고 테스트를 실행하며, 그 결과를 분석하는 모든 과정을 웹에서 쉽게 수행할 수 있습니다. 사용자는 테스트 스크립트를 웹 UI에서 작성하고 관리하며, 부하 테스트 시 다양한 설정(가상 유저 수, 테스트 시간 등)을 지정할 수 있습니다.

3. 다양한 프로토콜 지원: HTTP, HTTPS, TCP 등 다양한 프로토콜을 지원하여, 웹 애플리케이션 뿐만 아니라 다양한 시스템의 부하 테스트를 할 수 있습니다. 특히 API 서버에 대한 부하 테스트나 성능 평가를 쉽게 할 수 있습니다.

4. 스크립트 기반 테스트 자동화: Groovy 또는 Jtyhon과 같은 스크립트 언어를 지원하며, 반복적이고 복잡한 시나리오를 자동화 할 수 있습니다. 이를 통해 사용자는 다양한 테스트 시나리오(예: 특정 API에 반복 호출, 다양한 요청 및 응답 데이터 처리 등)를 미리 정의할 수 있습니다.

5. 성능 모니터링 기능: 테스트 중에 서버의 CPU, 메모리, 네트워크 사용량 등 시스템 자원을 실시간으로 모니터링할 수 있습니다. 이를 통해 부하 테스트 중 서버가 어떻게 반응하는지를 직접 확인할 수 있습니다. 또한 모니터링을 통해 성능 병목 현상을 쉽게 발견할 수 있습니다.

6. 테스트 결과 분석 및 리포팅: nGrinder는 테스트 결과를 시각화하여 제공하며, TPS(Transaction Per Second), 응답 시간(Response Time), 에러 비율(Error Rate) 등의 다양한 성능 지표를 확인할 수 있습니다. 각 테스트 결과는 디테일 리포트로 제공되며, 이를 통해 시스템의 성능을 상세히 분석할 수 있습니다.

7. 확장성과 유연성: nGrinder는 에이전트를 여러 대 추가할 수 있기 때문에 부하의 크기에 따라 테스트 규모를 자유롭게 조정할 수 있습니다. 또한 사용자는 자신만의 커스텀 스크립트나 모니터링 설정을 통해 테스트 환경을 맞춤 구성할 수 있습니다.


nGrinder 사용 과정
1. 테스트 스크립트 작성: nGrinder UI 에서 부하 테스트 스크립트를 작성합니다. 예를 들어 Groovy 스크립트를 사용해 특정 API에 대해 가성 유저들이 보내는 요청을 정의합니다.

2. 테스트 설정: 가상 유저 수, 테스트 시간, 테스트 간격 등 다양한 매개변수를 설정합니다. 이때, 분산된 여러 에이전트를 활용해 다수의 가상 유저를 생성할 수 있습니다.

3. 모니터링 설정: 테스트 중인 서버의 CPU, 메모리 등의 자원을 모니터링 하기 위해 *****.sh 와 같은 스크립트를 실행합니다. 이를 통해 부하 테스트 중에 서버 자원의 사용량을 실시간으로 확인할 수 있습니다.

4. 부하 테스트 실행: nGrinder UI에서 부하 테스트를 실행하고, 분산 에이전트들이 동시에 가상 유저를 생성해 테스트를 수행합니다.

5. 결과 분석: 테스트가 완료되면 nGrinder에서 제공하는 디테일 리포트와 성능 보고서를 확인하여, 시스템의 응답 시간, TPS, 에러 비율 등을 분석합니다.



nGrinder의 장점
 - 확장성: 분산 에이전트 구조 덕분에 대규모 부하 테스트를 손쉽게 확장할 수 있습니다.
 - 사용 편의성: 웹 기반 UI로 사용자가 쉽게 접근하고 테스트를 설정할 수 있습니다.
 - 커스터마이징: 다양한 프로토콜 지원과 스크립트 기반의 테스트 시나리오 설정으로 유연하게 테스트를 구성할 수 있습니다.
 - 모니터링과 리포팅: 실시간으로 서버 자원을 모니터링하고, 상세한 리포트로 성능을 분석할 수 있습니다.


nGrinder는 이러한 특징 덕분에 기업 환경에서 안정성과 확장성을 검증하기 위한 부하 테스트 도구로 자주 사용됩니다.



나의 질문
대충 알겠어. 근데 여기서 Goovy나 Jython이 뭐야? 느낌상 Jython은 Java + Python 느낌인데... 나는 Groovy는 본 적 있어. xxxxxx.groovy 이런 형식으로 되어 있던 것 같아.


ChatGPT 답변
맞아요, JythonGroovy는 모두 Java 기반에서 동작하는 스크립트 언어들입니다. 간단히 설명하자면

1. Jython
 - 네, JythonJava + Python의 조합입니다. 정확히 말하면, PythonJava Virtual Machine(JVM)에서 실행할 수 있도록 만든 언어입니다. 즉, Python 코드를 JVM에서 실행할 수 있게 해주는 툴이에요. 
 - Jython의 장점은 Java 라이브러리를 직접적으로 호출하거나 사용할 수 있다는 것입니다. 이 때문에 Python생산성Java확장성을 동시에 누릴 수 있어요.
 - 예를 들어, Jython을 사용하면 Python의 간결한 문법으로 Java 라이브러리를 호출해 부하 테스트 시 필요한 여러 기능을 빠르고 쉽게 사용할 수 있습니다.

2. Groovy
 - GroovyJVM 위에서 실행되는 동적 스크립트 언어입니다. Java와 유사한 문법을 사용하면서도 더 간결하고 유연한 문법을 지원하여, Java와의 호환성을 유지하면서 더 쉽게 코드를 작성할 수 있습니다.
 - Groovy는 Java보다 문법이 간결하고, Java 코드와 상호 운용성이 뛰어나기 때문에, Java 개발자들이 빠르게 익숙해질 수 있습니다. 동시에, 동적 타입을 지원하여 스크립트를 더 유연하게 작성할 수 있습니다.
 - xxxxxxxx.groovy 파일은 Groovy로 작성된 코드 파일이에요. Java와 거의 동일한 코드 구조를 따르지만, 더 간결하게 쓸 수 있다는 것이 Groovy의 큰 장점입니다.



둘의 차이점
 - JythonPython 문법을 사용하는 반면, GroovyJava 문법과 유사하면서도 더 간결한 언어입니다.
 - Jython은 주로 Python 개발자들이 JVM 환경에서 작업할 때 유용하고, GroovyJava 개발자들이 더 빠르게 스크립트를 작성할 때 유용합니다. 
 - nGrinder에서는 Groovy가 기본적으로 많이 사용되는데, 그 이유는 Groovy가 Java와 의 호환성이 뛰어나고, 부하 테스트 스크립트를 작성하기에 적합하기 때문이에요.


결론적으로, nGrinder에서 부하 테스트 스크립트를 작성할 때는 주로 Groovy를 사용하게 될 텐데, Groovy는 Java 개발자가 쉽게 사용할 수 있으면서도 더 빠르게 코드를 작성할 수 있게 도와주는 언어입니다.

 

 

728x90

 

 

 

음 대충 흐름 이해 완료.

이제 업무 내용 뜯어보면서 실제 nGrinder를 사용할 준비를 해봐야겠다.

728x90
반응형