nGrinder
+

초딩도 하는 성능 테스트
심화!!
WHO AM I

윤준호 / 내년 不惑

nGrinder 프로젝트 리드
디자이너 출신
30만 라인(±) / 1년
개발자는 창조하는 사람
파괴에는 익숙하지 않다.!
정확히는 문제가 있다는
사실을 알고(알리고) 싶어하지 않는다.
이 모든 것이 핑계꺼리..
Affordance

(행위 유발성)
불편함은 없애고
자랑꺼리가 될 수 있다면?
성능 테스트 상식

성능 테스트?

스트레스 테스트

로드 테스트

로드 상황에서
크래시 등의 문제점 확인

로드 상황에서
성능 특성 파악

7
성능 테스트 상식

로드 테스트
초당
처리량

2500

2000

1500
Apache
Nginx
Nginx-caching

1000

500

0
1

2

5

10

50

100

200

동시사용자 #
(Think Time 없을 때)

8
성능 테스트 상식

스트레스 테스트

부적절한 커넥션 풀?
불충분한 쓰레드 풀?
메모리 릭?
리소스 릭?
비효율적인 코드?
성능 테스트 상식

TPS

(Transaction Per Second / 초당처리량)

정의하기 나름
성능 테스트 상식

로드를 주는 방법?

ApacheBench? LoadRunner?
NHN과 같은 대규모 서버군에는 부적절…

11
성능 테스트 상식
분산 테스트?

제어

부하

스크
립트
테스트 대상 서버

컨트롤러
로드 생성기

무제한 로드 부여 가능 / 대규모 테스트에 적합
12
성능 테스트 상식

성능 테스트 도구는
실수까지 기록하여야 한다.!

13
nGrinder

since 2010
스크립트 작성

테스트 설정

상세 결과 보기
결과 리포트

테스트 진행
중간 정리
언제든 원하는 시점에 테스트 수행
테스트 준비시간 0분 / 학습시간 1~2시간?
네트워크 오버플로우 자동 처리
은근한 자부심!!

(내가 10배 빠르게 만들었어)

NHN에서만 월간 2000건 성능 테스트 실행
(10배 증가)

밤샘 X  요게 중요
컨트롤러+에이전트

에이전트1

컨트
롤러

스크
립트

에이전트2
프로세스+쓰레드

프로세스1

쓰레드 1
쓰레드 2
쓰레드 3

스크
립트

쓰레드 4

에이
전트
프로세스2

쓰레드 1
쓰레드 2
쓰레드 3
쓰레드 4

가
상
유
저
스크립팅 - 지원언어

자이썬

그루비

내장 SVN

그루비
+
메이븐
스크립팅 - 기본구조

프로세스당 한번

프로세스당 한번

지정한 만큼 반복
스크립팅 – IDE 지원
그루비 + 메이븐 + 서브버전 + 이클립스

스크립트 디버깅 / 자동완성 / 의존성 관리
클러스터링
LINE 플러스 소속 개발자가 도쿄 IDC 에 있는 서버를 테스트할 경우
클러스터링
LINE 플러스 소속 개발자가 도쿄 IDC 에 있는 서버를 테스트할 경우
스크립트

L4 / SSO
컨트롤러

컨트롤러

컨트롤러

컨트롤러

컨트롤러

에이전트
x5

에이전트
x5

NAS / DB
에이전트
x10

에이전트
x5

에이전트
x10

서버

K IDC

T IDC

M IDC

N망

도쿄IDC
더미를 위한 스크립팅..
마지막 정리

NHN에서만 840 사용자 / 15,400 테스트 / 90% 테스트 성공률
성능 테스트 활동 활성화 (10배)
큰 사이즈의 가상 유저 시뮬레이션

비용 최소화
네트워크 오버플로우 위험성 감소
nGrinder
Architecture
Dynamic Architecture
Static Architecture (Single)
Static Architecture (Cluster)
nGrinder
Scripting Samples
스크립팅 - Groovy

프로세스당 한번

쓰레드당 한번

지정한 만큼 반복
Script Executions(Groovy)
스크립팅 - Jython
프로세스당 한번

쓰레드당 한번

지정한 만큼 반복
Script Executions(Python)
인스트루먼트
MyTest object = new MyTest();
Gtest test = new Gtest(1, “통계1”)
test.record(object, “sendMessageToGoogle”)
class MyTest {
public void sendMessageToGoogle() {
통계 1을 준비하라

구글에 HTTP를 보내고, 결과 검증
여기까지 왔으면 테스트가 성공한거다. 통계1에 트랜잭션을 하나 올려라

}
}
인스트루먼트
GTest

Test
FAIL
SUCCESS
DB TEST
LOG LEVEL
리소스 읽기
리소스 읽기 / Groovy Maven
라이브러리 사용 (Jython / Groovy)

라이브러리 사용 (Groovy Maven Project)
pom.xml 에 의존성 추가로 작업 끝!
라이브러리 사용 (Jython / Groovy)

라이브러리 사용 (Groovy Maven Project)
pom.xml 에 의존성 추가로 작업 끝!
대규모 응답 처리하기
대규모 응답 처리하기
다수의 테스트 가중치 부여 실행
쓰레드마다 다른 짓 하게 하기
JSON 파싱하기
XML 파싱하기
SocketIO 테스트 하기

http://www.cubrid.org/wiki_ngrinder/entry/using-ngrinder-toperform-load-test-for-a-socket-io-app
nGrinder
Operation Best Practices
사용자 등록이 귀찮아..

SSO 플러그인!!
과도한 트래픽?

ngrinder network overflow plugin
어뷰징??

시큐리티 모드

Advanced nGrinder