시스템아 미안해

JSP vs Thymeleaf 본문

web

JSP vs Thymeleaf

if else 2022. 9. 24. 15:57

JSPThymeleaf는 둘 다 MVC에서 view를 그리기 위해 사용하던 웹 템플릿 엔진이다. 

웹 템플릿 엔진 : 템플릿 양식과 특정 데이터 모델에 따른 입력 자료를 합성하여 결과 문서를 출력하는 소프트웨어(또는 소프트웨어 컴포넌트)를 말한다. 그 중 웹 템플릿 엔진(web template engine)이란 웹 문서가 출력되는 템플릿 엔진이다.

 

 

김영한 선생님의 부트 인강을 들으며 gradle project에서 타임리프를 쓰고 있는데 정리 차원에서 차이점을 정리해본다. 

 

 


 

JSP는 Java Server Page로 view page이지만 결국 servlet 코드로 변환되는 자바 템플릿이다.

(원래 서블릿에서 model1으로 구현하던 비효율을 줄이기 위해 JSP가 탄생.  jsp(view)와 controller(비지니스 로직)로 분리하여 로직을 짬)

 

그런데 요즘 자체 서비스를 가진 회사들이나 신규 프로젝트에서는 JSP을 거의 사용하지 않는다(그래도 필수 공부 목록..)

 

일단 JSP는 서블릿(자바 소스)으로 변환되니 view와 비지니스 로직의 결합도가 높다. 그리고 WAS가 없으면 브라우저에 띄울 수 없고 그렇기 때문에 무조건 WAR 로만 export할 수 있다. 

( + WAR는 JAR 포맷과 달리 WEB-INF 및 META-INF 디렉토리로 사전 정의 된 구조를 사용해야 해서 자유도가 떨어진다) 

 

★ 스프링 부트의 장점 중 하나가 JAR파일로 실행 가능하다는 점이다. 

이런 이유들로 인해 JSP에서 Thymeleaf로 사용 추세가 넘어가고 있다.

 


 

 

Thymeleaf는 최대한 html의 유형을 유지한다. 그래서 JSP와 달리 주소창에서 직접 접근할 수 있고, view코드만 깔끔하게 실행된다. 그리고 코드 수정시 서버의 렌더링 없이도 바로 브라우저에 띄울 수 있기 때문에 시간적인 유지보수 비용이 더 적게 들어간다.   

 

 

기존에 배웠던 JSP파일은 일단 확장자 자체가 .jsp이지만, 타임리프는 기존 html파일 안에서 동작한다. 

 

 

동작 원리 : 처음 프로젝트 생성시 타임리프 의존성을 추가해줬고, gradle로 인해 자동으로 들어온 것을 볼 수 있다. 

 

 

< external dependencies>

 

<build gradle>

 

문법 : 

 

  • 표현식
    • 변수 : ${…}
    • 선택 변수 : *{…}
    • 메시지 : #{…}
    • Link URL : @{…}
  • 리터럴
    • 텍스트 : ‘one text’, ‘Another one’,…
    • 숫자 : 0, 34, 1.0, …
    • boolean : true, false
    • Null : null
    • token : one, sometext, main, …
  • text opeation
    • 문자열 연결 : +
    • 문자 대체 : |The name is ${name}|
  • 연산
    • Binary : +, -, *, /, %
    • 마이너스 : -
  • boolean 연산
    • Binary : and, or
    • 부정 : !, not
  • 비교 연산
    • 비교연산자 : >, <, >=, <= (gt, lt, ge, le)
    • 균등연산자 : ==, != (eq, ne)
  • 조건 연산
    • if-then : (if) ? (then)
    • if-then-else : (if) ? (then) : (else)
    • Default : (value) ?: (defaultValue)

 

출처 : https://jongminlee0.github.io/2020/03/12/thymeleaf/