소프트웨어/C# & ASP.NET

Java vs. .NET 성능 비교

falconer 2009. 10. 9. 17:16

어떤 이에게 있어 자바 대 닷넷은 아주 식상한 주제일 수 있고, 또 어떤이에게 있어서 아직도 그런 걸 따지는 데가 있냐고 반문할 수도 있다. 하지면 여전히 엔터프라이즈 시장에서 개발 플랫폼 선정을 할 경우에 한번쯤은 따지고 넘어가야 어딘지 모르는 불안한 기운을 잠재울 수 있다.

이번 글은 마이크로소프트가 몇 년간 꾸준히 테스트를 진행하면서 결과 리포트를 MSDN에 발간하는 .NET StockTrader 애플리케이션에 관한 것이다. 최신 결과는 지난 3월에 발간한 것으로 “Benchmarking IBM WebSphere 7 on IBM Power6 and AIX vs. Microsoft .NET on Hewlett Packard BladeSystem and Windows Server 2008”이라는 문서이다.

벤치마크는 스펙이 아니라 구체적인 구현물간의 비교가 되어야 하기에, Java EE의 구현체로서 StockTrader를 만든 IBM의 최신 WAS인 WebSphere 7을 활용하여 Java EE의 일반적인 웹 애플리케이션 성능 및 웹 서비스 성능과 이에 따른 비용을 산정하고 .NET의 경우 Microsoft의 최신 WAS라 할 수 있는 Windows Server 2008 기반의 .NET 3.5하에서의 동일한 값들을 산정하여 비교한 것이다.

여기에 사용된 자바 및 닷넷 소스 코드는 이곳에서 다운로드 가능하다.

서버 사양
1. IBM Power 570 with IBM WebSphere 7 and AIX 5.3
2. Hewlett Packard BladeSystem C7000 with IBM WebSphere 7 and Microsoft Windows Server 2008
3. Hewlett Packard BladeSystem C7000 with Microsoft .NET and Windows Server 2008
즉, JavaEE의 경우 IBM Power 570에서 한번, HP BladeSystem에서 한번 두번 진행하고 .NET의 경우 HP BladeSystem에서 한번 진행했다. (아마도 오해의 소지를 없애기 위해 JavaEE의 경우 IBM H/W에서 한번, 동일한 조건의 HP H/W에서 한번 진행한 것으로 보인다.)

테스트 항목
1. 일반적인 웹 애플리케이션 성능 비교
2. 미들티어 웹 서비스 성능 비교 (클라이언트 단 제외)
3. 웹 서비스 벤치마크 (WSTest)

위 세가지 경우에 있어서 공통적으로 적용한 규칙은 테스팅 툴을 사용하여 30분간 부하를 적용하고 유지가능한 최고 TPS (Transaction per second)를 선정하는 것이다.

시스템 아키텍처
웹 애플리케이션 성능 비교의 경우 Mercury의 LoadRunner를 사용하였으며, 32대의 물리적 클라이언트가 사용되었고, 각 클라이언트는 수백명의 서로 다른 사용자로 부하를 생성했으며, 각 사용자는 매 요청마다 1초의 Think time을 갖는 방식으로 진행되었으며 30분간 진행되었다. 에러 발생 빈도는 측정 기간동안 0.01%이내에 위치하도록 모니터링되었다.
image 

미들티어 웹 서비스 성능 비교 및 WSTest 웹 서비스 벤치마크의 경우에는, .NET Capacity Planner 웹 서비스 테스트기를 이용하였고, 0.1초의 Think Time을 갖는 10개의 서로 다른 클라이언트에서 부하를 생성하였다.
image

