JSP 및 스프링 뷰를 대체할 최고의 템플릿 언어.

예전에 Scalate 소개글인지 뭔지 여튼 올렸었는데.

괜히 소개한것 같다. 퍼포먼스가 안나온다는 보고도 있고. 나도 경험했고, 실무에 쓰기엔 스칼라 기반은 아직도 팀 커뮤니케이션에 안맞는다는 결론이 나왔다.

짬뽕이 좋은 것만은 아닌 것 같다.

만약 자바 대신 스칼라 프로젝트라면 스칼렛은 더좋은 선택이지만, 자바 프로젝트라면, 괜한고생 하지 않길 바란다.

어쨌든 오늘 JSP와 JSTL 등의 기본 템플릿 언어의 지루함을 해소해줄 2가지 템플릿 엔진을 소개하겠다.

모두 그냥 JSP 페이지 및 스프링 프레임워크에서 사용 가능하다. 취향에 맞게 쓰면 된다.

1. jade4j

프로젝트 사이트 : https://github.com/neuland/jade4j

node.js 를 알게 된 개발자라면 express 웹 프레임워크와, 그 유명한 템플릿 언어 jade를 기억한다면,

당신은 바로 이 프로젝트를 적용해도 손색이 없을 것이다.

jade 공식 페이지에서 다른 언어 바인딩 리스트에 올라와 있으며, jade 3 템플릿 구조와 거의 완벽하게 호환이 가능하다.

비록 커뮤니티 참여로 이루어지긴 해도 상당히 안정적으로 돌아가며, jade 오류 발생시 JSP하고는 차원이 다른 친절함의 극치 오류 페이지를 보여줄 것이다. (play! framework 배낀 느낌 나도 그래도 좋구랴.)

jade4j 를 적용하는 방법은 프로젝트 사이트를 보면 되고,

