2047 단어
10 분
nGrinder 성능 테스트 간편한 Docker compose 설치 7단계
2023-08-24
태그 없음

nGnGrinder는 네이버에서 개발한 오픈 소스 성능 테스트 도구로 웹성능 테스트를 위한 간편한 Docker compose 설치 방법과 테스트 방법을 알아 봅시다.

목차

준비 사항

docker, docker-compose 설치, 약간의 groovy

도커 설치 방법은 아래 사이트에서 설치 방법만 참고하세요!

Docker Jenkins 설치 아주 간단한 방법 2023 [docker-compose 사용]

Docker Jenkins 설치 아주 간단한 방법 2023 [docker-compose 사용]

</p>

성능 측정?


웹 애플리케이션의 성능 측정은 여러 중요한 이유로 인해 필수적입니다. 다음은 웹 애플리케이션의 성능을 측정해야 하는 주요 이유들입니다:

  1. 사용자 경험 최적화: 웹 애플리케이션의 반응 속도는 사용자 경험에 큰 영향을 미칩니다. 느린 로딩 시간은 사용자의 불만을 증가시키고, 사용자가 다른 대안을 찾아나서게 만듭니다. 빠르고 반응성 좋은 애플리케이션은 사용자 만족도를 높입니다.
  2. 비즈니스 목표 달성: 성능 문제는 웹사이트의 전환율, 장바구니 이탈률, 사용자 잔류 시간 등과 같은 주요 비즈니스 지표에 부정적인 영향을 미칠 수 있습니다. 특히 전자상거래와 같은 온라인 비즈니스에서는 빠른 응답 시간이 수익에 직접적인 영향을 줍니다.
  3. 스케일링 및 최적화 계획: 성능 측정을 통해 웹 애플리케이션의 현재 상태를 파악하고, 어떤 부분이 최적화가 필요한지, 어떤 리소스가 추가적으로 필요한지 판단할 수 있습니다.
  4. 비용 효율: 성능 최적화를 통해 기존의 인프라에서 더 많은 트래픽을 처리할 수 있게 되며, 이는 추가적인 인프라 투자 없이 트래픽 증가에 대응할 수 있게 합니다.
  5. 서비스의 안정성 보장: 성능 문제가 미처 발견되지 않으면, 트래픽이 증가할 때 시스템 장애나 다운타임을 초래할 수 있습니다. 이는 사용자의 신뢰를 잃게 하며, 장기적으로 브랜드 이미지에도 손상을 줄 수 있습니다.
  6. 검색 엔진 최적화: 페이지 로딩 속도는 검색 엔진 순위에 영향을 미치는 요소 중 하나입니다. 성능 최적화를 통해 웹 페이지의 검색 결과 순위를 향상시킬 수 있습니다.
  7. 경쟁 우위 확보: 사용자들은 빠르게 응답하는 애플리케이션을 선호합니다. 성능이 우수한 웹 애플리케이션은 경쟁 애플리케이션에 비해 사용자를 더 잘 끌어들일 수 있습니다.

웹 애플리케이션의 성능은 그 애플리케이션의 성공 여부에 결정적인 요소가 될 수 있습니다. 따라서 지속적인 성능 모니터링 및 최적화는 웹 애플리케이션의 품질과 안정성을 높이는 데 중요합니다.

</p>

설치 및 테스트 방법


1. 설치 및 설정

a. docker-compose 작성

version: '3.7'

services:
  controller:
    container_name: ngrinder-controller
    image: ngrinder/controller:latest
    platform: linux/amd64
    environment:
      - TZ=Asia/Seoul
      - file.repository.mode=local  # 여기 추가
    ports:
      - "8880:80"
      - "16001:16001"
      - "12000-12009:12000-12009"
    volumes:
      - /tmp/ngrinder-controller:/opt/ngrinder-controller
    sysctls:
      - net.core.somaxconn=65000

  agent-1:
    container_name: agent-1
    image: ngrinder/agent:latest
    platform: linux/amd64
    links:
      - controller
    environment:
      - TZ=Asia/Seoul
    sysctls:
      - net.core.somaxconn=65000
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nproc:
        soft: 1024000
        hard: 1024000
      nofile:
        soft: 1024000
        hard: 1024000

  agent-2:
    container_name: agent-2
    image: ngrinder/agent:latest
    platform: linux/amd64
    links:
      - controller
    environment:
      - TZ=Asia/Seoul
    sysctls:
      - net.core.somaxconn=65000
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nproc:
        soft: 1024000
        hard: 1024000
      nofile:
        soft: 1024000
        hard: 1024000

b. nGrinder docker compose 실행

  • 작성된 파일 위치에서 도커를 실행 합니다.
docker-compose up -d

2. 웹 인터페이스 접속

  • 브라우저에서 http://localhost:8080으로 접속하면 웹 인터페이스에 접속할 수 있습니다.
  • 기본 관리자 계정(admin/admin)으로 로그인합니다.
ngrinder docker compose
홈 접속 화면

3. 테스트 스크립트 작성


  • 대시보드에서 Create 버튼을 클릭하여 새로운 테스트를 생성합니다.
create
  • 테스트 이름, 설명, 태그를 설정합니다.
