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

비밀번호

댓글 작성자
 




... [76]  77  78  79  80  81  82  83  84  85  86  87  88  89  90  ...
NoWriterDateCnt.TitleFile(s)
12036정성태10/14/201925361.NET Framework: 866. C# - 고성능이 필요한 환경에서 GC가 발생하지 않는 네이티브 힙 사용파일 다운로드1
12035정성태10/13/201919566개발 환경 구성: 461. C# 8.0의 #nulable 관련 특성을 .NET Framework 프로젝트에서 사용하는 방법 [2]파일 다운로드1
12034정성태10/12/201918874개발 환경 구성: 460. .NET Core 환경에서 (프로젝트가 아닌) C# 코드 파일을 입력으로 컴파일하는 방법 [1]
12033정성태10/11/201923056개발 환경 구성: 459. .NET Framework 프로젝트에서 C# 8.0/9.0 컴파일러를 사용하는 방법
12032정성태10/8/201919197.NET Framework: 865. .NET Core 2.2/3.0 웹 프로젝트를 IIS에서 호스팅(Inproc, out-of-proc)하는 방법 - AspNetCoreModuleV2 소개
12031정성태10/7/201916454오류 유형: 569. Azure Site Extension 업그레이드 시 "System.IO.IOException: There is not enough space on the disk" 예외 발생
12030정성태10/5/201923250.NET Framework: 864. .NET Conf 2019 Korea - "닷넷 17년의 변화 정리 및 닷넷 코어 3.0" 발표 자료 [1]파일 다운로드1
12029정성태9/27/201924096제니퍼 .NET: 29. Jennifersoft provides a trial promotion on its APM solution such as JENNIFER, PHP, and .NET in 2019 and shares the examples of their application.
12028정성태9/26/201919044.NET Framework: 863. C# - Thread.Suspend 호출 시 응용 프로그램 hang 현상을 해결하기 위한 시도파일 다운로드1
12027정성태9/26/201914790오류 유형: 568. Consider app.config remapping of assembly "..." from Version "..." [...] to Version "..." [...] to solve conflict and get rid of warning.
12026정성태9/26/201920225.NET Framework: 862. C# - Active Directory의 LDAP 경로 및 정보 조회
12025정성태9/25/201918523제니퍼 .NET: 28. APM 솔루션 제니퍼, PHP, .NET 무료 사용 프로모션 2019 및 적용 사례 (8) [1]
12024정성태9/20/201920418.NET Framework: 861. HttpClient와 HttpClientHandler의 관계 [2]
12023정성태9/18/201920884.NET Framework: 860. ServicePointManager.DefaultConnectionLimit와 HttpClient의 관계파일 다운로드1
12022정성태9/12/201924849개발 환경 구성: 458. C# 8.0 (Preview) 신규 문법을 위한 개발 환경 구성 [3]
12021정성태9/12/201940646도서: 시작하세요! C# 8.0 프로그래밍 [4]
12020정성태9/11/201923829VC++: 134. SYSTEMTIME 값 기준으로 특정 시간이 지났는지를 판단하는 함수
12019정성태9/11/201917381Linux: 23. .NET Core + 리눅스 환경에서 Environment.CurrentDirectory 접근 시 주의 사항
12018정성태9/11/201916176오류 유형: 567. IIS - Unrecognized attribute 'targetFramework'. Note that attribute names are case-sensitive. (D:\lowSite4\web.config line 11)
12017정성태9/11/201919984오류 유형: 566. 비주얼 스튜디오 - Failed to register URL "http://localhost:6879/" for site "..." application "/". Error description: Access is denied. (0x80070005)
12016정성태9/5/201920006오류 유형: 565. git fetch - warning: 'C:\ProgramData/Git/config' has a dubious owner: '(unknown)'.
12015정성태9/3/201925390개발 환경 구성: 457. 윈도우 응용 프로그램의 Socket 연결 시 time-out 시간 제어
12014정성태9/3/201919125개발 환경 구성: 456. 명령행에서 AWS, Azure 등의 원격 저장소에 파일 관리하는 방법 - cyberduck/duck 소개
12013정성태8/28/201922035개발 환경 구성: 455. 윈도우에서 (테스트) 인증서 파일 만드는 방법 [3]
12012정성태8/28/201926599.NET Framework: 859. C# - HttpListener를 이용한 HTTPS 통신 방법
12011정성태8/27/201926204사물인터넷: 57. C# - Rapsberry Pi Zero W와 PC 간 Bluetooth 통신 예제 코드파일 다운로드1
... [76]  77  78  79  80  81  82  83  84  85  86  87  88  89  90  ...