java를 배우면 기본적으로 jsp를 배우게 됩니다.
jsp는 일반적인 java MVC 구조에서 View 역할을 하는데, 요즘 Spring에서는 View로 Thymeleaf를 밀고 있습니다.
1. thymeleaf와 jsp의 차이
jsp의 경우에는 servlet 형태로 변환되어 실행됩니다. servlet이 자바 소스이기 때문에 jsp에서도 java코드를 사용할 수 있습니다.(하지만 보통 jsp 내부에 java코드를 넣는 것은 추천하지 않습니다.)
반면, Thymeleaf는 html, xml, js, css 등을 처리할 수 있는 웹 및 독립형 환경에서 사용이 가능한 java 템플릿 엔진입니다. Thymeleaf는 html 파일을 가져와서 파싱 하고 그걸 분석하여 정해진 위치에 데이터를 뿌려줍니다.
Thymeleaf와 jsp의 가장 큰 차이점은 jar로 export 가능한지 여부인것 같습니다.
Spring boot 프로젝트를 빌드하면 기본적으로 jar로 빌드가 되는데, jsp프로젝트의 경우 jar로 빌드할 수 없고 war로 빌드해야 합니다.
최근 추세는 war 보다는 jar로 배포하는 것이기 때문에 이것은 치명적인 단점이라고 할 수 있습니다.
만약 Spring boot + JSP 조합으로 작성된 프로젝트를 JAR로 빌드해서 실행하면 브라우저에서 "Whitelabel Error Page" 오류가 뜨는 것을 볼 수 있습니다. 이는 내장 톰캣을 사용하는 Spring boot Application에서 JSP를 지원하지 않아서 발생하는 오류입니다.
이에 대해 공식 홈페이지에서는 다음과 같이 나와 있습니다.
2. JSP Limitations
내용은 길지만 정리하면 이렇습니다.
- JSP는 실행 가능한 jar를 사용할 때 지원되지 않습니다. 따라서 war 패키징을 해야 합니다.
- Spring boot 공식 지원 내장 WAS인 Undertow는 JSP를 지원하지 않습니다.
- 사용자 지정 error.jsp를 지원하지 않습니다.
더 자세한 내용은 공식 문서에서 확인하시면 됩니다.
3. Thymeleaf의 장점
- 페이지를 생성하는데 필요한 정보를 태그의 속성으로 넣어서 페이지의 프로토타입을 제공 가능
- 디자이너 또는 퍼블리셔가 페이지를 작업할 때 tomcat 같은 WAS를 실행하지 않고 작업 가능
[참고 사이트]
'웹 개발' 카테고리의 다른 글
junit를 사용한 단위 테스트에서 autowired가 동작하지 않을 경우 해결 방법 (0) | 2022.03.20 |
---|---|
[spring boot + jpa + gradle + h2] jpa 설정 (0) | 2022.03.19 |
spring boot의 application.properties에서 @Scheduled의 cron값을 설정하는 방법 (0) | 2022.03.13 |
html파일을 local에서 실행할 때 CORS 에러가 발생하는 이유 (0) | 2022.03.02 |
Spring Controller에서 @PathVariable에 특수문자 허용하는 방법 (0) | 2022.02.13 |