빌런 TOP 20
일간 l 주간 l 월간
1
[컴퓨터] 서린씨앤아이, 리안리 커브드 OLED 디스플레이 적용 수랭 쿨러 하이드로시프트 II 시리즈 출시
2
[인공지능] 엔비디아, 에이전트 툴킷으로 DGX 스테이션에서 개인용 AI 에이전트 간소화
3
[모바일] 삼성전자, 갤럭시 Z 폴드8 울트라·폴드8·플립8 등 폴더블 3종 라인업으로 확대
4
[이슈/논란] 구독형은 이제 끝?
5
[수컷학개론] 연기 없다고 안전한가, 전자담배가 남긴 폐 손상 신호
6
[후방/은꼴] 기래민 돌핀팬츠
7
[음악] 킹넷, ‘열혈강호: 넥스트’ 두 번째 OST에 송가인 참여… 29일 게임 출시와 함께 음원 공개
8
[카메라] 니콘이미징코리아, 전시회 기획부터 포트폴리오 제작까지… 8월 니콘스쿨 커리큘럼 공개
9
[일상/생활] 일본 버블 온천 폐허, 부곡하와이 부활 기대
10
[컴퓨터] 이엠텍, AI 인프라 시장 겨냥 '레드빗 4U 서버 케이스 3종' 최신 CPU 쿨러 호환성 데이터 공개
11
[컴퓨터] 서린컴퓨터, 리안리 A3 데스크테리어 미니 PC 2종 출시
12
[일상/생활] 40대 전기기능사 실기 합격기
13
[모바일] 케이스티파이, 갤럭시 Z8 시리즈 케이스 라인업 공개
14
[이슈/논란] 미국이 그린란드를 먹으려는 이유는?
15
[모바일] 한발 앞서 만나보는 차세대 폴더블, 새로운 갤럭시 Z 시리즈
16
[일상/생활] 시험 중 휴대폰 영장 요구, 로스쿨생 실망
17
[일상/생활] 우리나라 오래된 빵집 20곳 정리
18
[일상/생활] 딸 위해 햄버거 사준 70대 엄마
19
[후방/은꼴] 심심해서 후방
20
[일상/생활] K-빙수, 실리콘밸리까지 정복하다
1
[컴퓨터] 마이크로소프트, 차세대 AMD 인스팅트 및 AMD 에픽 프로세서 도입
2
[메모리/스토리지] ADATA DDR5-6000 CL30 ARMAX RGB 패키지 파인인포 32GB [써보니]
3
[축구] 드디어 성사된 역대 최고의 라이벌전 '잉글랜드-아르헨티나' 4강 격돌
4
[일상/생활] 코스피 바닥 신호들이 슬슬 보이는 중
5
[일상/생활] 다나와 히트브랜드 오프라인 팝업 행사
6
[개발뉴스] Cloudera·VAST Data, 어디서나 구축 가능한 AI 데이터 플랫폼 위해 전략적 제휴
7
[사건/사고] MSI 유상 수리 논란… CPU 소켓 수리 된 메인보드도 재차 고장
8
[모바일] 삼성전자, 갤럭시 Z 폴드8 울트라·폴드8·플립8 등 폴더블 3종 라인업으로 확대
9
[일상/생활] 고양이 품종별 지능 순위
10
[공연 예술] ‘2026 국립극장 시네마 투어’ 개최
11
[컴퓨터] 코잇, ASUS GeForce RTX 그래픽카드 국내 공식 유통 확대
12
[카메라] 니콘이미징코리아, 전시회 기획부터 포트폴리오 제작까지… 8월 니콘스쿨 커리큘럼 공개
13
[컴퓨터] 서린씨앤아이, 리안리 커브드 OLED 디스플레이 적용 수랭 쿨러 하이드로시프트 II 시리즈 출시
14
[일상/생활] 딸이 사온 고기, 엄마는 다이어트라 거절
15
[연예인] 모델 심유이 시원한 비키니 공개
16
[공연 예술] 희망제작소·카카오, ‘대한민국 사회혁신 컨퍼런스 2026’ 개최
17
[일상/생활] 온라인 전용 여포 과자 등장
18
[일상/생활] 특수부대 17년 베테랑 몸상태
19
[일상/생활] 서울 하천, 변신과 회복의 두 얼굴
20
[일상/생활] LH 청년임대 퀄리티, 급이 나뉘는 수준
파인인포
처음 글 올리네요. ㅎㅎ Spring boot에서 Tailwind CSS를 사용하고 싶어서 다음과 같은 방식을 고안하게 되었습니다. 저는 템플릿을 Thymeleaf(타임리프)를 좋아해서 이 기준으로 작성하겠습니다. Framework : String boot 4 Template : Thymeleaf(타임리프) CSS : Tailwind CSS 미리 Node.js 설치해 주세요. 우선 프로젝트 하나를 생성합니다. 그 다음 리소스를 생성합니다. 우선 index.html 을 다음과 같은 내용으로 생성합니다. 경로 : src/main/resources/template/index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Tailwind TEST</title> </head> <body> <div>Tailwind CSS</div> </body> </html> 그 다음 스타일 시트를 생성합니다. 우선 스타일시트 파일 확인용이라 아무 스타일이나 입력해주세요. 경로 : src/main/resources/static/css/default.css @charset "UTF-8"; html, body { height: 100%; place-items: center; place-self: center; place-content: center; } div { width: 10rem; height: 5rem; margin: 0 auto; background: lightcoral; border: 1px red solid; } 그럼 두 경로에 파일이 보이실 꺼에요. 그다음 index.html head에 다음 테그를 삽입해 주세요. <link rel="stylesheet" href="./../static/css/default.css"> 스타일이 적용되는지 확인합니다. 적용 확인이 되면 그다음 head에 다음 tag를 삽입해 주세요. <!-- Tailwind CSS dynamic Style CDN 스타일 완성후 삭제 --> <script src="https://unpkg.com/@tailwindcss/browser@4"></script> 개발자 모드를 활용해 실시간으로 스타일이 적용되는지 확인해주세요. 확정 된 스타일을 index.html파일에 적용합니다. 이런 식으로 스타일을 적용하여 완성된 스타일을 default.css로 빌드하여 적용해 보도록 하겠습니다. src랑 같은 위치에 node 경로를 생성해주세요. 그 다음 node안에 package.json 파일 생성 후 다음 내용을 입력해 주세요. { "dependencies": { "@tailwindcss/forms": "^0.5.6", "autoprefixer": "^10.4.16", "fs-extra": "^11.1.1", "heroicons": "^2.0.18", "postcss": "^8.4.31", "tailwindcss": "^3.3.3", "update-browserslist-db": "^1.2.3" } } 터미널에서 다음 명령을 실행하세요. npm install 빌드를 정상적으로 실행하기 위해 postcss 설정 파일을 생성합니다. node/postcss.config.js module.exports = { plugins: [ require('tailwindcss'), require('autoprefixer'), ] } 이제 node안에 css파일을 하나 생성합니다. node/default.css 아래의 내용을 추가합니다. @tailwind base; @tailwind components; html, body { @apply h-full place-items-center place-self-center place-content-center; } div { @apply w-[10rem] h-[5rem] mx-auto rounded shadow-lg shadow-black/15 bg-red-200 text-center place-content-center } 다음으로 할 작업은 nodejs 빌드 스크립트 추가입니다. 저는 node폴더에서 실행하는 기준으로 작성하겠습니다. 우선 빌드 대상은 node안에 있어야 함으로 node/tmpl 에 복사하고 빌드하도록 하겠습니다. 우선 node/tmpl 에 복사하는 스크립트를 작성하겠습니다. node/copy.js 파일을 생성합니다. const fsExtra = require('fs-extra'); console.log('Resource init!'); const sourceDirectory1 = './../src/main/resources/templates'; // 원본 디렉토리 경로 const targetDirectory1 = './tmpl/t'; // 대상 디렉토리 경로 console.log('Try copy '${sourceDirectory1}' -> ${targetDirectory1}'); fsExtra.copy(sourceDirectory1, targetDirectory1, err => { if (err) { console.error('Error copying directory:', err); } else { console.log('Directory copied successfully! 1'); } }); console.log('Finished : ${new Date().toISOString()}'); 그 다음 터미널에서 실행해 복사를 확인합니다. node copy.js index.html에서 <script src="https://unpkg.com/@tailwindcss/browser@4"></script> 를 삭제하고 정합니다. 다음은 tailwindcss 빌드 입니다. -i : 인풋 -o : 아웃풋 터미널에서 아래 명령을 실행헤 주세요. npx tailwindcss build -i default.css -o ../src/main/resources/static/css/default.css 그 다음 적용여부를 확인하면 완료입니다. 그리고 빌드를 쉽게 하기 위해 package.json의에 빌드 스크립트를 추가합니다. 빌드 대상 폴더 비우기 rm -rf tmpl 빌드 대상 복사 node copy.js tailwindcss 빌드 tailwindcss build -i default.css -c tailwind.config.js -o 압축버전 빌드 (공백 삭제 등 용량 최적화) --minify 추가 { "scripts": { "css": "rm -rf tmpl && node copy.js && tailwindcss build -i default.css -c tailwind.config.js -o ../src/main/resources/static/assets/v2/css/default.css", "css-min": "rm -rf tmpl && node copy.js && tailwindcss build --minify -i default.css -c tailwind.config.js -o ../src/main/resources/static/assets/v2/css/default.css" }, "dependencies": { "@tailwindcss/forms": "^0.5.6", "autoprefixer": "^10.4.16", "fs-extra": "^11.1.1", "heroicons": "^2.0.18", "postcss": "^8.4.31", "tailwindcss": "^3.3.3", "update-browserslist-db": "^1.2.3" } } 이렇게 하면 빌드 시 아래화 같이 커맨드를 입력하면 됩니다. 일반 : npm run css 압축 : npm run css-min gradle에서 빌드 시 위 내용을 자동 실행 하고 싶으면 build.gradle 다음 내용을 추가하면 됩니다. task nodePreBuild(type: Exec) { // node 폴더 위치를 절대 경로로 계산 workingDir = file("${projectDir}/node") // Windows와 Mac/Linux 호환성 처리 if (System.getProperty('os.name').toLowerCase().contains('windows')) { executable 'cmd' args '/c', 'npm', 'run', 'css' } else { executable 'sh' args '-c', 'npm run css' } // 3. 디버깅을 위한 출력 (Gradle 실행 시 콘솔에 찍힘) doFirst { println "--------- CSS Build Start ---------" println "Working Directory: ${workingDir}" println "Executable: ${executable}" println "Arguments: ${args}" println "-----------------------------------" } } processResources.dependsOn nodePreBuild 궁금하신건 댓글 달아주세요. Tailwind CSS 좋아하는데… 요즘 많이 힘들다고 하네요. 많이 응원해주세요. ㅎㅎ
2026.01.16
1
1
인사이
  • 종합
  • 뉴스/정보
  • 커뮤니티
  • 질문/토론