지난 Spring Boot 프로젝트에 Tailwind CSS 적용하기(feat. gradle) 포스트에 이어 이번에는 Spring Boot 프로젝트에 React와 Tailwind CSS를 세팅하는 법을 알아보도록 하겠습니다.
src/main
하위에 frontend
라는 디렉토리를 신규로 생성하고 해당 디렉토리에서 npm 프로젝트를 초기화합니다.
npm init -y
src/main/frontend
위치에서 Tailwind CSS 적용을 위한 패키지를 설치합니다.
npm install react react-dom react-scripts
npm install -D tailwindcss@latest postcss@latest autoprefixer@latest daisyui@latest
src/main/frontend
위치에서 tailwind.config.js
를 생성을 위해 다음의 명령어를 실행합니다.
npx tailwindcss init
content
항목에는 Tailwind CSS를 적용할 대상을 지정합니다. Spring Boot 프로젝트의 정적 요소가 위치한 경로를 알맞게 작성합니다.
이어서 plugins
의 요소로 사용할 외부 라이브러리를 작성합니다. 이는 각 라이브러리에 따라 적용방법이 상이하므로 문서를 참고하여 작성합니다.
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ["./src/**/*.{html,js}"],
theme: {
extend: {},
},
plugins: [
require('daisyui'),
],
}
Spring Boot의 정적 요소는 src/main/frontend
에 위치합니다. 다음과 같이 필요한 파일을 세팅합니다.
src/main/frontend/public/index.html
src/main/frontend/src/images/<이미지 파일>
src/main/frontend/src/App.js
src/main/frontend/src/index.js
src/main/frontend/src/styles.css
.../
└── frontend/
├── node_modules/
├── public/
│ └── index.html
├── src/
│ ├── images/
│ │ ├── react.svg
│ │ └── spring-boot.svg
│ ├── App.js
│ ├── index.js
│ └── styles.css
├── package.json
├── package-lock.json
└── tailwind.config.js
Tailwind CSS를 컴파일하기 위한 디렉티브를 styles.css
에 작성합니다.
@tailwind base;
@tailwind components;
@tailwind utilities;
index.js
에 CSS 로드를 import
문을 추가합니다.
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import './styles.css';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
package.json
의 scripts
에 다음과 같이 CSS 컴파일을 위한 스크립트를 작성합니다.
{
...
"scripts": {
...
"build": "react-scripts build && rm -rf ../resources/static && mv build ../resources/static",
...
},
...
}
npm 패키지를 설치하기 위한 npmInstall
, Tailwind CSS를 컴파일하기 위한 buildReact
등 두 개의 태스크를 등록하겠습니다. 이 때, 각 태스크의 실행 순서를 결정하는 dependsOn()
메서드를 적절히 사용해야 에러를 방지할 수 있습니다.
...
val frontendDir = "$projectDir/src/main/frontend"
tasks.register<Exec>("npmInstall") {
workingDir = file(frontendDir)
commandLine("npm", "install")
}
tasks.register<Exec>("buildReact") {
dependsOn("npmInstall")
workingDir = file(frontendDir)
commandLine("npm", "run", "build")
}
tasks.named("processResources") {
dependsOn("buildReact")
}
tasks.named<Delete>("clean") {
delete("$projectDir/src/main/resources/static")
}
Gradle 명령어를 실행하여 npm 스크립트 및 jar 빌드가 정상적으로 진행되는지 확인합니다.
./gradlew clean build
실습은 아래의 Spring Boot 어플리케이션을 통해 진행됩니다. 저장소를 clone 하거나 fork 해주세요.