728x90
반응형
그럼 이제 실전에 들어가기 위한 준비를 해보겠다.
테스트 서버가 여러 개가 있다.
nGrinder 서버, API 서버, DB 서버 이렇게 세 개이다.
..... ?
이제 어떻게 해야하지?
나의 질문 부하테스트란 뭘까? ChatGPT 답변 ...... |
ChatGPT는 STEP 6가지를 주었고, 이걸 한 번에 따라가기는 버겁다.
하나씩 캐물어보겠다.
(기존에 나의 서버 정보 등을 ChatGPT에게 알려준 상태이다.)
우선 STEP 1부터.
1. API 서버 모니터링 설정
ChatGPT 답변 먼저, 부하 테스트 시 API 서버 성능을 실시간으로 모니터링 하기 위해 nGrinder 모니터링 에이전트를 설정해야 합니다. API 서버가 부하를 받을 때 CPU, 메모리, 네트워크 사용량 등을 확인할 수 있어야 합니다. API 서버에서 /.../.../... 디렉터리로 이동하여 xxxxxxx.sh 파일을 실행해 모니터링을 시작하세요. 이 xxxxxxx.sh 스크립트는 nGrinder 모니터링 에이전트를 실행하여 API 서버의 성능 데이터를 수집하게 됩니다. 나의 질문 여기서 있잖아, 저 쉘 스크립트를 실행하면 무슨 상황이 발생하는거야? 너 말대로 에이전트를 실행하여 API 서버 성능 데이터를 수집한다고 하잖아? 그럼 일단 데이터를 수집 준비를 하기 위한 단계인거지? 아직 어떠한 부하도 안 걸리는 거고? ChatGPT 답변 맞습니다! xxxxxxx.sh 스크립트를 실행하는 것은 API 서버의 성능 데이터를 모니터링 하기 위한 준비 작업입니다. 구체적으로 말하면, 이 스크립트는 nGrinder 모니터링 에이전트를 실행하여 API 서버에서 발생하는 CPU, 메모리, 네트워크 사용량 등의 성능 데이터를 실시간으로 수집할 수 있도록 설정하는 단계입니다. 이 때 중요한 점은 실제 부하가 가해지는 것이 아니라, 부하가 걸릴 때 서버의 성능을 기록할 준비를 하는 것입니다. 요약하자면, 위 쉘 스크립트를 실행하면 1) nGrinder 모니터링 에이전트가 활성화되어 API 서버의 성능 데이터를 수집할 준비를 합니다. 2) 이때 서버에 대한 부하는 아직 가해지지 않습니다. 3) 부하 테스트를 시작하게 되면, 에이전트가 부하가 걸리는 동안 실시간으로 성능 데이터를 수집하여 모니터링 할 수 있게 됩니다. 따라서, 부하가 발생하기 전 모니터링을 시작하는 단계이며, 이후 부하 테스트가 시작되면 수집된 데이터를 통해 서버가 부하를 어떻게 처리하는지 확인할 수 있습니다. |
2. nGrinder 서버 접속 및 테스트 준비
ChatGPT 답변 nGrinder 서버에 접속하여, 웹 UI를 통해 테스트 환경을 설정합니다. 먼저, 테스트 스크립트를 확인하세요. 팀원이 알려준 대로, xxxxxxx.groovy 스크립트가 있다면, 필요한 경우 API 호출 대상을 수정합니다. [Script] > xxxxxxx.groovy 에서 스크립트를 확인하고 수정이 필요하면 UI에서 바로 수정할 수 있습니다. 나의 질문 나는 이미 팀원한테 nGrinder에 대한 URL을 받았어. 그러면 내가 이 테스트 환경 설정은 하지 않아도 되는거지? 이 URL로 나는 nGrinder 서버에 접속해서 작업만 하면 되니까 ChatGPT 답변 네, 팀원에게 받은 URL은 nGrinder 서버에서 제공하는 웹 UI로 접속할 수 있는 주소입니다. 즉, 직접적으로 서버에 SSH 접속을 할 필요 없이 이 웹 UI에 접속해서 테스트 환경을 설정하면 됩니다. 정리하자면, (정리 생략) 따라서 URL을 통해 웹 UI로 접속하면 충분하며, 별도로 서버에 직접 SSH로 접속할 필요는 없습니다. 팀원이 이미 nGrinder 서버를 설정해두었고, 웹 UI를 통해 쉽게 접근할 수 있도록 준비해둔 것입니다. 나의 질문 nGrinder 설치 서버와 nGrinder 서버는 달라도 되나보네? nGrinder 설치는 API 서버에 되어있던데 ChatGPT 답변 네, nGrinder 설치 서버와 nGrinder 서버는 서로 달라도 됩니다. 즉, nGrinder 설치가 되어 있는 서버와 테스트를 수행할 서버(API 서버 등)는 구분되어도 괜찮습니다. nGrinder 구성 요소 nGrinder의 주요 구성 요소는 다음과 같습니다. 1) nGrinder Controller (nGrinder 서버): 웹 UI를 제공하고, 테스트 계획 수립, 실행, 결과 분석을 할 수 있는 중앙 관리 서버입니다. 사용자는 이 Controller를 통해 테스트를 설정하고, 에이전트들을 통해 부하를 발생시킵니다. 2) nGrinder Agent(부하 발생 서버): 실제로 부하를 발생시키는 역할을 합니다. 여러 개의 에이전트가 분산 환경에서 부하를 주는 시스템으로, API 서버나 테스트 대상 서버에 대해 가상 유저들이 요청을 보냅니다. nGrinder 설치는 API 서버와 같이 부하를 발생시키는 대상 서버에 설치될 수 있습니다. 현재 상황에서, nGrinder 서버(Controller): 당신이 접속하는 URL 주소가 nGrinder Controller 에 해당합니다. 이 서버는 테스트 관리 및 모니터링을 담당하는 서버입니다. API 서버(부하 테스트 대상 서버): 실제 부하를 발생시킬 서버로, nGrinder Agent가 설치되어 있을 가능성이 높습니다. 이 서버에서 성능 모니터링 에이전트를 실행하고, 부하 테스트를 통해 성능을 확인할 수 있습니다. 따라서, nGrinder 서버와 nGrinder 설치 서버(API 서버)는 서로 분리되어도 괜찮습니다. nGrinder 서버는 부하 테스트를 중앙에서 관리하고, API 서버는 실제로 부하가 발생하는 서버입니다. 나의 질문 아 내가 착각했네. API 서버에 설치한 건 에이전트구나? API 서버에 컨트롤러가 있는 줄 알았어. ChatGPT 답변 네, 맞습니다! API 서버에 설치된 것은 nGrinder 에이전트로, API 서버에서 성능 모니터링을 위해 설치된 것입니다. nGrinder Controller는 별도로 운영되는 서버로, 웹 UI를 통해 부하 테스트를 관리하고 설정하는 역할을 합니다. 에이전트는 API 서버에 설치되어 부하를 발생시키거나, 성능 모니터링 데이터를 수집하는 역할을 하고요. 착각하기 쉬운 부분인데, 이제 명확하게 이해하셨네요! (고마워...) API 서버는 에이전트가 설치된 부하 대상 서버이고 실제로 테스트를 관리하고 설정하는 Controller는 URL에서 사용하게 됩니다. 나의 질문 혹시, xxxxxxx.sh 쉘 스크립트를 통해 API 서버와 nGrinder 서버가 통신하는건가? 정보를 주고 받는? ChatGPT 답변 네, 정확합니다! xxxxxxx.sh를 실행하면 API 서버와 nGrinder 서버가 통신하게 됩니다. 이 통신은 API 서버에서 실행 중인 nGrinder 모니터링 에이전트가 nGrinder Controller 로 성능 데이터를 전송하는 역할을 합니다. 구체적으로 설명하면, 1) xxxxxxx.sh 실행: 이 스크립트를 실행하면 API 서버에서 nGrinder 모니터링 에이전트가 시작됩니다. 에이전트는 CPU 사용량, 메모리 사용량, 네트워크 상태 등 API 서버의 성능 데이터를 수집합니다. 2) nGrinder 서버와의 통신: 에이전트는 수집한 성능 데이터를 nGrinder Controller(웹 UI에서 접속하는 서버)로 주기적으로 전송합니다. 이 데이터를 기반으로 Controller는 실시간 모니터링 정보를 사용자에게 제공할 수 있습니다. 3) 성능 데이터 모니터링: nGrinder UI에서 Performance Report나 리포트 탭을 통해 실시간으로 API 서버의 성능 데이터를 확인할 수 있습니다. 이를 통해 부하 테스트 중 API 서버가 어떻게 반응하고 있는지 모니터링 할 수 있습니다. 결론적으로, xxxxxxx.sh 를 통해 API 서버에서 모니터링 에이전트가 작동하고, 이 에이전트는 nGrinder Controller와 통신하며, 실시간으로 성능 데이터를 주고받습니다. |
반응형
오 여기까지 이해했다.
그럼 세 번째는...?
3. 테스트 계획 및 설정
ChatGPT 답변 부하 테스트에 필요한 가상 유저 수, 테스트 시간 등을 설정해야 합니다. 예시로, 10명의 가상 유저가 2분 동안 API를 호출하도록 설정할 수 있습니다. nGrinder UI에서 [Performance Test] 메뉴로 이동한 후, [Project Name] 테스트를 선택하여 필요한 매개변수를 설정하세요. 만약 새로운 테스트를 실행하고 싶다면 기존 태스트를 Clone하여 파라미터를 수정하거나 새로운 스크립트를 생성할 수 있습니다. |
이미 시나리오는 짜놨고, 테스트할 샘플도 추출해두었다. 3번 부터는 테스트를 시작하면서 적용해야 할 부분인듯하다.
4. 테스트 실행
ChatGPT 답변 설정이 완료되었다면 테스트 실행을 진행합니다. 테스트가 실행되면, 분산된 에이전트들이 가상 유저를 생성해 API 서버로 요청을 보내며, DB 서버와의 상호작용을 통해 결과를 받게 됩니다. |
여기도 오케이. 부하 테스트 수행하면서 체감할 부분이다.
5. 결과 모니터링 및 분석
ChatGPT 답변 테스트가 진행되는 동안, API 서버의 모니터링 데이터(CPU, 메모리 사용량 등)를 확인하세요. nGrinder UI의 Performance Report를 통해 실시간으로 모니터링 할 수 있습니다. 테스트가 완료되면, Detail Report에서 성능 지표(응답 시간, TPS, 에러 비율 등)를 분석합니다. 여기에서 시스템의 성능 한계 및 병목 현상을 파악할 수 있습니다. 나의 질문 TPS가 뭐야? ChatGPT 답변 TPS는 Transaction Per Second의 약자로, 초당 처리되는 트랜잭션 수를 의미합니다. 부하 테스트에서 TPS는 시스템이 얼마나 많은 요청(또는 트랜젝션)을 1초에 처리할 수 있는지를 측정하는 중요한 성는 지표 중 하나입니다. TPS의 의미 Transaction: 하나의 트랜잭션은 일반적으로 API 요청 - 응답의 한 쌍을 뜻합니다. 예를 들어, 클라이언트가 서버에 API 요청을 보내고, 서버가 그 요청에 응답하는 과정이 하나의 트랜잭션입니다. Per Second: 1초 동안 서버가 처리할 수 있는 트랜잭션 수를 나타냅니다 TPS가 높을 수록 서버가 많은 양의 트래픽을 빠르게 처리할 수 있다는 것을 의미합니다. TPS가 중요한 이유 TPS는 시스템이 동시 처리 능력을 평가하는 데 중요한 지표입니다. 부하 테스트를 통해 서버가 일정 TPS 이상에서 정상적으로 작동하는지, 혹은 TPS가 높아질 때 응답 시간이나 에러율이 증가하는지를 확인할 수 있습니다. 서버의 성능 한계를 파악하는 데도 중요한데, TPS가 특정 입계점에 도달했을 때 성능이 급격히 저하되거나 에러가 발생하면, 그 임계점이 서버의 최대 처리 용량이 될 수 있습니다. TPS 분석 예시 예를 들어, 부하 테스트 결과에서 TPS가 100이라고 나오면, 서버는 1초당 100개의 트랜잭션(요청-응답)을 처리할 수 있다는 의미입니다. 만약 테스트 중 TPS가 증가하면서 응답 시간이 길어지거나 에러가 발생한다면, 그 지점이 시스템의 성능 한계일 가능성이 있습니다. 결론적으로, TPS는 서버의 처리 성능을 측정하는 핵심 지표로, 부하 테스트를 통해 시스템의 처리 용량을 평가하고 병목 현상을 파악하는 데 매우 유용합니다. |
728x90
6. 테스트 결과 검토 및 반복
ChatGPT 답변 만약 결과가 기대한 성능에 미치지 못하거나, 특정 구간에서 병목 현상이 발견되었다면, 테스트를 수정하여 다시 실행합니다. 가상 유저 수, 테스트 시간, 호출하는 API 등을 조정하면서 반복적인 테스트를 통해 최적화된 시스템 성능을 확인할 수 있습니다. |
오 이해했다.
내일 다시 한번 복습하고, 서버에 직접 들어가서 내용을 파악해보아야겠다.
728x90
반응형
'혼자 공부하기 > 개발 스터디' 카테고리의 다른 글
[Cursor AI] Cursor AI 시작하기 - 홈페이지 둘러보기(Features) (0) | 2024.09.28 |
---|---|
[Cursor AI] Cursor AI 시작하기 - Intro. (0) | 2024.09.28 |
처음 해보는 부하 테스트(nGrinder) - (4) (0) | 2024.09.26 |
처음 해보는 부하 테스트(nGrinder) - (3) (0) | 2024.09.23 |
처음 해보는 부하 테스트(nGrinder) - (1) (0) | 2024.09.21 |