성능 분석이란?

성능 테스트

  • 실제 트래픽 상황에서의 정상 동작 하는지를 파악.

부하 테스트

  • 리소스 병목 탐색, 어플리케이션 버그 탐색
  • 이벤트 상황과 같은 순간 트래픽 최대치, 한계치를 탐색
  • 신규 스펙 장비에서 MYSQL 설정 최적화 탐색

스트레스 테스트

  • 장기간 부하 발생에 대한 한계치를 탐색, 예외 동작 상황 확인
  • Graceful Shutdown 정상 동작 확인
  • 데이터베이스 failover 상황, 자동 복구, 예외 동작 상황 확인
  • 외부 요인(PG사)의 밀릴, 예외 상황 동작 확인

성능 분석을 하는 이유

  • 서비스 및 서비스 시스템의 성능을 확인하기 위해 실사용 환경과 비슷한 환경에서 테스트를 진행하는 것
    • 어느 정도의 부하를 견딜 수 있는지
    • 한계치에서 병목이 생기는 지점 찾기
    • 자원을 효율적으로 사용할 수 있다.
    • 메모리 누수, 오류, 오버플로우 발생하는지 확인 가능
    • 최악의 상황에서 어떤 동작을 하는지 확인 가능
    • 장애 조치와 복구의 동작을 확인 가능
  • 구글 리서치 자료에 따르면 3초 이상 걸리면 53%의 사용자가 떠나며, 표시 속도가 1초에서 7초로 늘어난다면 이탈률은 113%가 된다고 함
 

Mobile conversion rate statistics - Think with Google

Google’s Official Mobile Marketing Publication. Mobile conversion rates are lower than on desktop. Get more mobile data on Think with Google.

www.thinkwithgoogle.com

→ 웹 성능테스트를 통해 사용자에게 빠른 서비스를 제공할 수 있어야 한다.

성능 테스트의 기대 효과

  1. 시스템 측면 : 주요 성능 결함 및 구조적 위험 우선 식별, 운영시스템 성능 최적화, 유지보수 비용 및 시
    스템 비용 최소화 등
  2. 사용자 측면 : 서비스의 품질 개선, 응답시간 향상을 통한 업무 효율 증대, 사용자 만족도 향상 등

nGrinder

 

nGrinder

Please post questions in Discussions not Issues. nGrinder 3.5.5-p1 version is now available. Check the changes at here. nGrinder is a platform for stress tests that enables you to execute script creation, test execution, monitoring, and result report gener

naver.github.io

  • nGrinder는 네이버에서 성능 측정 목적으로 jython(JVM위에서 파이썬이 동작)으로 개발 된 오픈소
    스 프로젝트이며,2011년에 공개 됨.
  • 실제 서비스에 투입 되기 전, 실제와 같은 환경을 만들어 놓고 서버가 사용자를
    얼마 만큼 수용할 수 있는지를 실험 할 때 사용
  • 언어로는 jython (java + python)과 Groovy(자바 호환)를 지원.

Controller

  • 퍼포먼스 테스팅(부하테스트)를 위해 웹 인터페이스를 제공
  • 테스트 프로세스를 체계화
  • 테스트 결과를 수집해 통계로 보여줌

Agent

  • Controller의 명령을 받아 실행.
  • target이 된 머신에 프로세스와 스레드를 실행시켜 부하를 발생.
  • 대상 시스템의 CPU와 Memory를 모니터링.

Target

  • 부하 테스트를 받는 머신

설치 방법

  • controller와 agent를 둘다 설치해야 한다.

docker를 사용하는 방법

  • 운영 체제별 도커 데스크탑 설치
 

Docker Desktop: The #1 Containerization Tool for Developers | Docker

Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.

www.docker.com

  • 우분투 도커 설치
 

Ubuntu 에 Docker 설치

실행환경 Ubuntu 22.04 Docker 설치방법 1. 우분투 시스템 패키지 업데이트 sudo apt-get update 2. 필요한 패키지 설치 sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common 3. Docker의