create
  • 스크립트 탭에서 원하는 성능 테스트 스크립트(Groovy 기반)를 작성합니다.
import static net.grinder.script.Grinder.grinder
import static org.junit.Assert.*
import static org.hamcrest.Matchers.*
import net.grinder.script.GTest
import net.grinder.script.Grinder
import net.grinder.scriptengine.groovy.junit.GrinderRunner
import net.grinder.scriptengine.groovy.junit.annotation.BeforeProcess
import net.grinder.scriptengine.groovy.junit.annotation.BeforeThread
// import static net.grinder.util.GrinderUtils.* // You can use this if you're using nGrinder after 3.2.3
import org.junit.Before
import org.junit.BeforeClass
import org.junit.Test
import org.junit.runner.RunWith

import org.ngrinder.http.HTTPRequest
import org.ngrinder.http.HTTPRequestControl
import org.ngrinder.http.HTTPResponse
import org.ngrinder.http.cookie.Cookie
import org.ngrinder.http.cookie.CookieManager

import java.net.URLEncoder

/**
* A simple example using the HTTP plugin that shows the retrieval of a single page via HTTP.
*
* This script is automatically generated by ngrinder.
*
* @author admin
*/
@RunWith(GrinderRunner)
class TestRunner {

	public static GTest test
	public static HTTPRequest request
	public static Map&amp;amp;amp;amp;amp;amp;amp;lt;String, String&amp;amp;amp;amp;amp;amp;gt; headers = [:]
	public static Map&amp;amp;amp;amp;amp;amp;amp;lt;String, Object&amp;amp;amp;amp;amp;amp;gt; params = [:]
	public static List&amp;amp;amp;amp;amp;amp;amp;lt;Cookie&amp;amp;amp;amp;amp;amp;gt; cookies = []

	@BeforeProcess
	public static void beforeProcess() {
		HTTPRequestControl.setConnectionTimeout(300000)
		test = new GTest(1, "[테스트도메인]")
		request = new HTTPRequest()
		grinder.logger.info("before process.")
	}

	@BeforeThread
	public void beforeThread() {
		test.record(this, "test")
		grinder.statistics.delayReports = true
		grinder.logger.info("before thread.")
	}

	@Before
	public void before() {
		request.setHeaders(headers)
		CookieManager.addCookies(cookies)
		grinder.logger.info("before. init headers and cookies")
	}

	@Test
	public void test() {
		String signon = "2021-09-13 22:04:42"
		String signoff = "2021-09-13 22:06:03"

		String encodedsignon = URLEncoder.encode(signon, "UTF-8")
		String encodedsignoff = URLEncoder.encode(signoff, "UTF-8")

		HTTPResponse response = request.GET("https://[테스트 도메인]/log?sign_on="+encodedsignon+"&amp;amp;amp;amp;amp;amp;amp;amp;sign_off="+encodedsignoff, params)

		if (response.statusCode == 301 || response.statusCode == 302) {
			grinder.logger.warn("Warning. The response may not be correct. The response code was {}.", response.statusCode)
		} else {
			assertThat(response.statusCode, is(200))
		}
	}
}

4. 테스트 설정


  • 테스트 설정 탭에서 다음과 같은 옵션을 설정할 수 있습니다:
    • Threads: 동시에 실행할 사용자 수
    • Duration: 테스트를 실행할 시간
    • Ramp-up: 사용자를 점진적으로 증가시키는 시간
테스트 설정창

5. 테스트 실행


  • 설정이 완료되면 Run 버튼을 클릭하여 테스트를 시작합니다.
  • 실행 중인 테스트의 상태와 진행도를 실시간으로 확인할 수 있습니다.

6. 결과 분석


  • 테스트가 완료되면 결과 탭에서 상세한 테스트 결과와 차트를 확인할 수 있습니다.
  • TPS(Transactions Per Second), 응답 시간, 오류율 등 다양한 지표를 통해 애플리케이션의 성능을 분석할 수 있습니다.
결과 페이지
결과 페이지

</p>

7. 추가 팁 nGrinder agent docker


  • Agent를 별도로 구성하여 분산 테스트를 지원합니다. 대규모 테스트를 위해서는 여러 Agent를 활용하는 것이 좋습니다. 이 블로그에서는 상단의 yaml 파일에 agent 세팅도 되어 있습니다.
  • 테스트 스크립트 작성에 어려움이 있다면, 커뮤니티나 공식 문서를 참고하세요. 참고 사이트는 아래 사이트 이동하기 클릭!
사이트방문

이 블로그를 통해 애플리케이션의 성능을 간편하게 테스트하고 분석할 수 있습니다. 이 도구를 활용하여 애플리케이션의 성능 문제를 미리 파악하고 최적화할 수 있기를 바랍니다.


원문: https://gomdoc.com/ngrinder-%ec%84%b1%eb%8a%a5-%ed%85%8c%ec%8a%a4%ed%8a%b8-docker-compose-%ec%84%a4%e3%85%8a/

Advertisement
nGrinder 성능 테스트 간편한 Docker compose 설치 7단계
https://gomdoc.com/ngrinder-성능-테스트-docker-compose-설ㅊ/
저자
Gomdoc Blog
게시일
2023-08-24
라이선스
CC BY-NC-SA 4.0