Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
(연관된 글이 1개 있습니다.)

JMeter로 XML 웹 서비스 호출에 대한 부하 테스트 방법

클라이언트가 실버라이트로 된 웹 사이트에 대한 부하 테스트는 어떻게 해야 할까요? 사실, 부하 테스트를 클라이언트 프로그램에 하는 것은 어울리지 않지요. 결국 실버라이트가 호출하는 서버 측 서비스에 대한 부하 테스트에 초점을 맞추는 것이 올바른 선택입니다.

일반적으로 실버라이트는 서비스와의 통신을 한다면 대부분 WCF로 연동을 합니다. 물론, 다른 방법도 가능하지만... WCF만큼 쉽지는 않지요. ^^ 이렇게 WCF로 만들어진 서비스를 테스트 하는 가장 쉬운 방법은 서버 측에서 노출하는 WSDL에 따라 자바나 닷넷으로 프록시 클래스를 자동 생성해 별도로 부하를 주는 모듈을 빌드해 사용하는 것이 있습니다.

하지만, 관리자 입장에서 JMeter와 같은 도구를 이용해 부하 테스트를 하기에는 위의 방법이 적절하지 않습니다. 프로그래밍이 들어가는 것은 아무래도 부담스러울 수밖에 없지요. ^^

이 글에서는 프로그램 없이, 실버라이트에서 호출된 웹 서비스를 부하 테스트할 수 있는 방법을 설명합니다.




JMeter에서 실버라이트 호출을 재현하려면, 간단하게는 패킷을 캡쳐해서 POST 데이터로 지정할 수 있습니다. 다행히, 실버라이트는 Internet Explorer에서 실행되고, 내장된 "Developer Tools"를 이용하면 패킷 캡쳐가 가능합니다. 아래는 실버라이트에서 실행되는 간단한 asmx 웹 서비스 호출에 대한 패킷을 "Network" 탭에서 "Start capturing"으로 가로챈 것을 보여줍니다.

jmeter_load_1.png

위의 화면에서 URL 항목을 두 번 누르면 요청 및 반환된 패킷에 대한 상세한 데이터를 얻을 수 있습니다. 여기서 중요한 것은 "Request headers"와 "Request Body"입니다.

jmeter_load_2.png

jmeter_load_3.png

웹 서비스 호출 하나당, Request Header의 "SOAPAction", "Content-Type" 값과 "Request Body"의 POST 내용을 기록해 둬야 합니다. (이 중에서 Content-Type은 XML 웹 서비스의 경우 "text/xml"이 됩니다.)

자, 이제 JMeter를 다운로드 받고.

Download Apache JMeter 
; http://jmeter.apache.org/download_jmeter.cgi

단순히 압축만 풀면 /bin/jmeter.bat 파일을 실행하는 것으로 JMeter 프로그램이 뜹니다.

jmeter_load_4.png

간단하게 "Test Plan"의 컨텍스트 메뉴에서 "Add" / "Threads (Users)" / "Thread Group" 메뉴로 새로운 스레드 그룹을 생성합니다.

jmeter_load_5.png

사용자 수에 대한 시뮬레이션 값을 "Number of Threads (users)"에 지정하고, "Ramp-Up Period (in seconds)"에는 웹 애플리케이션이 JIT 컴파일 등으로 인해 초기 구동시간이 필요한 경우 입력해 줍니다. 테스트 기간은 Loop Count나 스케쥴러를 이용해서 등록할 수 있습니다. 제 경우에는 그냥 테스트기 때문에 다음과 같이 간단하게 설정했습니다.

jmeter_load_6.png

그다음, 다시 트리에 있는 "Thread Group"의 컨텍스트 메뉴에서 "Add" / "Sampler" / "HTTP Request" 를 선택해서 요청을 설정할 수 있는 노드를 추가합니다. 테스트할 웹 서비스 메서드 하나당 "HTTP Request"를 하나 생성해야 합니다. IE의 "Developer Tools"에서 캡쳐한 Post Data를 아래의 화면에 보는 것처럼 "Post Body"에 넣어줍니다.

jmeter_load_7.png

그리고 SOAPAction 값은 HTTP Header에 입력해야 하는데요. 이를 위해 "HTTP Request" 노드의 컨텍스트 메뉴에서 "Add" / "Config Element" / "HTTP Header Manager"를 선택합니다. 그 화면에서 2개의 HTTP Header를 넣어주면 됩니다.

jmeter_load_8.png

부하 테스트를 위한 준비는 사실상 이것으로 끝입니다. 이 상태에서 바로 "Run"을 하면 설정된 대로 요청이 발생합니다.