haengsin.tistory.com

  • controller 설치 및 실행
# docker hub에서 이미지 가져오기
docker pull ngrinder/controller

# 가져온 이미지로 실행하기
docker run -d -v ~/ngrinder-controller:/opt/ngrinder-controller --name controller -p 80:80 -p 16001:16001 -p 12000-12009:12000-12009 ngrinder/controller
  • agent 설치 및 실행
# docker hub에서 이미지 가져오기
docker pull ngrinder/agent

# 가져온 이미지로 실행하기
# 위에서 생성했던 controller와 연결
docker run -d --name agent1 --link controller:controller ngrinder/agent

직접 파일을 다운로드해서 실행시키는 방법

이 경우에 자바를 사용해야한다.

  • 자바 다운로드
 

Java를 설치하는 방법은 무엇입니까?

 

www.java.com

  • nGrinder 다운로드
    • 받고싶은 버전(보통은 최신버전)을 선택하여 .war 파일을 다운 받는다.
 

Releases · naver/ngrinder

enterprise level performance testing solution. Contribute to naver/ngrinder development by creating an account on GitHub.

github.com

  • 다음 받은 후 해당 명령어를 실행한다.
# java -Djava.io.tmpdir=[임시파일을 저장할 경로] -jar [다운받은 war 파일 이름] --port=[열고싶은 포트번호]
# 예시
java -Djava.io.tmpdir=/Users/choi/Desktop/test/ -jar ngrinder-controller-3.5.8.war --port=8301
  • 정상적으로 실행 되었다면 localhost:[지정한 포트]로 접속할 시 nGrinder 메인 화면이 뜬다

  • 초기 관리자 ID와 password는 둘다 admin이다.
  • 접속 후 오른쪽 상단의 admin 클릭 후 에이전트 다운로드 클릭 해서 압축 파일 다운로드

  • 다운받은 압축 파일을 압축해제 해제
# tar -xvf [다운받은 압축파일]
tar -xvf ngrinder-agent-3.5.8-localhost.tar
  • 압축 해제 후 run_agent.sh 실행 (윈도우는 .bat)

./run_agent.sh
  • 이렇게 실행할 경우 agent도 틀어짐

사용 방법

 

에이전트 테스트에 사용할 에이전트의 개수
스크립트 사용자가 해당 주소로 부하를 걸 스크립트를 보여줌
RHEAD 선택된 스크립트의 내용을 보여주는 페이지로 이동
테스트 대상 서버 테스트를 진행할 서버의 리스트를 보여주며, 추가버튼 클릭 시 테스트 받을 서버를 늘릴 수 있다.
테스트 기간 해당 테스트를 얼마만큼 실행할 지 설정하는 항목
실행 횟수 사용자가 설정한 쓰레드당 몇 번의 테스트를 실행할 것인지를 지정
Ramp-Up 점차 부하를 가할 수 있는 기능. 부하를 가할 때, 가상 사용자 수를 늘리는 것 이 아닌 process나 thread를 늘린다
초기 개수 처음 시작 시 가상사용자의 수를 설정
초기 대기 시간 테스트를 언제부터 실행시킬 지 설정
증가 단위 해당 process/thread를 몇 개씩 증가시킬지를 설정
Ramp_Up 주기 상승 시간을 설정

  • 여러가지 스크립트를 작성해서 각 기능에 대해 얼마나 부하가 걸리는지 확인할 수 있다.
// 로그인 페이지 예시 스크립트
@Test
public void testLogin() {
    // 메인 페이지 요청
    HTTPResponse mainPageResponse = request.GET("http://example.com/main")

    // 로그인 요청
    Map<String, Object> loginParams = [username: "user", password: "pass"]
    HTTPResponse loginResponse = request.POST("http://example.com/login", loginParams)

    // 로그인 응답 확인
    assertThat(loginResponse.statusCode, is(200))

}

 

+ Recent posts