Spring
[Spring] SpringBoot + Gradle + NPM Build 셋팅하기
코리늬
2020. 8. 12. 19:00
프론트엔드 라이브러리의 경우 url을 사용해서 참조하는 경우가 많은데, 해당 서버에 장애가 발생하거나 url이 변경되는 경우에 나의 프로젝트에까지 영향을 미치게된다.
그래서 이번시간에는 해당 라이브러리들을 npm install
로 다운 받아 gradle 내에서 같이 build 되도록 하는 방법을 공유하려한다.
버전
OS : Mac
스프링 : 2.2.4 RELEASE
그래들 : 6.4.1
프론트엔드 라이브러리 설정
- NPM 선호
고려해야하는 사항
- 빌드, 버전관리, 시큐리티 설정
프로젝트 resources/static 경로로가서
npm init
엔터를 입력하다보면 init이되고 package.json이 생성된다
npm install bootstrap //bootstrap 설치해주고
설치를했으면 css를 bootstrap cdn에서 받아오지 않아도된다.
As-Is
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
To-Be
<link rel="stylesheet" href="/node_modules/bootstrap/dist/css/bootstrap.min.css" />
- 그리고 gitignore에는 node_module을 제외시켜준다
또한 빌드툴(메이븐/그래들)에서 해당 패키지를 같이 빌드하도록 설정을 해줘야한다.
jQuery 설치
npm install jquery --save
Gradle 설정 방법
plugins {
id "com.github.node-gradle.node" version "2.2.3"
}
/**
* npm install start
*/
node {
version = '12.13.1'
download = true
nodeModulesDir = file("${projectDir}/src/main/resources/static")
}
task copyFrontLib(type: Copy) {
from "${projectDir}/src/main/resources/static"
into "${projectDir}/build/resources/main/static/."
}
copyFrontLib.dependsOn npmInstall
compileJava.dependsOn copyFrontLib
그래들 설정까지 했다면, 시큐리티에서 빌드한 경로에대한 허용을 적용해줘야한다.
static resources에 대한 경로가 바뀌었기 때문에 시큐리티에서 막아버린다.
SecurityConfig.java
//img를 허용해주기 위한 설정
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring()
.mvcMatchers("/node_modules/**","/img/**")
.requestMatchers(PathRequest.toStaticResources().atCommonLocations()); //static resources들에 대한 허용
}