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)
13299정성태3/27/20233737Windows: 237. Win32 - 모든 메시지 루프를 탈출하는 WM_QUIT 메시지
13298정성태3/27/20233685Windows: 236. Win32 - MessageBeep 소리가 안 들린다면?
13297정성태3/26/20234359Windows: 235. Win32 - Code Modal과 UI Modal
13296정성태3/25/20233700Windows: 234. IsDialogMessage와 협업하는 WM_GETDLGCODE Win32 메시지 [1]파일 다운로드1
13295정성태3/24/20233969Windows: 233. Win32 - modeless 대화창을 modal처럼 동작하게 만드는 방법파일 다운로드1
13294정성태3/22/20234142.NET Framework: 2105. LargeAddressAware 옵션이 적용된 닷넷 32비트 프로세스의 가용 메모리 - 두 번째
13293정성태3/22/20234207오류 유형: 853. dumpbin - warning LNK4048: Invalid format file; ignored
13292정성태3/21/20234335Windows: 232. C/C++ - 일반 창에도 사용 가능한 IsDialogMessage파일 다운로드1
13291정성태3/20/20234746.NET Framework: 2104. C# Windows Forms - WndProc 재정의와 IMessageFilter 사용 시의 차이점
13290정성태3/19/20234253.NET Framework: 2103. C# - 윈도우에서 기본 제공하는 FindText 대화창 사용법파일 다운로드1
13289정성태3/18/20233446Windows: 231. Win32 - 대화창 템플릿의 2진 리소스를 읽어들여 자식 윈도우를 생성하는 방법파일 다운로드1
13288정성태3/17/20233557Windows: 230. Win32 - 대화창의 DLU 단위를 pixel로 변경하는 방법파일 다운로드1
13287정성태3/16/20233713Windows: 229. Win32 - 대화창 템플릿의 2진 리소스를 읽어들여 윈도우를 직접 띄우는 방법파일 다운로드1
13286정성태3/15/20234169Windows: 228. Win32 - 리소스에 포함된 대화창 Template의 2진 코드 해석 방법
13285정성태3/14/20233761Windows: 227. Win32 C/C++ - Dialog Procedure를 재정의하는 방법파일 다운로드1
13284정성태3/13/20233956Windows: 226. Win32 C/C++ - Dialog에서 값을 반환하는 방법파일 다운로드1
13283정성태3/12/20233499오류 유형: 852. 파이썬 - TypeError: coercing to Unicode: need string or buffer, NoneType found
13282정성태3/12/20233822Linux: 58. WSL - nohup 옵션이 필요한 경우
13281정성태3/12/20233741Windows: 225. 윈도우 바탕화면의 아이콘들이 넓게 퍼지는 경우 [2]
13280정성태3/9/20234500개발 환경 구성: 670. WSL 2에서 호스팅 중인 TCP 서버를 외부에서 접근하는 방법
13279정성태3/9/20234048오류 유형: 851. 파이썬 ModuleNotFoundError: No module named '_cffi_backend'
13278정성태3/8/20234026개발 환경 구성: 669. WSL 2의 (init이 아닌) systemd 지원 [1]
13277정성태3/6/20234667개발 환경 구성: 668. 코드 사인용 인증서 신청 및 적용 방법(예: Digicert)
13276정성태3/5/20234338.NET Framework: 2102. C# 11 - ref struct/ref field를 위해 새롭게 도입된 scoped 예약어
13275정성태3/3/20234696.NET Framework: 2101. C# 11의 ref 필드 설명
13274정성태3/2/20234278.NET Framework: 2100. C# - ref 필드로 ref struct 타입을 허용하지 않는 이유
1  2  3  4  5  6  7  8  9  10  11  12  [13]  14  15  ...