Thymeleaf란 무엇인가

Published on: 2012. 5. 30. 23:34 by louis.dev

타임리프(Thymeleaf)는 Freemarker, Velocity와 같은 View Template Engine 입니다. 하지만 타임리프는 다른 템플릿 엔진들과는 차별화되는 장점을 지니고 있습니다.

  • 서버상에서 동작하지 않아도 된다.
  • 전체적인 마크업 구조를 흐트려트리지 않는다.

이런 장점을을 가지고 있습니다. 


Freemarker나 Velocity같은 템플릿엔진들은 해당 템플릿이 지원해주는 다양한 기능(if, for, switch 같은)을 통해 마크업을 진행합니다. 하지만 항상 결과물을 확인할때는 서버를 구동시킨 상태에서 결과물을 확인해야 합니다. 이는 브라우저에서 단순 html 마크업작업을 하는 것보다 더 많은 시간을 소요하게 만듭니다. 

하지만 타임리프는 이러한 단점을 해결하여 마치 static html파일을 작업하듯이 텍스트에디터를 통해 작업하고 해당내용을 브라우저로 바로 확인할 수 있습니다.

그 이유는 타임리프가 html 의 속성(attribute)를 기반으로 해서 작성되기 때문입니다.

html은 각 테그들마다 몇가지 속성을 가지고 있고(style, class, alt 등등) 이 이외의 선언되지 않은(사용자가 임의로 정한) 속성들에 대해서는 브라우저는 별다른 에러를 발생시키지 않고 화면에 표시하지 않습니다.


//정해지지 않은 exec와 같은 속성들은 브라우저에서 무시 됩니다.
Some nice prototyping text...

이렇듯 타임리프는 브라우저에서 무시되는 속성을 통해 다양한 기능을 제공함으로 특별히 서버위에서 동작하지 않아도 해당마크업 내용을 저장된 파일을 브라우저로 열어 볼수 있게 되었습니다.


//타임리프의 예

      //products라는 list형을 product로 할당하고 product object안에서 데이터를 꺼내 화면에 뿌립니다.
          
Product list
Description Price Available from
Chair 30.00 27/12/2012

이렇게 th:each, th:text등의 속성을 사용해서 마크업 함으로 일단 html 마크업 에디터를 통해 빠르게 마크업을 수행한 뒤 해당내용을 그대로 서버로 올려 데이터를 연동하는 형식으로 작업을 하면 훨씬 마크업을 하는데 훨씬 더 수월한 작업을 할수 있게 됩니다.



또한 이런 속성기반으로 마크업되는 타임리프는 전체적인 마크업 구조를 뒤죽박죽으로 만들지 않습니다. 예를 들면 위의 th:each는 jsp의 foreach, freemarker의 #list와 같은 기능으로 리스트형 데이터를 화면에 출력할때 사용하는 기능입니다. th:each는 html tag의 속성으로들어가 전체적인 마크업 형태를 해치지 않지만 다른 템플릿엔진들은 html 테그와 분리되어있어야 함으로 마크업 구조를 복잡하게 만드는 경향이 있습니다.



위의 마크업은 freemarker 문법인데요 #list와 같은 기능을 사용하여 마크업해서 전체적인 마크업 구조를 복잡하게 만드는 것을 볼수 있습니다.


이렇듯 타임리프는 기존의 템플릿 엔진들이 가지고 있던 문제점들을 상당부분 해결하고 있음을 볼수 있습니다. 


다음 포스팅에는 Spring Framework와 Thymeleaf의 연동을 해보도록 하겠습니다.

Maven - 외부 플러그인을 사용하기 위한 플러그인 Repository사용하기.

Published on: 2011. 12. 7. 14:10 by louis.dev
기본 플러그인과 모조 프로젝트에서 제공하는 플러그인은 메이븐의 중앙 저장소에서 제공해주는 플러그인이기 때문에 따로 plugin repository를 등록하지 않아도 되었다. 그러나 가끔 중앙저장소 말고 다른곳에서 제공해주는 플러그인을 사용해야 할때는 pom.xml에 외부 저장소의 위치를 지정해 줘야 한다.

	
		
			repository-id
			http://plugin.repository.com
		
	

Maven - 메이븐 저장소(repository) 추가하기

Published on: 2011. 12. 5. 16:58 by louis.dev
pom.xml에 다음을 추가하면 된다.
 

	
		
			org.springframework.maven.milestone
			Spring Maven Milestone Repository
			http://maven.springframework.org/milestone
		
	

Maven - test skip하기

Published on: 2011. 12. 5. 16:44 by louis.dev
1. maven console에서 처리 하기
 mvn -Dmaven.test.skip=true {plugin:goal}

2.pom.xml에 설정하기 
1) 모든 테스트 skip하기

	
		
			org.apache.maven.plugins
			maven-surefire-plugin
			2.5
			
				true
			
		
	


2) 테스트가 실패하더라도 무시하고 나머지 테스트 모두 진행하기 

	
		
			org.apache.maven.plugins
			maven-surefire-plugin
			2.5
			
				true
			
		
	

Maven- 기본 webapp(webroot) 위치 변경하기

Published on: 2011. 12. 5. 16:34 by louis.dev
Maven을 통해 web app을 만들 때 기본적으로 webapp(webroot)위치는 src/main/webapp이다. 이 위치를 변경하려면 pom.xml에 다음과 같이 설정한다.
 


	
		
			maven-war-plugin
			
				 
				webapp