공정한 테스트를 위한 고려사항
1. 자바의 경우, Java EE 5 기반의 WebSphere 7에서 최적화되고 가장 빠른 Trader 애플리케이션 적용하였으며, EJB사용하지 않고 직접 JDBC를 호출하여 데이터베이스 작업하는 방식으로 JSP 와 Servlet 만을 이용하여 개발되었다. 또한 최적의 성능을 위해 WebSphere의 경우 쓰레드 풀, 커넥션 풀, queue connection factory, Heap size 등등에 대한 튜닝이 진행되었으며 결과적으로 최고 TPS 측정시 CPU 사용량이 96~100%이 될 수 있도록 하였다.
2. 캐쉬의 경우 양쪽 모두 적용하였다. 자바의 경우 WebSphere Servlet Caching을 적용하였고 닷넷의 경우 .NET Cache API를 적용하였다.
3. 데이터베이스의 부하 측면에서는 StockTrader를 만든 IBM의 기본 부하보다 더 현실적으로 하기 위해 500,000계정으로 각 계정마다 5개의 주문, 100,000 quote를 기본으로 가져가도록 했다.
4. 데이터베이스 구성은 IBM WebShpere 7의 경우 All-IBM 구성을 따랐으며 IBM DB2 v9.5 (Enterprise Edition), 최신의 IBM DB2 v9.5 JDBC 드라이버가 사용되었다. .NET의 경우 SQL Server 2008 (Enterprise Edition)을 사용하였다. 이 벤치마크는 데이터베이스 성능 비교가 아니기 때문에 데이터베이스때문에 결과가 왜곡되지 않도록 충분한 성능을 발휘하는 H/W를 제공되었다. (자세한 H/W 사양은 결과 리포트를 참고하시길...)

벤치 마크 결과

1. 웹 애플리케이션 성능 비교
앞서 기술한 대로 IBM WebSphere 7의 경우 EJB 없이 JSP/Servlet만으로 직접 JDBC 호출한 것이며, .NET의 경우 ASP.NET/Web Forms에서 ADO.NET을 통해 데이터베이스 호출한 경우이다.
image 
이러한 최고 TPS를 달성하기 위해 지출된 비용을 산정하면 아래와 같다. 비용 산정과 관련된 상세한 사항은 리포트의 Appendix를 참고하시길...
image

이를 통해 다음과 같은 사실을 알 수 있다.
1. .NET / Windows Server 2008 / HP BladeSystem C7000 조합이 IBM WebSphere 7 / IBM AIX 5.3 / IBM Power 570 기반의 Java EE에 비해 57% 성능이 우수함을 알 수 있으며, 서버를 구성하기 위해 들어간 절대 비용 측면에서는 오히려 IBM WebSphere 7 / IBM AIX 5.3 / IBM Power 570 의 경우가 .NET / Windows Server 2008 / HP BladeSystem C7000 에 비해 419% 더 지출된 것을 알 수 있다.
2. IBM WebSphere 7 / Windows Server 2008 / HP BladeSystem C7000 의 성능이 IBM WebSphere 7 / IBM AIX 5.3 / IBM Power 570 에 비해 성능이 37% 더 나은 것을 알 수 있으며, 서버 구성에 들어간 절대 비용 측면에서는 오히려 IBM WebSphere 7 / IBM AIX 5.3 / IBM Power 570 조합이 IBM WebSphere 7 / Windows Server 2008 / HP BladeSystem C7000조합보다 198% 더 비싼 것을 알 수 있다.
3. 전반적으로 Windows Server 2008기반의 닷넷이 비용 성능 측면에서 훨씬 우수함을 알 수 있다. IBM WebSphere 7 / IBM AIX 5.3 / IBM Power 570 조합은 .NET / Windows Server 2008 / HP BladeSystem C7000 조합보다 성능 대비 비용이 8배 높은 것으로 나타났다. 이는 결국, 같은 부하를 감당하는 시스템을 구축할 경우 IBM WebSphere 7 / IBM AIX 5.3 / IBM Power 570 조합이 .NET / Windows Server 2008 / HP BladeSystem C7000 조합에 비해  8배 높은 비용을 지출해야함을 의미한다.

