안녕하세요.
안녕하세요. 웹 어플리케이션 전문가가 되고 싶은 주인장입니다.
오늘은 Java Tempalte 성능에 관하여 올해 처음으로 블로그에 관련 내용 기재 합니다.
Java 진영의 개발자 분들은 항상 어떤 Template 프레임워크를 쓰는게 나을까? 라는 고민을 하실 겁니다.
요즘에는 Spring진영에서 밀고 있는 thymeleaf가 있고 고전으로는 Freemarker, Velocity, JSP가 있습니다.
유행에 따르자면 thymeleaf가 단연 고려사항에 최우선 순위이지만 템플릿 컨셉에 따라 다른걸 사용 해야 할
경우도 있습니다. 이때 고민을 덜어드리고자 각 템플릿 성능을 비교해 보았습니다.
기본적인 데이터 자료는 아래 github에서 참고하였으며
https://github.com/jreijn/spring-comparing-template-engines
해당 github 저장소를 fork 받아서 제가 필요한 템플릿만 따로 성능 측정 하였습니다. 개인적으로는 freemarker가
돋보였으며 thymeleaf는 고려 대상에서 제외 하였습니다. 그 이유는 아래에 있습니다.
Benchmarks 30.2020
Mustache는 VIEW 역할만 강조하는 철학이 실제 템플릿을 이용할 방법과 차이가 있어서 테스트 하지 않았습니다.
JSP가 제일 빠르고 Freemarker, Velocity, Thymeleaf, Handlebars 순서로 성능 차이가 났습니다.
JSP가 제일 빠르지만 JSTL 및 SCRIPTLET을 사용할 수밖에 없는 상황이 생기는데 이러한 점이 싫다면 몇년만에
업데이트가 된 Freemarker를 추천 합니다.
Thymeleaf는 유명세 만큼 성능은 보여 주질 않았으며 가장 실망스러운 결과 였습니다. WAS서버 없이 화면출력이 가능
하다는 장점이 있으나 실제 개발할 때 WAS재기동 하지 않아야 되는 상황이 얼마나 될까요?
그리고 Thymeleaf는 Front Framework(Vue, React, Angular) 사용 시 속성에서 처리하는 로직이 중복 됨에 따라 오히려 복합도가 증가하는 상황이 생겻습니다. 이러한 이유로 Thymeleaf는 템플릿 사용 대상 목록에서 제외 하였습니다.
개인 PC에서 처리하여 실제 서버운용시 약간의 차이가 있으나 CPU CORE4개를 사용하는것을 확인 할 수가 있었으며 테스트한 템플릿 모두 동일합니다.
템플릿 사용에는 정답이 없으며 이 결과가 결정하는데 도움이 되었으면 합니다.
일부 템플릿 엔진 버전을 최신화 시켰으며 이전에 테스트 했던 결과와 마찬가지로 순위에는 변화가 없었습니다.
velocity - latest version
freemarker - latest version
thymeleaf - latest version(not change)
handlebars - latest version(not change)
Test Environment: Docker(centos 7 latest)
https://hub.docker.com/r/zerocooldog/centos-java-tmpl
These tests were done on a local machine with the following specs:
Spring-Boot: 2.2.5.RELEASE
Windows 10 (1803, build: 17134.706)
3,59 GHz AMD Ryzen 7 3700X 8-Core Processor
openjdk version "11.0.6" 2020-01-14 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.6+10-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.6+10-LTS, mixed mode, sharing)
Apache Tomcat 9.0.31
Results in order (high to low):
$ ab -n 25000 -c 25 -l http://localhost:8080/velocity
$ ab -n 25000 -c 25 -l http://localhost:8080/freemarker
$ ab -n 25000 -c 25 -l http://localhost:8080/thymeleaf
$ ab -n 25000 -c 25 -l http://localhost:8080/handlebars
$ ab -n 25000 -c 25 -l http://localhost:8080/jsp
Total time taken for processing 25.000 requests with a concurrency level of 25. (lower is better) :
Handlebars 63.21 seconds
Thymeleaf 11.06 seconds
Velocity 09.95 seconds
Freemarker 06.19 seconds
JSP 05.05 seconds
Result ScreenShot
'Performance' 카테고리의 다른 글
MessagePack, ProtoBuf 성능 비교 (0) | 2020.09.16 |
---|---|
GraphicMagicK vs Node Sharp (0) | 2020.04.12 |
댓글