jade 템플릿 사용법은 그냥 jade 공식 홈페이지를 가면 된다. 다 되니 걱정말고 쓰도록 하자. (http://jade-lang.com/)

자바 웹 프로젝트로 jade 채용하기 전에 충분한 연습이 필요하겠지만, 원체 js 로 만든거라 실습이 쉽게 가능하니 문제는 없을 것이다. 실제 사례도 있기 때문에 실무에 써도 문제될 거 없다.

참고로 이녀석의 실행식(Expression)은 아파치 JEXL(http://commons.apache.org/proper/commons-jexl/)을 채용했다.

그냥 JSP 느낌 나는 실행식이라고 생각하면 된다. 자바답다고. 그러니 자바답게 jade 쓰면 된다.

JSTL 에서는 메서드 지원 안되고 함수 쓰려면 JSTL 태그 정의를 해야 하지만 이건 그딴거 필요없이 바인딩 후 호출하자.

2. rythm

프로젝트 사이트 : https://github.com/greenlaw110/rythm

외국의 닷넷 아닌 웹 개발자들에게 많은 부러움을 산 ASP.NET MVC 3 의 강력한 템플릿 엔진인 Razor 엔진의 자바 버전이라고 보면 된다.

HTML 깨뜨릴 일이 전혀 없으며, 깔끔하고, 문자열과 XML 문법만 잘지키면 완벽하게 소화 가능한 매력이 숨어있다고 보면 된다.

참고로 Play! Framework 의 기본 템플릿 엔진이 이 Razor 기반의 변형 엔진인데, 이녀석은 자바 MVC에 맞게 템플릿을 구성했다고 봐도 좋을 것이다.

게다가 이녀석은 JSP 및 스프링 프레임워크, 심지어 Play! Framework 뷰 엔진으로도 지원한다.

중국과 호주 자바 웹 실제 프로젝트에 투입해도 탈 하나 없는 뷰 엔진이기 때문에 HTML 안깨뜨리고 깔쌈하게 하고자 하는 웹 프로젝트에 이 템플릿을 고려해도 좋을 것이다.

JSTL과는 달리 메서드 호출도 지원되며, Transformer를 통하여 템플릿을 확장할 수 있다. 메서드 확장 개념으로.

번외 3. Thymeleaf

프로젝트 사이트 : http://www.thymeleaf.org/

요즘 인기를 누린다는 블로그 글이 있길래 봤더니.. 닷넷의 Spark 비슷한 HTML 태그/속성 기반의 템플릿 언어다.

대신, namespace 제공 후 사용으로 HTML/XML 처럼 친숙하며, JSP 처럼 태그를 깨뜨리거나 중간에 박는 형식을 최대한 줄임으로써 기존 HTML 사용하면서 깔끔하게 데이터를 출력해주는 괜찮은 템플릿 엔진이다.

현재 2.1 버전이 안정화된 최신이며 쌩 JSP 및 스프링도 지원되니 주저없어 테스트해도 무방할 것이다. 실무에 써도 무방하다.

여담으로 JSTL의 경우 2부터 메서드 호출 지원이 되기는 하는데 여태까지 프로젝트에서 JSTL 2 쓰는 프로젝트를 못봤다.

기술이 좋아지면 뭐해.. 편리해지게 해줘도 당췌 쓰질 않는데.

composite / 2013년 12월 4일 / 미분류 / 0 Comments

Scalate Template Engine 이용시 참고점

유지보수 항목에 자바 웹 개발항목도 포함되어 있어서 본의아니게 JSP를 하게 되었다.

여기서 JSP 템플릿 엔진 중 흥미롭고 재밌고 나한테 딱 맞는 템플릿 엔진이 있는데 바로 Scalate 이다.

이녀석은 자바의 스칼라 언어 기반의 템플릿 엔진인데, 자바의 JSP 대신 스칼라의 SSP로 JSP 처럼 꾸밀 수 있고,

또한 node.js 의 템플릿 엔진으로 깔끔하고 간결해서 유명한 jade 엔진도 있다.

닷넷의 경우 jade 템플릿 엔진은 spark 템플릿 엔진에서 지원한다고 한다.

어쨌든 닷넷의 Razor 템플릿 엔진같이 간결한 맛이 없어서 아쉬워지다가 스칼렛에 jade 엔진에 눈맞아 사용하고 있다가 한가지 장벽에 부딪혔다.

바로 web.xml 에서

  <welcome-file-list>
    <welcome-file>index.jade</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
  </welcome-file-list>

이 부분 중 index.jade 파일을 먼저 불러오는데, 파일을 불러오긴 하지만 템플릿 파싱이 안된 쌩으로 출력된다는 것이다.

이 어이없지 아니할 수 없는 부분이 아니던가. 스칼렛 서블릿 세팅은 제공한 서블릿 필터로 세팅만 하면 끝난다.

  <!– START: Scalate config –>
  <filter>
    <filter-name>TemplateEngineFilter</filter-name>
    <filter-class>org.fusesource.scalate.servlet.TemplateEngineFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>TemplateEngineFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!– END: Scalate config –>

어쨌든 직접 jade 파일 요청시 템플릿 파싱은 되는데 폴더 요청(/)을 통한 템플릿 파싱이 전혀 지원되지 않아서 고심했으나,

해결 방법을 찾았기에 여기에 블로그에 기록한다.

  <!– START: Scalate config –>
  <filter>
    <filter-name>TemplateEngineFilter</filter-name>
    <filter-class>org.fusesource.scalate.servlet.TemplateEngineFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>TemplateEngineFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>REQUEST</dispatcher> 

  </filter-mapping>
  <!– END: Scalate config –>

여기 굵은 부분을 추가하니 말끔하게 해결되었다. http://localhost/ 만 호출해도 jade 템플릿이 파싱되어 출력된다.

여기 관심있는 분들은 Scalate 홈페이지를 참고하시라. jade 템플릿 엔진은 실무에 써도 전혀 손색없다. 스프링 연동도 당연히 지원되니 관심있으면 직접 들어거 Getting Started 메뉴를 참고하시라.

composite / 2012년 12월 22일 / 미분류 / 0 Comments