2. 미들티어 웹 서비스 벤치마크
이 테스트는 StockTrader의 비지니스 서비스 앞단에 웹 서비스를 위한 Facade를 만들고 이 Facade부터 데이터베이스 단까지의 성능을 비교한 것이다. 앞의 웹 애플리케이션 성능 비교와 다른 점은 전체 페이지가 아닌 개별 SOAP 요청이 처리되는 것을 기준으로 TPS가 산출된다는 것이다.
IBM WebSphere의 경우 웹 서비스 Facade는 JAX-WS로 구현되었고 표준 SOAP/WSDL 기반의 서비스를 노출하며, 사용자의 요청을 IBM HTTP Server가 WebSphere상의 웹 서비스 티어로 전달하는 구조로 되어 있다. .NET의 경우 WCF를 사용하여 웹 서비스 Facade를 구현하였고 SOAP/WSDL 기반의 표준 웹서비스를 노출하며, IIS 7.0이 사용자의 요청을 WCF-기반의 서비스에 전달한다.
.NET Capacity Planner 웹 서비스 테스트 툴을 이용하여 SOAP 요청을 생성하여 테스트를 진행하였다.
image 
비용 대비 성능비 (Price Performance Ratio) 는 아래와 같다.
image

결과를 통해 다음과 같은 사실을 알 수 있다.
1. .NET / Windows Server 2008 / HP BladeSystem C7000 조합이 IBM WebSphere 7 / IBM AIX 5.3 / IBM Power 570 조합에 비해 웹 서비스 성능이 111% 더 우수함을 알 수 있다. 반면, 서버 구성에 지출된 절대 비용 측면에서는 오히려 IBM WebSphere 7 / IBM AIX 5.3 / IBM Power 570 서버의 경우가 .NET / Windows Server 2008 / HP BladeSystem C7000 의 경우보다 419% 더 지출된 것을 알 수 있다.
2. IBM WebSphere 7 / Windows Server 2008 / HP BladeSystem C7000 조합의 경우가 IBM WebSphere 7 / IBM AIX 5.3 / IBM Power 570 의 경우보다  성능이 37% 더 우수함을 알 수 있다.  반면 서버 구성에 지출된 절대 비용 측면에서는 오히려 IBM WebSphere 7 / IBM AIX 5.3 / IBM Power 570 의 경우가 IBM WebSphere 7 / Windows Server 2008 / HP BladeSystem C7000의 경우보다 198% 더 지출된 것을 알 수 있다.
3.전반적으로 비용 대비 성능 측면에서 Windows Server 2008 기반의 닷넷 시스템이 훨씬 나은 결과를 보여주고 있다. .NET / Windows Server 2008 / HP BladeSystem C7000 의 경우가 IBM WebSphere 7 / IBM AIX 5.3 / IBM Power 570 의 경우에 비해 비용 대비 성능 측면에서 10배 우수함을 보여준다. 이는 결국 같은 웹 서비스 성능을 내는 시스템을 구축할 경우, IBM WebSphere 7 / IBM AIX 5.3 / IBM Power 570 을 사용할 경우 .NET / Windows Server 2008 / HP BladeSystem C7000 을 사용할 때보다 10배 비싼 구축 비용을 지불해야 함을 의미한다.

