수차례 WAS 및 ACT를 이용하여 상호 비교도 하고, IIS 로그파일에 네트워크 모니터까지 총동원해서 하나하나 분석해본 결과, 드디어 원인을 발견했습니다.


단일 호출 상황에서의 GET방식과 POST/SOAP방식의 성능 차이, ASP와 ASP.NET의 성능 차이에 영향을 미치는 요소는 크게 다음의 2가지인 것으로 드러났습니다.



1. HTTP 프로토콜 버전의 문제점


HTTP 버전이 1.0인 경우가 1.1인 경우에 비해서 훨씬 빠른(0~15 ms) 결과를 보였습니다. 그 이유는 간단합니다. HTTP/1.1 POST 요청의 경우에는 한번 요청에 최소 두개의 응답이 잇달아 반환되는데 그 첫번째 응답은 항상 100-Continue이며, 결과 데이터는 두번째 응답에 포함되어 반환됩니다. 이것이 성능 저하(200~300 ms)를 일으키는 원인이었습니다. HTTP/1.0 POST 요청의 경우에는 단 한번의 응답만 반환됩니다. 이것은 또한 GET(0~10 ms)과 POST/SOAP(200~300 ms)의 응답속도 차이를 설명할 때도 동일하게 적용됩니다.



2. Connection(연결유지)의 문제점


지난번 테스트에서 (HTTP/1.0은 논외로 하고) 모두 똑같은 HTTP/1.1을 사용한 POST 요청 상황이라도 ASP페이지가 ASPX페이지에 비해 훨씬 빠른 응답속도를 나타냈던 이유는 HTTP 헤더의 Connection 속성 때문인 것으로 나타났습니다. 즉, ASP페이지의 경우 Connection: Close (IIS설정에서 Keep-Alive 속성 해제)로 설정되어 있는 경우 GET 방식일때와 거의 동일하게 빠른 응답속도(0~15 ms)를 보입니다. 그러나 ASPX페이지의 응답속도는 이 속성에 의해 거의 영향을 받지 않는 것으로 나타났습니다. (ASPX페이지는 Keep-Alive로 설정된 경우가 상대적으로 안정적이며, 약간 더 빠른 응답을 보였습니다.) 즉, IIS의 연결유지 설정에 따라 ASP페이지(0~15 ms)가 ASPX페이지(200~300 ms)보다 훨씬 빠른 응답을 보이게 되었던 것입니다.



결론 : 단일 POST/SOAP 호출 상황에서는 위와 같은 이유에서 HTTP/1.0 버전이 HTTP/1.1 버전에 비해 훨씬 빠르며, 연결 유지를 해제한 ASP페이지가 ASPX페이지에 비해 훨씬 빠른 응답속도를 보이는 반면, 부하가 증가할수록 ASPX페이지가 상대적으로 점점 성능이 우수해지게 되어 위와 같은 요소가 특별한 영향을 미치지 않게 된다는 점을 알 수 있었습니다. 그러나, 응답 데이터의 크기가 크지 않은 경우라면 100-Continue 응답은 사실상 불필요한 성능 저하만을 야기시키므로 POST 요청은 가급적 HTTP/1.0 버전을 이용하는 것이 유리할 것 같습니다.


'Tech: > .NET·C#' 카테고리의 다른 글

웹 팜(Web Farm)에서 machineKey 설정  (1) 2008.06.26
ASP vs. ASP.NET 비교  (0) 2008.06.26
Oracle .NET Data Provider  (0) 2008.06.26
.NET Framework을 복구할 때  (0) 2008.06.26
C# - P/Invoke 호출 예제  (0) 2008.06.26


Posted by 떼르미
,


자바스크립트를 허용해주세요!
Please Enable JavaScript![ Enable JavaScript ]