카테고리 없음

[Spring Boot]JS, CSS 경량화

  • -
반응형

오늘은 Gradle minify plugins를 이용한 JS, CSS 경량화 방법에 대해 알아보겠습니다.

 

※ 테스트 환경
  • Spring Boot 2.7.5
  • JDK 11
  • Gradle
  • Thymeleaf

Gradle minify plugins gradlewebtools는 Gradle 프로젝트에 간단히 추가하여 파일 경량화를 자동화할 수 있는 방법을 제공합니다.

현재 프로젝트 구조는 다음과 같습니다.

.
└── src/
    ├── main/
    │   └── java
    └── resources/
        └── static/
            ├── css/
            │   ├── common.css
            │   └── style.css
            └── scripts/
                ├── common.js
                └── preview.js

 

static/scripts 폴더에 있는 js 파일은 번들링을 거쳐 하나의 파일로 경량화되며, static/css 폴더에 있는 css 파일은 파일별로 경량화가 이루어지게 됩니다.

 

1. 의존성 주입

plugins {
    id 'java'
    id 'war'
    id 'org.springframework.boot' version '2.7.5'
    id 'io.spring.dependency-management' version '1.1.6'
    // gradlewebtools
    id "org.gradlewebtools.minify" version "1.3.2"
}

 

 

2. 빌드 스크립트 생성

ext {
    targetPath = "src/main/resources/static/minify";   // 타겟 경로
    minifiedPath = "target/minified"
}

// css 경량화
task cssMinify(type: org.gradlewebtools.minify.CssMinifyTask) {
    srcDir = project.file("src/main/resources/static/css")
    dstDir = project.file("${minifiedPath}/css")
    options.originalFileNames = true
}

// js 경량화
task jsMinify(type: org.gradlewebtools.minify.JsMinifyTask) {
    srcDir = project.file("src/main/resources/static/scripts")
    dstDir = project.file("${minifiedPath}/scripts")
    options.originalFileNames = true
}

task copyCss(type: Copy){
    dependsOn cssMinify

    from project.file("${minifiedPath}/css")
    into project.file("${targetPath}/css")
}
task copyJs(type: Copy){
    dependsOn jsMinify

    from project.file("${minifiedPath}/scripts")
    into project.file("${targetPath}/scripts")
}

tasks.named("processResources") {
    dependsOn "copyCss", "copyJs"
}

 

경량화를 통해 생성된 파일을 프로젝트의 target/minified 폴더에 생성됩니다. 이 파일을 빌드를 통해 /resources/static/minify 폴더로 옮기는 방식으로 진행됩니다.

ext {
    targetPath = "src/main/resources/static/minify";   // 타겟 경로
    minifiedPath = "target/minified"
}

 

빌드 작업은 processResources 작업을 포함하므로, copyCss, copyJs가 실행되며 경량화된 파일들(cssMinify/jsMinify 실행)을 target으로부터 빌드 후 폴더로 복사됩니다. 

*options.originalFilesNames = true 옵션은 파일 이름의 원본을 사용할 것인지 선택합니다.

tasks.named("processResources") {
    dependsOn "copyCss", "copyJs"
}

 

 

3. 결과

build를 실행해보겠습니다.

ROOT.war로 패키징하기 위해 아래 명령어를 추가합니다. 

war {
  archiveFileName = 'ROOT.war'
}

 

프로젝트/build/libs 경로로 ROOT.war 파일이 생성되고 압축을 풀어보면 아래와 같이 경량화된 파일들을 확인할 수 있습니다.

 

js

 

css

 

참고문서
 

GitHub - gradle-webtools/gradle-minify-plugin

Contribute to gradle-webtools/gradle-minify-plugin development by creating an account on GitHub.

github.com

 

bootJar task에 css, javascript minified 적용

bootJar에 minified를 적용해서 jar파일을 생성한다. static resource 경로 src/main/resources/public/js/** src/main/resources/public/css/** build.gradle plugins { id "org.gradlewebtools.minify" version "1.1.1" } ext{ resourcePath = "target/resou

hulint.tistory.com

 

반응형
Contents

포스팅 주소를 복사했습니다.

이 글이 도움이 되었다면 공감 부탁드립니다.