3. WSTest 벤치마크
WSTest는 뒷단 비지니스 로직이나 데이터베이스 엑세스 없이 순수하게 구현 플랫폼의 웹 서비스 스택 성능 (즉, XML Serialization/Deserialization, http 네트웍 접근 등) 을 비교하는 것이다. WSTest는 원래 썬마이크로시스템즈에서 고안한 것으로 마이크로소프트가 보완하여 적용하였다.
IBM WebSphere 7의 경우, 앞의 미들티어 웹 서비스 성능 벤치마크에서와 마찬가지로 JAX-WS 기반의 웹 서비스 스택에서  SOAP/WSDL 기반의 표준 웹 서비스로 노출시켜 진행하였으며, 전달된 요청은 IBM Http Server가 IBM WebSphere 7 서버내의 웹 서비스 구현체에 전달하는 구조로 되어있다.
.NET의 경우, WCF를 이용하여 SOAP/WSDL 기반의 표준 웹 서비스를 노출시켰고, 전달된 요청은 IIS 7.0이 WCF 기반의 웹 서비스 구현체에 전달하는 형태로 되어 있다. 표준 기반의 웹 서비스이기 때문에 IBM WebSphere 7기반의 자바 구현체와 .NET 기반의 구현체 사이에 상호 운용이 가능하다.
image 
비용 대비 성능비 (Price Performance Ratio)로 환산한 결과는 다음과 같다. 비용 산출에 대한 근거는 리포트의 Appendix에 상세히 설명되어 있다.
image 
위 결과를 통해 다음과 같은 사실을 알 수 있다.
1. .NET / Windows Server 2008 / HP BladeSystem C7000 조합이 IBM WebSphere 7 / IBM AIX 5.3 / IBM Power 570 조합의 경우에 비해 최소 112% 성능이 더 우수함을 알 수 있다. (WSTest의 각 Operation별로 조금씩 다르다.) 반면 서버 구성에 지출된 절대 비용 측면에서는 오히려 IBM WebSphere 7 / IBM AIX 5.3 / IBM Power 570 서버의 경우가 .NET / Windows Server 2008 / HP BladeSystem C7000의 경우보다 419% 더 지출된 것을 알 수 있다.
2. IBM WebSphere 7 / Windows Server 2008 / HP BladeSystem C7000 조합의 경우가 IBM WebSphere 7 / IBM AIX 5.3 / IBM Power 570 의 경우보다  성능이 52% 더 우수함을 알 수 있다.  반면 서버 구성에 지출된 절대 비용 측면에서는 오히려 IBM WebSphere 7 / IBM AIX 5.3 / IBM Power 570 의 경우가 IBM WebSphere 7 / Windows Server 2008 / HP BladeSystem C7000의 경우보다 198% 더 지출된 것을 알 수 있다.
3. 전반적으로 비용 대비 성능 측면에서 Windows Server 2008 기반의 닷넷 시스템이 훨씬 나은 결과를 보여주고 있다. .NET / Windows Server 2008 / HP BladeSystem C7000 의 경우가 IBM WebSphere 7 / IBM AIX 5.3 / IBM Power 570 의 경우에 비해 비용 대비 성능 측면에서 10배 우수함을 보여준다. 이는 결국 같은 웹 서비스 성능을 내는 시스템을 구축할 경우, IBM WebSphere 7 / IBM AIX 5.3 / IBM Power 570 을 사용할 경우 .NET / Windows Server 2008 / HP BladeSystem C7000 을 사용할 때보다 10배 비싼 구축 비용을 지불해야 함을 의미한다. (최대 TPS 달성시 기준으로 단위 TPS당 드는 비용 산출)

결론적으로 웹 애플리케이션을 구축할 경우, Windows Server 2008 기반의 닷넷 시스템이 IBM Power 570 기반의 WebSphere 7 기반 Java EE 시스템에 비해 가격은 1/5 수준으로 성능은 57% 더 나은 시스템을 구축할 수 있음을 알 수 있다. 같은 WebSphere 7 기반의 웹 애플리케이션 시스템 구축의 경우에도 Windows Server 2008 / HP BladeSystem C7000 위에서 구동하는 것이 IBM AIX 5.3 / IBM Power 570 위에서 구동하는 것에 비해 가격은 1/3 수준으로, 성능은 37%  더 나은 결과를 제공할 수 있음을 알 수 있다.
웹 서비스를 구축할 경우에도, Windows Server 2008 기반의 닷넷 시스템이 IBM Power 570 기반의 WebSphere 7 기반 Java EE 시스템에 비해서 가격은 1/5 수준으로 성능은 111% 더 나은 웹 서비스를 구축할 수 있음을 알 수 있다. 같은 WebSphere 7 기반의 자바 웹 서비스 시스템 구축의 경우에도 Windows Server 2008 / HP BladeSystem C7000 위에서 구동하는 것이 IBM AIX 5.3 / IBM Power 570 위에서 구동하는 것에 비해가격은 1/3 수준으로 성능은 37%  더 나은 결과를 제공할 수 있음을 알 수 있다.
image

출처 : http://kingcrap.com/entry/Java-vs-NET-성능-비교