티스토리 뷰
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 이 최고야" 라고 한다고 해도요.
'Programming > Java' 카테고리의 다른 글
Spring 에서 여러 객체를 @Autowired 로 array, List, Set, Map 으로 주입받기 (0) | 2019.08.09 |
---|---|
Tomcat 에 배포되던 소스를 JBoss(Wildfly) 에 배포 (0) | 2019.07.23 |
Undertow 와 Tomcat 의 간단한 비교 (4) | 2019.02.22 |
Spring Boot 공식 지원 내장 WAS 인 Undertow 을 씁시다. (9) | 2019.01.23 |
OracleJDK 유료화 FAQ (0) | 2018.09.05 |
- Total
- Today
- Yesterday
- java config
- 프로젝트 규모
- 내장 WAS
- Spring
- manjaro
- 엘지
- 클라우드플레어
- couchbase
- NoSQL
- Spring MVC
- paging
- Spring Boot
- docker
- RestTemplate
- boot
- git
- KDE
- 도입기
- 시니어 프로그래머
- messages.properties
- 워드프레스
- 페이징
- OracleJDK
- jooq
- Nas
- proxmox
- Phabricator
- SI
- 외장 WAS
- Redmine
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |