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

비밀번호

댓글 작성자
 




1  2  3  4  5  [6]  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13483정성태12/14/20232314닷넷: 2184. C# - 하나의 resource 파일을 여러 프로그램에서 (AOT 시에도) 사용하는 방법파일 다운로드1
13482정성태12/13/20232907닷넷: 2183. C# - eFriend Expert OCX 예제를 .NET Core/5+ Console App에서 사용하는 방법 [2]파일 다운로드1
13481정성태12/13/20232285개발 환경 구성: 693. msbuild - .NET Core/5+ 프로젝트에서 resgen을 이용한 리소스 파일 생성 방법파일 다운로드1
13480정성태12/12/20232659개발 환경 구성: 692. Windows WSL 2 + Chrome 웹 브라우저 설치
13479정성태12/11/20232339개발 환경 구성: 691. WSL 2 (Ubuntu) + nginx 환경 설정
13477정성태12/8/20232531닷넷: 2182. C# - .NET 7부터 추가된 Int128, UInt128 [1]파일 다운로드1
13476정성태12/8/20232268닷넷: 2181. C# - .NET 8 JsonStringEnumConverter의 AOT를 위한 개선파일 다운로드1
13475정성태12/7/20232333닷넷: 2180. .NET 8 - 함수 포인터에 대한 Reflection 정보 조회파일 다운로드1
13474정성태12/6/20232177개발 환경 구성: 690. 닷넷 코어/5+ 버전의 ilasm/ildasm 실행 파일 구하는 방법 - 두 번째 이야기
13473정성태12/5/20232386닷넷: 2179. C# - 값 형식(Blittable)을 메모리 복사를 이용해 바이트 배열로 직렬화/역직렬화파일 다운로드1
13472정성태12/4/20232196C/C++: 164. Visual C++ - InterlockedCompareExchange128 사용 방법
13471정성태12/4/20232276Copilot - To enable GitHub Copilot, authorize this extension using GitHub's device flow
13470정성태12/2/20232569닷넷: 2178. C# - .NET 8부터 COM Interop에 대한 자동 소스 코드 생성 도입파일 다운로드1
13469정성태12/1/20232294닷넷: 2177. C# - (Interop DLL 없이) CoClass를 이용한 COM 개체 생성 방법파일 다운로드1
13468정성태12/1/20232232닷넷: 2176. C# - .NET Core/5+부터 달라진 RCW(Runtime Callable Wrapper) 대응 방식파일 다운로드1
13467정성태11/30/20232327오류 유형: 882. C# - Unhandled exception. System.Runtime.InteropServices.COMException (0x800080A5)파일 다운로드1
13466정성태11/29/20232496닷넷: 2175. C# - DllImport 메서드의 AOT 지원을 위한 LibraryImport 옵션
13465정성태11/28/20232244개발 환경 구성: 689. MSBuild - CopyToOutputDirectory가 "dotnet publish" 시에는 적용되지 않는 문제파일 다운로드1
13464정성태11/28/20232389닷넷: 2174. C# - .NET 7부터 UnmanagedCallersOnly 함수 export 기능을 AOT 빌드에 통합파일 다운로드1
13463정성태11/27/20232302오류 유형: 881. Visual Studio - NU1605: Warning As Error: Detected package downgrade
13462정성태11/27/20232343오류 유형: 880. Visual Studio - error CS0246: The type or namespace name '...' could not be found
13461정성태11/26/20232379닷넷: 2173. .NET Core 3/5+ 기반의 COM Server를 registry 등록 없이 사용하는 방법파일 다운로드1
13460정성태11/26/20232330닷넷: 2172. .NET 6+ 기반의 COM Server 내에 Type Library를 내장하는 방법파일 다운로드1
13459정성태11/26/20232308닷넷: 2171. .NET Core 3/5+ 기반의 COM Server를 기존의 regasm처럼 등록하는 방법파일 다운로드1
13458정성태11/26/20232317닷넷: 2170. .NET Core/5+ 기반의 COM Server를 tlb 파일을 생성하는 방법(tlbexp)
13457정성태11/25/20232258VS.NET IDE: 187. Visual Studio - 16.9 버전부터 추가된 "Display inline type hints" 옵션
1  2  3  4  5  [6]  7  8  9  10  11  12  13  14  15  ...