티스토리 뷰

반응형

2019/02/22 - [Programming/Java] - Undertow 와 Tomcat 의 간단한 비교


내장(Embedded) Tomcat 이 널리 사용되고 있진 않기 때문인지 기존에 사용하던 별도 설치를 통한 Tomcat(외장 Tomcat)이 내장 Tomcat 보다 성능이 떨어진다고 주장하는 사람과 그렇지 않다는 사람들이 여전히 각각 존재합니다.


진실은 무엇일까요?


Tomcat 개발자들이 성능은 동일하다고 밝혔다는 것이 널리 알려지긴 했지만 제가 원문을 찾기도 귀찮고 해서 그냥 부하 테스트를 진행했습니다. 이전 글(상단 링크)의 Tomcat 이 내장 Tomcat 이기 때문에 Tomcat WAS 을 별도로 내려받아 이전 글에서 이용한 war 파일을 ROOT.war 로 이름을 바꾼 뒤 %CATALINA_HOME%\webapps\ 에 넣어줘서 동일하게 호출할 수 있는 환경을 만들었습니다.


결과입니다.



ab 의 결과입니다.


C:\Temp>ab -n 100000 -c 1000 http://localhost:8080/test/test2

This is ApacheBench, Version 2.3 <$Revision: 1843412 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/


Benchmarking localhost (be patient)

Completed 10000 requests

Completed 20000 requests

Completed 30000 requests

Completed 40000 requests

Completed 50000 requests

Completed 60000 requests

Completed 70000 requests

Completed 80000 requests

Completed 90000 requests

Completed 100000 requests

Finished 100000 requests



Server Software:

Server Hostname:        localhost

Server Port:            8080


Document Path:          /test/test2

Document Length:        56 bytes


Concurrency Level:      1000

Time taken for tests:   69.887 seconds

Complete requests:      100000

Failed requests:        48749

   (Connect: 0, Receive: 0, Length: 48749, Exceptions: 0)

Total transferred:      38109155 bytes

HTML transferred:       5634872 bytes

Requests per second:    1430.88 [#/sec] (mean)

Time per request:       698.870 [ms] (mean)

Time per request:       0.699 [ms] (mean, across all concurrent requests)

Transfer rate:          532.52 [Kbytes/sec] received


Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:        0    0   0.4      0       5

Processing:   153  695  48.4    701     772

Waiting:        1  350 199.0    350     759

Total:        154  695  48.4    701     772


Percentage of the requests served within a certain time (ms)

  50%    701

  66%    721

  75%    729

  80%    734

  90%    743

  95%    752

  98%    756

  99%    761

 100%    772 (longest request)


더 다양한 형태의 테스트가 있어야 정확한 결과를 말할 수 있겠지만, 위 결과만 봤을 때에는 외장과 내장 사이의 유의미한 성능 차이는 발견할 수 없다고 말하는게 맞습니다.



물론 외장 WAS 을 쓰게 됨으로써 얻는 이득이 존재합니다. 이는 훨씬 더 이전부터 논쟁이 되어 왔던 Apache HTTPd 와 Tomcat 을 연동해야 하느냐와 일맥상통하는 것입니다. 사실 최근의 Tomcat 에는 경량 HTTPd 가 내장되어 있기 때문에 HTTPd 와 mod_jk 혹은 mod_proxy 와 같은 것을 이용해서 연동을 할 필요는 없습니다. 심지어 상당수의 사이트에서 모든 요청을 Tomcat 으로 넘기는 설정을 사용하고 있는 판국이라(그냥 복붙하는 사람이 많다는 소리) 더더욱 의미없이 사용되는 경향이 있습니다. 하지만, HTTPd 의 많은 Module 을 이용해 자동화된 처리(예를 들면 이미지를 서비스할 때 자동으로 Cache 만료를 10 년으로 처리하게 한다던지 하는)가 필요할 경우는 연동하는게 필요할 수 있습니다.

즉, 별도의 WAS 을 이용할 때 Valve 이용한다던지 하는 기능 이용이 필요하거나 기타 다른 기능을 적용하기 쉽거나 혹은 유일한 방법일 수 있습니다. 또는 하나의 서버에서 VirtualHost 을 이용해 WAS 하나로 여러 서비스를 제공하는 방법도 고려할 수 있습니다. 이런 경우에는 외장 WAS 을 고려해야겠죠. 하지만, 그렇지 않다면 Spring Boot 을 이용해 편리하게 적용 가능한 내장 WAS 을 이용하는 것도 좋은 선택지일 수 있습니다. 특히 요즘은 Microservice 나 VM 을 이용한 단독 처리를 많이 고려하기 때문에 외장 WAS 을 쓸 이유는 거의 없습니다.


혹시 주변의 아는 형이 "외장 WAS 가 더 좋아" 라고 한다면, 그 형이 최신 기술 습득을 조금 등한시 했다고 알려드리세요. 물론 "Tomcat 이면 된다" 라거나 "Tomcat 이 최고야" 라고 한다고 해도요.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함