Hanbit ebook Realtime 84 Apache JMeter 오픈소스로대용량웹서비스성능테스트하기 장재만지음
Apache JMeter 오픈소스로대용량웹서비스성능테스트하기
Apache JMeter 오픈소스로대용량웹서비스성능테스트하기 초판발행 2015 년 1 월 16 일 지은이장재만 / 펴낸이김태헌펴낸곳한빛미디어 ( 주 ) / 주소서울시마포구양화로 7길 83 한빛미디어 ( 주 ) IT출판부전화 02-325-5544 / 팩스 02-336-7124 등록 1999년 6월 24일제10-1779호 ISBN 978-89-6848-723-1 15000 / 정가 14,000원 총괄배용석 / 책임편집김창수 / 기획 편집정지연디자인표지여동일, 내지스튜디오 [ 밈 ], 조판최송실영업김형진, 김진불, 조유미 / 마케팅박상용 이책에대한의견이나오탈자및잘못된내용에대한수정정보는한빛미디어 ( 주 ) 의홈페이지나아래이메일로알려주십시오. 한빛미디어홈페이지 www.hanbit.co.kr / 이메일 ask@hanbit.co.kr Published by HANBIT Media, Inc. Printed in Korea Copyright c 2015 장재만 & HANBIT Media, Inc. 이책의저작권은장재만과한빛미디어 ( 주 ) 에있습니다. 저작권법에의해보호를받는저작물이므로무단복제및무단전재를금합니다. 지금하지않으면할수없는일이있습니다. 책으로펴내고싶은아이디어나원고를메일 (ebookwriter@hanbit.co.kr) 로보내주세요. 한빛미디어 ( 주 ) 는여러분의소중한경험과지식을기다리고있습니다.
저자소개 지은이 _ 장재만포털과 CDN 서비스업체를거처현재는 ( 주 ) 에임투지의플랫폼연구소팀장으로근무하고있으며대용량트래픽제어솔루션 (NetFUNNEL) 을개발하고있다. Apache JMeter를이용하여다수의성능테스트를한경험이있으며컨설팅및오픈소스에많은관심이있다. 취미로밴드에서베이스를연주하며 안전제일 이라는밴드에서활동하며 2 장의 음반을발표했다. 홈페이지 : www.jacojang.com
저자서문 시간이갈수록웹사이트의 QoS Quality of Service 가중요해지고있습니다. 비슷한많은서비스가서로경쟁을하다보니웹서비스에방문한사용자들은응답을기다리며시간을낭비하는것을점점더싫어하게되었습니다. 많은연구기관에서는이러한사용자의반응에기반을둔 QoS와매출간의연관성에관한자료를쏟아내고있습니다. 하지만서비스운영자 / 개발자입장에서는점점더복잡해져가는 IT 인프라와다양해진접속환경을모두만족하게하기란쉽진않습니다. QoS를향상시키는가장좋은방법은성능테스트를통해서 QoS에악영향을미치는병목지점을하나씩제거해나가는것입니다. 성능테스트를위해서 ab(apache HTTP 서버벤치마킹툴 ) 와같은단순한커맨드라인툴부터 Load Runner와같은복잡한상용툴까지매우많은종류의툴이있지만, 이책에서제가소개하려는툴은 Apache JMeter입니다. 10년이상된오픈소스프로젝트로, 현재도활발히개발중입니다. 처음성능테스트를진행하면서 Apache JMeter를선택한이유는비용때문이었습니다. 상용툴을사용하고싶지만, 비용문제로원하는테스트를하기힘든경우가많아서어쩔수없이 JMeter와같은오프소스툴을이용했습니다. 그러나지금은비용뿐아니라성능과기능면에서충분히활용할수있는수준이라고생각합니다. 이책에는 JMeter 를이용하면서제가찾아낸성능테스트노하우와주의사항이정 리되어있습니다. JMeter 를이용해서성능테스트를하고자하는분들에게많은 도움이되었으면합니다. 마지막으로, 책을집필하는동안많은도움을주신회사동료들과한빛미디어의정 지연님, 무엇보다큰힘이되어준아내조혜영에게감사의말을전합니다.
대상독자 초급초중급중급중고급고급 이책은 Apache JMeter 를이용해서웹서비스의성능테스트를하려는시스템운 영자와웹개발자를위한책입니다. 자바와웹서비스인프라, 웹프로토콜에대한 기초적인지식을가지고있는분이라면쉽게읽을수있습니다. 기존의상용성능테스트툴에서오픈소스성능테스트툴로변경하고싶은테스트 담당자에게도좋은자료가될것입니다. 자료실 : http://www.jacojang.com/jmeter/
한빛 ebook 리얼타임 한빛 ebook 리얼타임은 IT 개발자를위한 ebook 입니다. 요즘 IT 업계에는하루가멀다하고수많은기술이나타나고사라져갑니다. 인터넷을아무리뒤져도조금이나마정리된정보를찾는것도쉽지않습니다. 또한잘정리되어책으로나오기까지는오랜시간이걸립니다. 어떻게하면조금이라도더유용한정보를빠르게얻을수있을까요? 어떻게하면남보다조금더빨리경험하고습득한지식을공유하고발전시켜나갈수있을까요? 세상에는수많은종이책이있습니다. 그리고그종이책을그대로옮긴전자책도많습니다. 전자책에는전자책에적합한콘텐츠와전자책의특성을살린형식이있다고생각합니다. 한빛이지금생각하고추구하는, 개발자를위한리얼타임전자책은이렇습니다. 1. ebook Only - 빠르게변화하는 IT 기술에대해핵심적인정보를신속하게제공합니다. 500페이지가까운분량의잘정리된도서 ( 종이책 ) 가아니라, 핵심적인내용을빠르게전달하기위해조금은거칠지만 100페이지내외의전자책전용으로개발한서비스입니다. 독자에게는새로운정보를빨리얻을수있는기회가되고, 자신이먼저경험한지식과정보를책으로펴내고싶지만너무바빠서엄두를못내는선배, 전문가, 고수분에게는보다쉽게집필할수있는기회가될수있으리라생각합니다. 또한새로운정보와지식을빠르게전달하기위해 O'Reilly의전자책번역서비스도하고있습니다. 2. 무료로업데이트되는전자책전용서비스입니다. 종이책으로는기술의변화속도를따라잡기가쉽지않습니다. 책이일정분량이상으로집필되고정리되어나오는동안기술은이미변해있습니다. 전자책으로출간된이후에도버전업을통해중요한기술적변화가있거나저자 ( 역자 ) 와독자가소통하면서보완하여발전된노하우가정리되면구매하신분께무료로업데이트해드립니다.
3. 독자의편의를위해 DRM-Free로제공합니다. 구매한전자책을다양한 IT 기기에서자유롭게활용할수있도록 DRM-Free PDF 포맷으로제공합니다. 이는독자여러분과한빛이생각하고추구하는전자책을만들어나가기위해독자여러분이언제어디서어떤기기를사용하더라도편리하게전자책을볼수있도록하기위함입니다. 4. 전자책환경을고려한최적의형태와디자인에담고자노력했습니다. 종이책을그대로옮겨놓아가독성이떨어지고읽기힘든전자책이아니라, 전자책의환경에가능한한최적화하여쾌적한경험을드리고자합니다. 링크등의기능을적극적으로이용할수있음은물론이고글자크기나행간, 여백등을전자책에가장최적화된형태로새롭게디자인하였습니다. 앞으로도독자여러분의충고에귀기울이며지속해서발전시켜나가도록하겠습니다. 지금보시는전자책에소유권한을표시한문구가없거나타인의소유권한을표시한 문구가있다면위법하게사용하고있을가능성이높습니다. 이경우저작권법에의해 불이익을받으실수있습니다. 다양한기기에사용할수있습니다. 또한한빛미디어사이트에서구입하신후에는횟수에 관계없이내려받으실수있습니다. 한빛미디어전자책은인쇄, 검색, 복사하여붙이기가가능합니다. 전자책은오탈자교정이나내용의수정 보완이이뤄지면업데이트관련공지를이메일로 알려드리며, 구매하신전자책의수정본은무료로내려받으실수있습니다. 이런특별한권한은한빛미디어사이트에서구입하신독자에게만제공되며, 다른 사람에게양도나이전은허락되지않습니다.
차례 들어가기 1 01 JMeter 와성능테스트 2 1.1 JMeter란 2 1.2 성능테스트 3 1.3 대용량성능테스트 7 1.4 주요용어및개념 7 성능테스트사전작업 11 02 JMeter 설치와환경설정 12 2.1 실행환경 12 2.2 JVM 옵션설정 14 2.3 Overriding Property 14 2.4 non-gui Mode 15 03 간단한 Test Plan 작성하기 17 3.1 Test Plan 작성 17 3.2 테스트실행및결과확인 25
04 Element 의사용법과특징 29 4.1 Thread Group 30 4.2 HTTP Request Default 34 4.3 HTTP Request 38 4.4 CSV Data Set Config 49 4.5 HTTP Cookie Manager 53 4.6 Regular Expression Extractor 57 4.7 Logic Controller 65 4.8 Timer 72 4.9 Assertions 81 4.10 BeanShell의활용 88 4.11 Proxy 서버를이용한리코딩 94 4.12 플러그인활용 100 4.13 TCP Sampler의 TCPClient 확장하기 107 대용량웹성능테스트 111 05 테스트계획 112 5.1 요구사항분석및목표설정 112 5.2 테스트일정 114 5.3 테스트계획서예제 115
06 테스트환경구축 117 6.1 부하발생기설치 117 6.2 튜닝 117 6.3 분산테스트환경구축 120 6.4 네트워크구성 133 7 테스트설계및 Test Plan 작성 138 7.1 로직구성도 138 7.2 테스트방법 140 7.3 테스트케이스작성 141 7.4 테스트데이터준비 142 7.5 Test Plan 작성 145 8 테스트수행및결과수집 169 8.1 사전테스트 169 8.2 테스트수행 173 8.3 결과수집 183 9 결과분석및리포트작성 193 9.1 결과분석 193 9.2 리포트작성 201
부록톰캣설치와배포 206 Windows 환경 206 Linux/Unix 환경 206 Test WAR 파일배포 208
? 들어가기? JMeter를이용하여실제성능테스트를실행하기전에 JMeter와성능테스트의기본개념, 그리고 JMeter를사용하기위한주요용어와그개념을알아본다.
1 JMeter 와성능테스트 1.1 JMeter 란 Apache JMeter는웹애플리케이션처럼클라이언트-서버구조로된소프트웨어의성능테스트를위해서만들어진 100% 순수자바프로그램이다. 스테파노마조끼 Stefano Mazzocchi 가개발했으며, 이는현재톰캣 Tomcat 으로이름이바뀐 Apache JServ의테스트를위한코드에서시작됐다. 이후이코드에 GUI와기능을추가하여 JMeter가만들어졌다. JMeter는단위 / 성능 / 스트레스테스트등많은곳에서활용할수있다. 프로토콜 Protocol 도계속추가되어 TCP, HTTP(S), FTP, JDBC, LDAP, SMTP, SOAP/XML RPC 등현재범용으로사용되는프로토콜대부분을지원한다. JMeter는통신프로토콜단계에서만동작하고웹브라우저에서는동작하지않는다. 즉, 통신규약에맞도록클라이언트와서버간메시지만송수신할뿐이고클라이언트자체에서행해지는연산동작은하지않는다. 가장대표적인예가 ActiveX 를이용하여암호화나연산작업을하는사이트다. 이러한사이트는 ActiveX 로직을모두이해하고자바를이용하여별도로 JMeter 내부모듈을구현하지않는이상테스트가불가능하다. JMeter는 2001년에 1.0을발표한후 10여년동안꾸준히기능과성능을향상하여 2011년에는 Apache Software Foundation에서 Top Level Apache Project 에선정되기도하였다. 또한, 자바가상머신 JVM, Java Virtual Machine 과 H/W의성능이향상되면서초기에문제가되던성능이나기능면에서부족함이많이해소되어현재는웬만한성능테스트에서핵심으로활약하기에부족함이없는상태에도달한것으로보인다. 1 장 JMeter 와성능테스트 2
기능이다양하고성능이좋음에도 JMeter는오픈소스라는이유로성능테스트현장에서많이활용되지못하고있는것이현실이다. LoadRunner와같은외산상용솔루션이가장많이사용되지만라이선스비용문제로현장에서충분히활용되지못하며, 국내몇몇솔루션은엔지니어층이얇거나제대로검증되지않아서신뢰성이떨어지는경우가많다. 필자가 JMeter를이용해서많은사이트의성능테스트를진행하면서도달한결론은불과몇년전만해도다소부족했지만, 현재는 JMeter로도대부분사이트에서원하는테스트를수행할수있으며성능이나기능면에서부족함을느끼기어렵다는것이다. JMeter는 IT 업계에서종사하는엔지니어가사용하기에그리복잡하지않은프로그램이다. 하지만이프로그램이테스트환경과결합하면많은변수를고려해야하는상황이발생한다. 그변수가 JMeter 자체문제인지네트워크환경문제인지그리고애플리케이션서버구성또는애플리케이션자체문제인지를적절하게구별하고 JMeter가보여주는결과수치로얼마나의미있는값을찾아내는가가중요하다. 이책에서는 JMeter 를사용하는기초적인방법부터실제성능테스트과정에서일 어날수있는문제점에대한해결방안과 JMeter 로대용량테스트환경을구축하 기위한최적의방법까지설명한다. 1.2 성능테스트 JMeter 를시작하기전에성능테스트에대한기본적인지식을알고있는것이좋 다. 이는테스트를계획하고결과를분석하는데중요한역할을한다. 이책에서말하는 성능테스트 란서비스및서비스시스템의성능을확인하기위 해서실제사용환경과비슷한환경에서테스트를진행하는것을말한다. 이를통 1 장 JMeter 와성능테스트 3
해서응답시간 Response Time 과처리량 Throughput, 병목구간등을확인할수있고, 성 능테스트로얻은정보로서비스나서비스시스템의문제점을확인하고이를개선 Tuning 하여보완할수있다. 성능테스트는쓰임에따라다음과같이나뉜다. Load 테스트 : 시스템의성능을벤치마크하기위한테스트를의미한다. 이테스트는부하 Load 를순차적으로증가시키면서응답시간이급격히증가하거나더는처리량이증가하지않거나시스템의 CPU와 Memory 등이기준값이상으로증가하는등비정상상태가발생하는임계점을찾아내고이를바탕으로성능이슈에대한튜닝과테스트를반복한다. Stress 테스트 : 임계값이상의요청이나비정상적인요청을보내비정상적인상황의처리상태를확인하고시스템의최고성능한계를측정하기위한테스트를의미한다. Spike 테스트 : 이테스트는예를들어빌딩에화재경보가발생했을때빌딩에있는직원들이동시에안전한장소를향해서이동할경우시간이얼마나걸리며어떤문제가발생하는지를테스트하는것과같다. 즉, 갑자기사용자가몰렸을때요청이정상적으로처리되는지그리고그업무부하 Workload 가줄어들때정상적으로반응하는지를확인하기위한테스트를의미한다. Stability 테스트 / Soak 테스트 : 긴시간동안테스트를진행해서테스트시간에따른시스템의메모리증가, 성능정보의변화등을확인하는테스트를의미한다. 짧게는한두시간부터길게는며칠동안진행하기도한다. 성능테스트프로세스는 [ 표 1-1] 과같이진행되며단계별로담당자가바뀐다. 1 장 JMeter 와성능테스트 4
[ 표 1-1] 성능테스트프로세스 단계 프로세스 내용 1 요구사항분석 테스트목적과범위를정하는단계로, 효율적인테스트를위해서는목적을정확히설정해야한다. 구시스템과신규시스템의비교테스트, 신규시스템오픈전사전임계치테스트, 장애발생을대비한 Failover-Failback 테스트등테스트범위와우선순위를결정해야한다. 모든서비스를테스트하면좋겠지만, 보통서비스개발이나유지보수때는테스트를위한시간이그다지충분하지않다. 그러므로중요도와테스트목적에맞는우선순위와그범위를정한다. 범위가정해지면해당시스템의소프트웨어적인구조와하드웨어적인구조를분석한다. 2 테스트계획 언제, 누가, 어떤방법으로, 어디서테스트할것인지정하는단계다. 테스트수행에는많은내 / 외부인력이필요하며많은준비사항이있으므로테스트계획이필수다. 테스트에필요한인력과역할은 [ 표 1-2] 를참고한다. 3 테스트환경구축 테스트단계내에서테스트환경구축을언제수행할지는그리중요하지않을수있다. 자주테스트를수행하는곳에서는테스트전용서버팜 (Serverfarm) 이이미구성되어있기때문이다. 요즘은클라우드환경의테스트팜을구성하는경우도있다. 테스트환경을구축할때가장중요한것은부하발생기와테스트대상서버사이의네트워크가최단구간안에존재하게하는것이다. 중간에많은보안장비와스위치 / 라우터 (Switch/Router) 등을거치면예상하지못한결과가발생할수있다. 4 테스트설계 테스트절차및테스트시나리오를작성하고테스트케이스작성및스크립트를구현하며테스트에필요한데이터셋 (Dataset) 을준비하는단계다. 테스트에필요한데이터셋을준비하는과정은상당히중요하다. 테스트에필요한충분히많은데이터가준비되지않는다면의도하지않은결과가나올가능성이높기때문이다. 예를들어, 어떤시스템에서실제로는 DB의 I/O에의해서성능저하가발생한다고가정했을때, DB의테스트데이터가충분히입력되지않고접근데이터가고르지않으면실제서비스때보다성능이좋게나올가능성이높다. 즉, 실제환경과비슷한수준의많은데이터를준비할수록테스트결과가좀더실제값과비슷해진다. 1 장 JMeter 와성능테스트 5
단계 프로세스 내용 5 테스트수행및결과수집 작성된스크립트로실제테스트를수행하는단계다. 테스트수행은크게두부분으로나누어진다. Pre-Test: Main-Test 전에스크립트가제대로작성되었는지, 테스트환경 ( 서버 / 네트워크 / 보안시스템 / 외부연동등 ) 과준비된데이터셋에문제가없는지확인하기위한테스트다. Main-Test에는많은인력이투입되므로 Pre-Test가정상적으로이루어지지않으면많은인력이불필요하게대기하는상황이발생할수있으니사전에꼭수행해야한다. Main-Test: 실제테스트를수행하는단계로, 테스트분석에필요한시스템성능자료를수집한다. 통합 SMS 솔루션이있으면 OS의 CPU, Memory, I/O 등의정보는쉽게수집할수있다. 그렇지않다면별도의시스템정보수집스크립트를이용해서수집해야한다. AP(Application Server) 는 APM(Application Performance Management) 과같은전용모니터링도구를이용하면많은정보를편리하게수집할수있다. 6 테스트분석 테스트결과자료와시스템성능자료를모아서테스트결과를분석한다. 분석된자료를통해서성능에영향을미치는문제점을찾는다. 7 문제점수정및재테스트 테스트분석에서발견된문제점을개발팀 (Development Team) 이나시스템운영팀 (System Engineering Team) 에전달하여문제점을수정하고다시한번테스트를수행한다. 8 결과리포트작성 테스트리포트는테스트목적에따라해당목적을가장잘표현할수있는방식으로작성하는것이좋다. 요약리포트와상세리포트를분리해서상세결과를필요로하는부서와요약결과만을필요로하는부서에별도로리포트를제출하는것도좋은방법이다. [ 표 1-2] 테스트인력및역할테스트인력역할 Test Leader(PM) 전체적인테스트계획, 목적수립, 시나리오작성, 일정관리와인력배치를담당한다. Test Scripter(Designer) 정의된테스트목적및범위에따라작성된시나리오로사이트 ( 서비스 ) 를분석하고이를바탕으로상세케이스를작성한다. Test Operator 작성된테스트스크립트를이용해서실제테스트를수행한다. Development Team 테스트에필요한데이터를준비하고애플리케이션을모니터링하며발견된문제점과개선점을찾아낸다. System Engineer(SE) Team 테스트환경을구축하고시스템 (OS, 네트워크, 스토리지등 ) 을모니터링하여발견된문제점과개선점을찾아낸다. 1 장 JMeter 와성능테스트 6
테스트인력 외부업체지원인력 역할시스템운영팀 (System Engineer Team) 에서모든정보를수집하고분석하면좋겠지만, 특정솔루션이나시스템은외부엔지니어의도움을받아야하는경우가생긴다. 외부엔지니어는해당솔루션 ( 또는시스템 ) 의전문가이므로테스트결과분석에많은도움이되지만외부인력이므로일정관리를잘해야한다. 1.3 대용량성능테스트 이책에서의미하는 대용량성능테스트 란매우많은가상사용자Virtual User, Thread 가필요한테스트나매우높은웹트랜잭션처리량을테스트하는것을의미한다. 즉, 대규모장비가필요한테스트다. 대용량성능테스트를진행하다보면결과에 많은영향을주는요소들이발생한다. 이것은현재수행한테스트결과가믿을만한 지, 어떤요소가한계점에다다라서결과가왜곡되지않았는지에대한고민에빠지 게한다. 예를들어, 여러대의부하발생기가연결되면부하발생기의네트워크구 성에따라결과가달라질수있으며, 애플리케이션서버의능력보다네트워크스위 치의성능이나 OS 설정값에의해결과가매우달라질수있다. 그러므로좀더신뢰성높은결과값을얻기위해서는결과에영향을미치는요소들을최대한제거해야만한다. 이책에서는기본적인 JMeter의사용법과함께대용량성능테스트를수행할때발생할수있는문제점과그에대한해결방법을실무에서겪은다양한경험과시행착오를바탕으로테스트담당자들이이런시행착오를겪지않도록하기위한팁과노하우를다룬다. 또한, 이를바탕으로테스트의신뢰성을높이고테스트결과값에서의미있는내용을찾는방법을설명한다. 1.4 주요용어및개념 성능테스트와관련하여자주사용되는용어와그개념을간략하게정리해보자. 1 장 JMeter 와성능테스트 7
Active User : 실제서버에연결된상태로요청을처리중인사용자를말한다. InActive User : 웹브라우저에결과화면이출력된상태에서화면의내용을읽거나정보를입력하고있는사용자다. 서버와의세션 Session 정보를가지고있지만직접접속하여요청을주고받는상태가아닌사용자를의미한다. Concurrent User(Active User + InActive User) : 보통 동시접속사용자수 라고표현한다. 일반적으로사용자수의많고적음을표현하는값으로, 성능테스트에서가상사용자수를결정하는기준이된다. 서비스유형과시간에따라그비율이달라지긴하지만, 일반적으로 Active User와 InActive User 비율이 1:10 정도다. Virtual User : 가상사용자수로, JMeter에서는 Thread 수로표현하기도한다. Ramp-Up Period : Thread(Virtual User) 생성에걸리는시간을의미한다. Ramp-Up Period 동안차례대로 Thread를생성한다. [ 그림 1-1] 은 Ramp-Up Period를이해하기쉽도록작성한그래프다. [ 그림 1-1] Ramp-Up Period에따른시간별 Thread 수변화 Thread 수 = 10( 개 ) / Ramp-Up Period = 50( 초 ) 이그래프는 10 개의 Thread 를 50 초동안차례대로생성하라 는의미다. 즉, 5 초 (50 초 /10 개 ) 마다 Thread 를하나씩생성하는것과같은의미다. 1 장 JMeter 와성능테스트 8
Throughput : 단위시간당대상서버 ( 웹서버, WAS, DB 등 ) 에서처리되는요청의수를말한다. JMeter에서는시간단위를보통 TPS Transaction Per Second 로표현한다. Response Time/Load Time : 응답시간또는처리시간이라고표현한다. 요청을보낸후응답이완료되어사용자화면에출력될때까지의시간을나타낸다. 시스템의성능을평가하는지표로주로사용한다. Latency : 요청을보낸후데이터를받기시작할때까지시간이다. Think Time : 하나의요청에응답을수신하고다음요청을보낼때까지시간을의미한다. 테스트에서실제사용자의사용패턴과유사한패턴을구현하기위해서는이 Think Time을적절히적용해야한다. Request Interval Time : 요청을보낸후다음요청을보낼때까지시간을의미한다. Load Time vs Latency : [ 그림 1-2] 는 Load Time/Latency/Think Time/ Request Interval Time의관계를이해하기쉽도록그림으로나타낸것이다. [ 그림 1-2] 시간관계도 [ 그림 1-2] 를보면항상 Load Time Latency 가성립된다. 두개를왜나눠 놨을까? 이것은 Latency 와 Load Time 을구분함으로써성능을분석할때요 1 장 JMeter 와성능테스트 9
긴하게사용할수있다. A와 B 사이트에동일한크기 (10MB 정도 ) 의파일을올려놓고다운로드테스트를진행한다고가정하자. A 사이트와 B 사이트의결과를비교해보니 B 사이트의 Load Time이 2배이상컸다. 하지만 Latency는거의비슷했다. 이렇게차이가나는이유는무엇일까? Load time에서 Latency를빼면데이터를전송받는데걸리는시간을나타낸다. 즉, B 사이트가 A 사이트보다데이터를내려받는속도가느리다고볼수있다. 따라서 B 사이트는처리량을늘리기위해웹서버를튜닝하기보다는네트워크의대역폭 (Bandwidth) 을늘리는것을고려해야한다. 1 장 JMeter 와성능테스트 10
? 성능테스트사전작업? 실제대용량웹성능테스트를수행하는데필요한사전준비작업을알아본다. 웹성능을테스트하기위한 Test Plan을만들어보고, 웹성능테스트를하기위해꼭필요한 JMeter의 Element 사용법과특징을간단한예제를통해서자세히알아본다.
2 JMeter 설치와환경설정 JMeter는아파치프로젝트 Apache Project 에속한오픈소스로, 아파치소프트웨어재단홈페이지 01 에서내려받을수있다. 다운로드페이지로가면 Binaries와 Source 두가지버전을확인할수있다. JMeter를변경없이그대로사용하려면 Binaries 버전을내려받고, 소스코드를수정또는추가하거나컴파일해서사용하려면 Source 버전을내려받는다. Source 버전을이용해서컴파일한후사용하는방법은나중에알아보고우선 Binaries 버전을내려받자. 2.1 실행환경 JMeter 는순수자바애플리케이션이므로 Java JDK(JRE) 만설치되어있으면구동 하는데문제없다. 최신버전의 JMeter 는 Java JDK 6 이상 02 이필요하다. JMeter 는별도의설치과정없이압축파일을풀고 apache-jmeter-2.xx/bin 디 렉터리에있는시작명령어만실행하면바로구동할수있다. [ 표 2-1] 디렉터리구조디렉터리설명 apache-jmeter-2.11\bin JMeter를실행하기위한실행파일과설정파일이있는디렉터리다. apache-jmeter-2.11\docs API 관련문서디렉터리다. apache-jmeter-2.11\extras 추가유틸리티가있는디렉터리다. apache-jmeter-2.11\lib JMeter Components나플러그인을실행하는데필요한유틸리티와 Dependency Jars가있는디렉터리다. apache-jmeter-2.11\lib\ext JMeter에서사용하는 Components와플러그인이있는디렉터리로, 기본으로제공되는 Components 외에추가로설치된 Component나플러그인도이디렉터리에두면 JMeter가구동될때자동으로참조한다. 01 https://jmeter.apache.org/download_jmeter.cgi 02 http://www.oracle.com/technetwork/java/javase/downloads 2 장 JMeter 설치와환경설정 12
디렉터리 apache-jmeter-2.11\ licenses apache-jmeter-2.11\ printable_docs 설명 non-asf 소프트웨어의라이선스정보가담겨있는디렉터리다. 도움말문서가있는디렉터리다. [ 표 2-2] Linux/Unix 실행명령어 명령어 설명 jmeter GUI 모드로실행하기위한명령어다 (Default). jmeter-server Server 모드로실행된다 (Server 모드는분산테스트설정에서자세히설명한다 ). shutdown.sh non-gui 모드로실행할때정상종료 (Gracefully) 하게하는명령어다. stoptest.sh non-gui 모드로실행할때즉시종료 (Abruptly) 하게하는명령어다. [ 표 2-3] Windows 실행명령어 명령어 jmeter.bat jmeter.cmd 설명 GUI 모드로실행하기위한명령어다 (Default). jmeter.bat으로실행하면 cmd 창이뜬상태로실행되고, jmeterw.cmd로실행하면 cmd 창없이실행된다. 중간에출력되는 JMeter 메시지를보려면 jmeter.bat으로실행한다. jmeter-n.cmd non-gui 모드로실행하기위한명령어다. non-gui 모드로실행해야할때추가인자로실행될 JMX 파일명을입력한다. 예 ) c:\> jmeter-n.cmd test.jmx jmeter-n-r.cmd jmeter-n.cmd와기능은같지만, local에서실행되는것이아니라 remote_ hosts에등록된 jmeter-server를이용해서실행된다. jmeter-t.cmd jmeterw.cmd와같이 GUI 모드로실행된다. 단, 입력인자로 JMX 파일을입력해야한다. jmeter-server.bat Server 모드로실행된다. shutdown.cmd non-gui 모드로실행했을때정상종료하게하는명령어다. stoptest.cmd non-gui 모드로실행했을때즉시종료하게하는명령어다. 2 장 JMeter 설치와환경설정 13
2.2 JVM 옵션설정 JVM 옵션을변경해서실행하려면 JVM_ARGS 변수값을설정한다. Windows jmeter.bat 파일에다음을추가하고실행한다. set JVM_ARGS="-Xms1024m -Xmx1024m -Dpropname=propvalue" Linux/Unix 항상같은설정값을이용한다면 jmeter 파일에변수값을설정해도되지만, 실행할때마다설정값을조금씩수정해야하는상황이라면다음과같이실행시변수값을설정하고실행할수도있다. JVM_ARGS="-Xms1024m -Xmx1024m" jmeter -t test.jmx 2.3 Overriding Property Java System Property와 JMeter의 Property, Logging Property는 jmeter. properties 파일에설정되어있다. JMeter를실행하면해당파일을읽어들여서 Property를설정한다. 하지만변경이잦을때는파일을수정하기보다는커맨드라인에서 Property 값을재정의하는것이편하다. [ 표 2-4] Property 옵션 옵션 설명 -D<Prop_name>=<value> Java System Property 값을정의한다. -J<Prop_name>=<value> Local JMeter Property를정의한다. -G<Prop_name>=<value> 모든 remote_hosts에전달될 Property를정의한다. 2 장 JMeter 설치와환경설정 14
옵션 설명 -G<property_file> Property 내용이저장된파일을 remote_hosts에전송한다. -L<category>=<priority> 카테고리 (Category) 별로로깅수준 (Level) 을결정한다. -L<priority> 최상위로깅수준으로설정할수있다. [ 예제 ] jmeter -Duser.dir=/home/mstover/jmeter_stuff -Jremote_hosts=127.0.0.1 -Ljmeter.engine=DEBUG 2.4 non-gui Mode non-gui 모드는커맨드라인모드라고도한다. Linux/Unix에서는 GUI를실행할수없는환경일때가종종있다. 이럴때 non-gui 모드를사용한다. 그러나결과를그래프나수치로바로확인하면서작업하면테스트도중에발생할수있는문제점이나비정상결과값을즉시확인할수있으므로가능하면 GUI 모드를사용하는것이좋다. [ 표 2-5] non-gui 옵션 옵션 설명 -n non-gui 모드를실행하는옵션이다. -t <testplan name> 테스트에사용될 Test plan 파일명을입력한다. -l <logfile name> 결과 (Sample Result) 가저장될로그파일명을입력한다. -j <jmeter log name> JMeter 로그정보가저장될파일명을입력한다. (Default: jmeter.log) -r JMeter Property 중 remote_hosts에설정된 jmeter-server를실행한다. -R <list of remote servers> remote_hosts에설정된 jmeter-server가아니라직접 jmeter-server를지정해서테스트할수있다. -H <proxy server host> 프락시서버 (Proxy Server) 를이용해서접속할때해당프락시서버의호스트 (host) 를설정한다. -P <proxy server port> 프락시서버를이용해서접속할때해당프락시서버의포트를설정한다. 2 장 JMeter 설치와환경설정 15
[ 예제 ] jmeter -n -t test.jmx -l log.jtl -j my_jmeter.log -H my.proxy.server -P 8000 [ 실행결과 ] jacojang@jacojang-desktop:~/apache-jmeter-2.11/bin$./jmeter -n -t test.jmx Creating summariser <summary> Created the tree successfully using test.jmx Starting the test @ Sat Apr 05 17:50:42 KST 2014 (1396687842690) Waiting for possible shutdown message on port 4445 summary + 72 in 17s = 4.3/s Avg: 653 Min: 489 Max: 1006 Err: 0 (0.00%) Active: 3 Started: 3 Finished: 0 summary + 102 in 24.3s = 4.2/s Avg: 660 Min: 603 Max: 1008 Err: 0 (0.00%) Active: 0 Started: 3 Finished: 3 summary = 174 in 41s = 4.3/s Avg: 657 Min: 489 Max: 1008 Err: 0 (0.00%) Tidying up... @ Sat Apr 05 17:51:23 KST 2014 (1396687883952)... end of run 2 장 JMeter 설치와환경설정 16
3 간단한 Test Plan 작성하기 JMeter 에서는테스트스크립트를 Test Plan 이라고표현한다. 이장에서는웹서 버를테스트하기위한간단한 Test Plan 을만들어본다. 설명한대로따라하면쉽 게만들수있다. JMeter는부하발생을목적으로하는프로그램이어서외부웹서버에접속해서테스트하면외부서버에부하가발생하거나내부네트워크트래픽에과부하를줄수있으므로자신의 PC에테스트타깃서버 (Target Server) 를만들어놓고테스트를진행하는것이좋다. 테스트에필요한 URL 을테스트할수있는 WAR 파일은다음주소에서내려받을 수있다. 톰캣을설치한후내려받은파일을배포하면 deploy 이책에사용하는모든 테스트 URL 을사용할수있다. http://www.jacojang.com/jmeter/jmeter.war 톰캣설치방법과 WAR 파일배포방법은부록을참고하기바란다. 3.1 Test Plan 작성 [ 그림 3-1] 과같이 10 명의사용자가다음테스트페이지를 10 번반복요청한다고 가정한다. http://127.0.0.1:8080/jmeter/index.htm(method: GET) http://127.0.0.1:8080/jmeter/search/index.html(method: GET) http://127.0.0.1:8080/jmeter/search/search?key=jmeter(method: POST) 3 장간단한 Test Plan 작성하기 17
[ 그림 3-1] 테스트구성도 Test Plan 은다음순서로작성한다. Thread Group 추가및설정 : 가상사용자 (Thread) 의숫자와반복횟수, 반복시간을설정한다. Config Element 01 추가및설정 : 이번장에서는 HTTP Request Defaults만을사용해서작업한다. HTTP Request Sampler 02 추가및설정 : 테스트페이지목록에해당하는세개의 Sampler를추가한다. Listener 03 추가및설정 : 테스트결과를보기위해서는 Listener를꼭추가해야한다. View Result Tree와 Summary Report를추가한다. 모든작업이완료되면 [ 그림 3-2] 와같은형태가된다. 01 JMeter에서는 Test Plan 아래에추가되는노드를 Element라고한다. 02 Sampler는실제로서버에요청을보내는 Element를말한다. 03 Listener는테스트결과를보기위한 Element를말한다. 3 장간단한 Test Plan 작성하기 18
[ 그림 3-2] Test Plan 계층구조 3.1.1 Thread Group 추가및설정 Thread Group 추가 Test Plan 에서 Add Threads (Users) Thread Group 을선택하여추가한다. [ 그림 3-3] Thread Group 추가 Thread Group 설정 1 Number of Threads(users): 10은 10개의 Thread를생성하라는의미다. 2 Loop Count: 10은 10명이 10번씩 Test Plan을반복하라는의미이므로 10( 명 ) 10( 반복 ) = 100회 를수행한다. 3 장간단한 Test Plan 작성하기 19
[ 그림 3-4] Thread Group 설정 3.1.2 Config Element(HTTP Request Defaults) 추가및설정 Config Element 추가 Thread Group에서 Add Config Element HTTP Request Defaults 를선택하여추가한다. [ 그림 3-5] Config Element 추가 3 장간단한 Test Plan 작성하기 20
Config Element 설정 HTTP Request Sampler에설정되는정보중에중복되는부분을 HTTP Request Defaults에설정하면다음에나올 HTTP Request Sampler의설정을간소화할수있고, 변경사항이생겼을때작업량이나오류발생이줄어드는장점이있다. 1 Server Name of IP: 127.0.0.1 2 Port Number: 8080 [ 그림 3-6] HTTP Request Defaults 설정 3.1.3 HTTP Request Sampler 추가및설정 웹서버에요청을보낼경우에는 HTTP Request 라는 Sampler 를이용한다. HTTP Request Sampler 추가 Thread Group에서 Add Sampler HTTP Request 를선택하여추가한다. 테스트페이지목록에 3개의 URL이있으므로 3개의 Sampler가필요하다. 따라서이작업을 3번반복한다. 3 장간단한 Test Plan 작성하기 21
[ 그림 3-7] HTTP Request Sampler 추가 HTTP Request Sampler 설정 1 Name: Name은알맞은값으로수정한다. 다음에설명할 Listener에서결과를정리할때이 Name을기준으로보여주므로구분되는이름으로설정해야한다. - /jmeter/index.html - /jmeter/search/index.html - /jmeter/search/search 2 Method: HTTP Request가생성될때기본적으로 GET으로설정된다. / jmeter/search/search만 POST 방식을사용하므로이 Sampler만 POST로변경한다. 3 Path: 세개의 HTTP Request Sampler의 Path에각각다음값을입력한다. - /jmeter/index.html - /jmeter/search/index.html - /jmeter/search/search 3 장간단한 Test Plan 작성하기 22
[ 그림 3-8] HTTP Request Sampler 추가 Parameter 입력 /jmeter/search/search 에는검색키워드를함께보내기위해서 Parameters 를 추가한다. 1 Add 버튼을누른다. 2 Name : key / Value : jmeter [ 그림 3-9] HTTP Request Parameter 추가 3 장간단한 Test Plan 작성하기 23
3.1.4 Listener 추가및설정 Listener는 Sampler의요청에대한결과를수집해서그결과값을보여주는 Element를의미한다. 요청을보낸후성공 / 실패, 응답시간, 응답메시지등을확인하려면반드시추가해야한다. 여기서는 View Result Tree와 Summary Report를추가한다. View Results Tree 추가 Thread Group 에서 Add Listener View Results Tree 를선택하여추가 한다. [ 그림 3-10] View Results Tree 추가 Summary Report 추가 Thread Group 에서 Add Listener Summary Report 를선택하여추가한다. 3 장간단한 Test Plan 작성하기 24
[ 그림 3-11] Summary Report 추가 View Results Tree 와 Summary Report 는별도의설정이필요없다. 3.2 테스트실행및결과확인 GUI 모드에서테스트를실행하는방법은다음세가지가있다. 메뉴바에서 Start 버튼을클릭한다. 메뉴에서 Run Start 를선택한다. 단축키 Ctrl-R 를누른다. [ 그림 3-12] 테스트실행화면 3 장간단한 Test Plan 작성하기 25
여기에서는결과보는방법을간단히설명하고 9.1 결과분석에서자세한내용을 다루기로한다. 3.2.1 Summary Report 테스트결과를요약 Summary 해서보여준다. 통합된요청량 Sample Count, 응답시간 Response Time/Load Time, 오류율, 단위시간당처리량 Throughput 등을확인할수있다. Label 부분이 HTTP Request Sampler에서설정한 Name이다. 동일한 Name을사용하면구별이어려우므로주의한다. 응답시간은 Average, Min, Max 부분으로 1/1000초단위로표시된다. [ 그림 3-13] Summary Report 화면 3.2.2 View Results Tree 각결과의요청 / 응답 Request/Response 를상세하게살펴볼수있는 Listener다. 초기에스크립트를만들고정상적으로처리되는지확인할때용이하다. Pre-Test할때사용하므로기능에대해서잘알아두는것이좋다. [ 그림 3-14] 는각 Sampler 의결과를 Tree 형태로보여준다. 1 Sampler 목록 : 이중에서하나를선택하면오른쪽패널에해당 Sampler 의상 3 장간단한 Test Plan 작성하기 26
세정보가출력된다. 상세정보패널은세개의탭으로구성된다. [ 그림 3-14] View Results Tree 화면 2 Sampler result : 해당 Sampler 의요청결과를보여준다. 성공 / 실패여부를포 함해서응답시간과크기 Size 등을보여준다. [ 그림 3-15] Sampler result 화면 3 장간단한 Test Plan 작성하기 27
3 Request : 해당 Sampler 가웹서버에보낸 Request 정보를볼수있다. [ 그림 3-16] Request 화면 4 Response data : 해당 Sampler 의요청에대한응답메시지를보여준다. 웹서 버로요청을보냈으므로 Response data 는 html 문서로출력된다. [ 그림 3-17] Response data 화면뷰 3 장간단한 Test Plan 작성하기 28