그런데, 요청이 잘 되고 있는지 리포팅 결과를 얻고 싶을 텐데요. JMeter에서는 이를 "Listener"라는 메뉴에서 제공합니다. 이를 "Thread Group" 수준에서 추가해도 되고, 개별 "HTTP Request" 수준에서 추가해도 됩니다. 여기서는 "Thread Group"에 추가해 볼 텐데요. "Thread Group" 노드의 컨텍스트 메뉴에서 "Add" / "Listener" 하위의 아무거나 선택해 봅니다. 여기서는 "Graph Results"를 추가할 텐데요. 여러 개 추가해도 무방하니 자유롭게 테스트 해보면 됩니다. ("View Results Tree"나 "View Results in Table" 같은 거를 선택해서 리포팅 결과가 어떻게 다른지 보는 것도 좋겠지요.)

다음은 "Thread Group"을 실행한 후 "Graph Results" 노드의 상태를 본 것입니다. XML 웹 서비스에 대한 호출이 정상적으로 잘 되었군요. ^^

jmeter_load_9.png

사실, 간단한 부하 테스트는 이렇게 하고 주요 목적은 서버 측에 설치된 제니퍼 닷넷으로 웹 애플리케이션의 문제점을 진단하는 것이 주요 과제였습니다. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 6/27/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 181  182  183  184  185  186  187  [188]  189  190  191  192  193  194  195  ...
NoWriterDateCnt.TitleFile(s)
255정성태6/1/200617169    답변글 개발 환경 구성: 2.1. msconfig 설정과 Windows Activation
259정성태6/1/200616300    답변글 개발 환경 구성: 2.2. Vista VPC에 터미널 서비스 - 원격 접속
253정성태6/1/200614661기타: 14. .NET 2.0 이 지원되는 NDoc 2.0 을 배포합니다.
251정성태6/1/200617665오류 유형: 4. [OS 지원 API] SHParseDisplayName과 Windows 2000
252정성태6/1/200617505    답변글 오류 유형: 4.1. NET BCL 에서 제공되는 FolderBrowserDialog [2]
249정성태6/1/200616898.NET Framework: 71. VB.NET 이외의 언어에서 My 네임스페이스 사용
250정성태6/1/200619554    답변글 .NET Framework: 71.1. VB.NET 이외의 언어에서 My 네임스페이스 사용
248정성태6/1/200617781기타: 13. Code Center Premium에서 Win32 API 소스 찾기
245정성태6/1/200625391오류 유형: 3. [C# / VC++] error C2146: syntax error : missing ';' before identifier 'GetType'
247정성태5/3/200622664    답변글 .NET Framework: 3.1. Interface를 사용하면. [1]
242정성태6/1/200623140오류 유형: 2. [COM+] CreateObject 와 HTTP 500 - Internal server error
243정성태6/1/200620574    답변글 오류 유형: 2.1. [COM+] Resolve Partial Assembly failed for Microsoft.VC80.CRT.mui
244정성태6/1/200621902    답변글 오류 유형: 2.2. [COM+] Server object error 'ASP 0178 : 80070005'
240정성태6/1/200619742스크립트: 9. setTimeout 과 jscript/vbscript 혼용 문제
239정성태6/1/200621078COM 개체 관련: 18. Internet Explorer는 Out-of-process COM 개체입니다.
238정성태6/1/200622955개발 환경 구성: 1. batch 파일에서 실행한 exe에서 batch 실행 문맥의 환경 변수 설정 [3]
236정성태6/1/200643713오류 유형: 1. [.NET COM+] UnauthorizedAccessException: 레지스트리 키 HKEY_CLASSES_ROOT\.... 에 대한 액세스가 거부되었습니다
235정성태6/1/200618360VS.NET IDE: 39. VS.NET 2003/2005에서도 제공되는 VS 6.0 MFC ClassWizard
234정성태4/14/200618047VC++: 24. error C2039: 'pOleStr' : is not a member of '_STRRET'
233정성태4/13/200617474.NET Framework: 70. Response.ContentType 과 Response.AddHeader( "Content-Type", "..." ) 의 차이
232정성태4/13/200617228.NET Framework: 69. Reusing C# Source Code Across Multiple Assemblies
231정성태4/13/200617665Team Foundation Server: 4. How to rename a Team Foundation Server
229정성태10/17/200619167.NET Framework: 68. Feb CTP 에서 동작하는 "Save XPS Document page(s) to .bmp" 예제 소스
230정성태4/13/200619380    답변글 .NET Framework: 68.1. -01 MSDN Magazine XPS Document 소스를 Feb CTP로 수정한 버전파일 다운로드1
228정성태4/13/200615785Team Foundation Server: 3. MSBUILD : warning : Visual Studio Team System for Software Testers or Visual Studio Team System for Software Developers is required to run tests as part of a Team Build.
227정성태4/13/200617382Team Foundation Server: 2. TFS 빌드 오류 유형 - MSBUILD: warning : Specified cast is not valid
... 181  182  183  184  185  186  187  [188]  189  190  191  192  193  194  195  ...