HTML을 편리하게 생성하는 뷰 기능은 다음과 같다.
1. JSP
• 속도 느림, 기능 부족
2. 프리마커(Freemarker), Velocity(벨로시티)
• 속도 문제 해결, 다양한 기능
3. 타임리프(Thymeleaf)
• 내추럴 템플릿: HTML의 모양을 유지하면서 뷰 템플릿 적용 가능
• 스프링 MVC와 강력한 기능 통합
• 최선의 선택, 단 성능은 프리마커, 벨로시티가 더 빠름
그 중 jsp와 타임리프에 대해 설명하고자 한다.
일단 java 기반의 서버 프레임워크를 공부하다보면 jsp 라는 것을 쓰게 된다.
jsp는 일반적인 자바 프레임워크 MVC 구조에서 'V' , 즉 뷰 역할을 담당한다.
그리고 jsp의 상위버전? 이라 하는 Thymeleaf라는것도 있다. 타임리프는 요즘 스프링에서 밀고있는 스프링 프레임워크의 뷰라고 보면 될것같다.
Thymeleaf 이외에도 Apache Freemarker, Mustache, Groovy Templates 등 여러 템플릿 엔진이 있지만 요즘은 Thymeleaf를 많이 쓰는 것 같다. ( JSP는 옛날 회사에서는 아직도 많이 쓴다)
자 아무튼 오늘은 Thymeleaf와 jsp 차이점을 알아보고, 그리고 간단하게 Thymeleaf를 사용하는 방법을 알아보도록하자!!
먼저 jsp 의 경우에는 아시다시피 서블릿 이라는 형태로 변환되어 실행이 된다. 서블릿이 자바소스 이다 보니 JSP내에서도 자바코드를 사용할 수 있게된다. (요즘에는 보통 JSP 내부에 비지니스 로직이 포함된 자바코드를 넣는 것은 지양한다)
반면 Thymeleaf는 html, xml, js, css 등을 처리할 수 있는 웹 및 독립형 환경에서 사용이 가능한 java 템플릿 엔진이다. Thymeleaf는 html 파일을 가져와서 파싱하고 그걸 분석하여 정해진 위치에 데이터를 뿌려준다.
Thymeleaf 의 장점은 코드자체가 앞서 말한것처럼 html 같은 웹형태이기에 was없이도 그냥 브라우저에서 직접 띄어볼 수 가 있다. thymeleaf 가 jsp 처럼 전용 문법을 사용하지 않고 그냥 html 엘리먼트에 속성으로 값을 넣어주기 때문이다.
(브라우저는 html의 모르는 속성으 무시해버리니깐 브라우저에서 그냥 띄어볼수 있는거다)
물론 Thymeleaf 가 만능은 아니다.. ( 그나마 3.x 버전대는 굉장히 괜찮아진듯하다.)
JSP 에 비해 속도가 좀 떨어지는 것 같고, 구조적인 부분에서 꽤나 한계가 있는 것을 느꼈다.
그래도 SpringBoot와는 굉장히 궁합이 잘맞는듯하니 스프링부트를 하시는 분들은 한번쯤 써보는 것은 참 좋을듯하다.
그럼 이제 실제로 스프링 부트환경에서 구현한번 해보자.
일단 스프링부트 프로젝트에서 Thymeleaf를 사용하려면 build.gradle 파일안에
dependencies {
...
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
...
}
Thymeleaf에 대한 의존관계를 설정해줘야한다.
자, 그리고 오늘 간단하게 실습해볼 건
이렇게 Controller 하나랑 html 파일 하나 만들어주면된다.
먼저 Controller 부터 보자.
아주 간단한 코드다.
여기서는 하나만 알고 넘어가자 .model 객체에 속성을 채워서 던져주면 던져주는 뷰 페이지에서 그데이터를 쓸수 있다는 것이다.
다음은 html 페이지이다. 여기 보면
Hi!, banker 라는 게 있는데 이건 그냥 브라우저에서 열어보면 나올 문구이다.
자 이번에는 서버사이드에서 돌려보자.
만들어진 프로젝트를 실행해보면
이번엔 모델로 넘어온 데이터인 Babo가 출력되는걸 볼 수 있따.
(참고로 그냥 html은 static 디렉토리에 넣어서 작업해주면된다.)
'Spring' 카테고리의 다른 글
Spring MVC의 동작 방식(Handler, Adapter, ViewResolver) (0) | 2023.02.23 |
---|---|
HttpMessageConverter란? (0) | 2023.02.23 |
[Servlet & JSP] Redirect vs forward 방식 비교 (0) | 2023.02.03 |
[JAVA] JDBC란? (0) | 2023.01.29 |
Spring과 SpringBoot 의 정의와 사용 이유 (0) | 2023.01.29 |