이런 상황을 타개할 수 있는 방법으로 WebJars 를 고려해보게 되었다.
webjars 란 무엇인가?
WebJars 는 클라이언트에서 사용하는 웹라이브러리(jquery 와 bootstrap) 를 JAR 파일 안에 패키징한 것이다.
- JVM 기반의 웹 애플리케이션에서 클라이언트측 의존성을 손쉽게 관리할 수 있음
- JVM 기반 빌드툴을 사용하여 클라이언트측 의존성을 다운로드
- 사용하고 있는 클라이언트측 의존성을 파악할 수 있음
- 수동적인 종속성을 자동으로 해결하고 선택적으로 RequireJS를 통해 적재
- 메이븐 중앙저장소를 통해 배포된다.
- JSDELIVR 에서 제공하는 공개 CDN 사용이 가능하다.
webjars 사용
webjars 탐색
webjars 를 사용하기 위해서는 http://www.webjars.org/ 접근하여 제공하는 라이브러리를 탐색하여 사용한다.
webjars 에서 제공하는 세가지 유형 중에 한가지를 선택한다.
NPM WebJars
- 즉각적인 생성 및 배포
- 누군가의 요청에 의해 출시
- 아티팩트 컨텐츠는 NPM package를 통해 제공
Bower WebJars
- 즉각적인 생성 및 배포
- 누군가의 요청에 의해 출시
- 아티팩트 컨텐츠는 Bower package를 통해 제공
Classic WebJars
- 규정에 따른 생성 및 배포
- Webjars 팀에 요청으로 출시
- RequireJS 구성을 사람이 작성
기본적인 Classic WebJars 를 기준으로 설명한다.
jquery와 bootstrap 을 추가하는 것을 가정하도록 한다.
탐색
Build Tool 항목에서 자신이 사용하는 빌드툴을 선택한다.jquery 탐색
'filter' 항목에 찾으려 하는 jquery입력bootstrap 탐색
'filter' 항목에 찾으려 하는 bootstrap입력
의존성 추가
build.gradle에서dependencies항목에 다음과 같이 추가한다.dependencies {// 생략/*** webjars*/compile 'org.webjars:jquery:2.2.1'compile 'org.webjars:jquery-ui:1.11.4'compile 'org.webjars:bootstrap:3.3.6'// 생략}
완료된 후 프로젝트의 라이브러리 항목에서 'Gradle dependencies' 를 살펴보면
build.gradle에서 추가한 라이브러리들이 등록되어 있는 것을 확인할 수 있다.추가된 라이브러리 중에서 jquery를 열어보면 다음과 같은 구조로 되어 있다.

의존성 추가된 webjar 참조하기
다음과 같은 형식으로 작성을 추가할 수 있다. 위에서 추가한 jquery 의 경우에는 /webjars/jquery/2.2.1/jquery.min.js 으로 접근할 수 있다.
SampleWebJars Startertest<script><script><script>
정상적으로 적용되었는지는 화면의 구성요소를 확인해서 스타일이 제대로 적용되었는지, 콘솔창에 jQuery ready 메시지가 출력되는 것을 확인할 수 있다.

스프링부트에서는 JARs 에 있는 클래스패스
/META-INF/resources/webjars를/webjars로 요청을 연결하도록 자동구성된다.스프링부트 프로젝트에서 스프링MVC 지침을 따르게 되면 스프링부트에거 구성된 정적 컨텐츠 매핑 사용이 중단된다.
정리
- 프로젝트에 라이브러리를 추가하고 버전관리시스템을 이용해서 관리하던 방식 대신
- 빌드툴을 이용한 버전관리 방식으로 전환할 수 있다.
- 프론트 웹 개발이 별도로 진행된다면 프론트엔드 빌드툴을 이용하는 방식이 더 적절할 것이다.
참고
- WebJars: http://www.webjars.org/
- WebJars Document: http://www.webjars.org/documentation
- WebJars Document - SpringBoot: http://www.webjars.org/documentation#springboot
- “프론트엔드 웹개발자, 자동화 기술 써보세요” - 블로터
'Tools > BuildTools' 카테고리의 다른 글
| [gradle] Jrebel, rebel.xml 생성 태스크 (0) | 2016.05.22 |
|---|---|
| [gradle] 그레이들이 그루비를 떠나 코틀린으로 갈까? (0) | 2016.05.21 |
| [Gradle] 프로젝트 빌드시 gradle 에서 바라보는 JAVA_HOME 지정하기 (0) | 2016.03.03 |
| [GRADLE] 그레들을 좀 더 빠르게! gradle daemon (0) | 2015.08.26 |
| gradle: test task 실행되는데 FileNotFoundException이 발생한다면... (0) | 2015.05.21 |