[Spring boot] Node Gradle์ ์ด์ฉํ์ฌ Spring ํ๋ก์ ํธ์ Node ํ๋ก์ ํธ ๋ถ์ด๊ธฐ
Spring boot๋ฅผ ์ด์ฉํ์ฌ ์น ํ์ด์ง๋ฅผ ๊ฐ๋ฐํ ๋๋ REST API ์๋ฒ๋ก ๋ฐฑ์๋๋ฅผ ๊ตฌํํ๊ณ , ํ์ด์ง๋ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)์ ์ด์ฉํ์ฌ ๊ตฌํํฉ๋๋ค. ์ด ๋ ์ฌ์ฉํ๋ ๊ธฐ์ ์ ์๋์ 2๊ฐ์ง ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค.
- JSP (Java Server Page)
- Thymeleaf
JSP์ Thymeleaf๋ Spring์ ์ด์ฉํ์ฌ ํ๋ฉด์ ๊ตฌํํ ๋ ์ฌ์ฉํ๋ ๋ทฐ ํ ํ๋ฆฟ ์์ง์ผ๋ก ๊ณผ๊ฑฐ์๋ JSP๋ฅผ ์ด์ฉํ์ฌ ํ๋ฉด์ ๊ตฌํํ์ง๋ง ์ต๊ทผ์๋ Thymeleaf๋ฅผ ๋ง์ด ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๊ฒ HTML ์ฝ๋๋ฅผ ์ง์ ํ ํ๋ฆฟ์ผ๋ก ๋ค๋ค Controller์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด ๋์ ์ผ๋ก ํ๋ฉด์ ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ ์๋ฒ ์ฌ์ด๋ค ๋ ๋๋ง์ด๋ผ ํฉ๋๋ค.
ํ์ง๋ง ์ต๊ทผ์๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง(CSR) ๊ธฐ๋ฒ์ ์ด์ฉํ React.js, Vue.js๋ฅผ ์ด์ฉํ์ฌ ํ์ด์ง๋ฅผ ๊ฐ๋ฐํ๊ณ , ๋ฉํฐ ํ์ด์ง๋ณด๋ค๋ ์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ด ์ฃผ๋ฅ๊ฐ ๋์ด HTML๊ณผ ๊ฐ์ ๋งํฌ์ ์ธ์ด ํ์ด์ง ๊ฐ๋ฐ๋ณด๋ค๋ Javascript, Typescript ๋ฑ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค.
์ด๋ ๊ฒ ๊ฐ๋ฐํ๋ฉด ํ๋์ ์๋น์ค์์ ํ์ด์ง์ ์๋ฒ๊ฐ ๋ถ๋ฆฌ๋์ด ๊ฐ๋ฐ์ด ๋๋ ์ด๋ฅธ ๋ฐ Decoupled Architecture๋ฅผ ์ฑํํ๋ฉด์ Back-end์ Front-end๋ก ๋ถ๋ฆฌํ๊ฒ ๋๋๋ฐ, ์ด๋ ํ์ฅ์ฑ๊ณผ ์์ ์ต์ ํ ๋ฑ์ ์ด์ ์ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค. ํ์ง๋ง ๋ถ๋์ดํ๊ฒ ์ด๋ฌํ ์ปคํ๋ง์ ๊ฐ์ ธ์ผ ํ๋ค๋ฉด(์ธ๋ ฅ ๋ฆฌ์์ค ๋ฌธ์ ๋ฑ) ์ด๋ค ํ๋ก์ ํธ๋ฅผ ๋ชจ๋๋ฆฌ์ ์ํคํ ์ฒ๋ก ๊ฐ๋ฐํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น์?
Node Gradle
๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ํ๋์ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๊ฒ ์ง๋ง ๋ฐฑ์๋๋ฅผ Spring์ผ๋ก ํ๋ ๊ฑธ ์ํ๋ค๋ฉด ๋ ๊ฐ์ง ์ธ์ด๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. Spring์ Java์ Kotlin ๋ฑ์ JVM ์ธ์ด๋ฅผ ์ฌ์ฉํ๊ณ , Front-end๋ Javascript/Typescript๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฏ๋ก ์ปดํ์ผ ํ๋ ๋ฐ๋ ๋ ๊ฐ์ง ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
Javascript/Typescript ์ฝ๋๋ฅผ ๋น๋ํ๋ ๋ฐ๋ NPM ์ด๋ผ๋ ๋น๋ ๋๊ตฌ๊ฐ ํ์ํ๊ณ , Spring ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ๋ ค๋ฉด Maven ํน์ Gradle์ด ํ์ํ๋ฐ, Gradle์๋ 3rd Party ํ๋ฌ๊ทธ์ธ์ ์ ๊ณตํ์ฌ ์ธ๋ถ ํ๋ก๊ทธ๋จ์ ์คํ์ํฌ ์ ์์ต๋๋ค. ์ฆ Gradle ํ๊ฒฝ์์ NPM ๋น๋ ๋๊ตฌ๋ฅผ ์คํํ๋ ๊ฒ์ด ๋ฐ๋ก Node Gradle ํ๋ฌ๊ทธ์ธ ์ ๋๋ค.
Node Gradle ํ๋ฌ๊ทธ์ธ์ Gradle ํ๊ฒฝ์์ Node.js ํ๊ฒฝ์ ์ ๊ณตํด์ฃผ๋ ํ๋ฌ๊ทธ์ธ์ ๋๋ค. NPMTask, NPXTask ๋ฑ Node ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ์๋ ์ฌ๋ฌ ๋ช ๋ น์ด๋ค์ ์ง์ํ๋ฏ๋ก ํด๋น Task๋ฅผ ์ฝ๋๋ก ์์ฑํ์ฌ Javascript/Typescript๋ก ์ฝ๋ฉํ ํ์ด์ง๋ค์ ๋น๋ํ ์ ์์ต๋๋ค.
https://github.com/node-gradle/gradle-node-plugin
Gradle ํ๊ฒฝ์์ ๋จผ์ Node ํ๊ฒฝ์ ๊ตฌ์ฑํฉ๋๋ค. Node ํ๊ฒฝ์ด ๊ตฌ์ฑ๋์ง ์์๋ค๋ฉด Gradle์์ ์๋์ผ๋ก gradle ์คํฌ๋ฆฝํธ์ ์ ์ํ Node ๋ฒ์ ์ ์ค์นํ๊ฒ ๋๋ฉฐ Node ํ๊ฒฝ์ด ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ FE ์์ค ์ฝ๋์์ ์์ค๋ฅผ ๋น๋ํ ํ ๋น๋ํ ๊ฒฐ๊ณผ๋ฅผ Spring App์ ๋ด๊ณ ๋ ๋ค Spring App์ ๋น๋ํ๋ ๊ณผ์ ์ผ๋ก ์งํํฉ๋๋ค.
์ด๋ฌํ ํ๊ฒฝ์ ๊ตฌ์ฑํ๊ธฐ ์ํด์๋ Spring ํ๋ก์ ํธ๋ฅผ ๋ฉํฐ ๋ชจ๋ ํ๋ก์ ํธ๋ก ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
Multi-Module Project
์ฐ๋ฆฌ๋ ๋ณดํธ์ ์ผ๋ก Spring ํ๋ก์ ํธ๋ฅผ ์์ํ๋ฉด Single Module ํ๋ก์ ํธ๋ก ์์ํฉ๋๋ค. ํ๋์ ์ต์์ gradle ์คํฌ๋ฆฝํธ๋ก ๋น๋ ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ ๊ฒ์ ์ฑ๊ธ ๋ชจ๋ ํ๋ก์ ํธ๋ผ ํฉ๋๋ค.
โโโ app
โ โโโ .gradle
โ โโโ .idea
โ โโโ gradle
โ โโโ src
โ โโโ build.gradle.kts
โ โโโ gradle.properties
โ โโโ gradlew
โ โโโ gradlew.bat
โ โโโ settings.gradle.kts
์์ ๊ฐ์ด ํ๋์ build.gradle.kts ํ์ผ๊ณผ ๊ทธ ์ธ์ ํ์์๋ ํ๋์ src๋ก ๊ตฌ์ฑ๋ ๊ฒ์ ์ฑ๊ธ ๋ชจ๋ ํ๋ก์ ํธ๋ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ๋ฐ์ ํ์ํ ๋ํ๋์, ํ ์คํธ ์ฝ๋, ํ๋ฌ๊ทธ์ธ ๋ฑ์ด ํ๋๋ก๋ง ๊ตฌ์ฑ๋์ด ๋์ํฉ๋๋ค. ๋ฐ๋ผ์ FE ์์ค ์ฝ๋์ ๊ฐ์ด ๋ค๋ฅธ ์์ฑ์ ์ฝ๋๋ฅผ ํ ๋ฒ์ ๋๋ฆฌ๋ ๋ฐ ์ ํฉํ์ง ์์ต๋๋ค.
โโโ app
โ โโโ .gradle
โ โโโ .idea
โ โโโ build
โ โโโ gradle
โ โโโ project-api
โ โ โโโ build
โ โ โโโ src
โ โ โโโ build.gradle.kts
โ โโโ project-fe
โ โ โโโ node_modules
โ โ โโโ public
โ โ โโโ src
โ โ โโโ babel.config.js
โ โ โโโ build.gradle.kts
โ โ โโโ jsconfig.json
โ โ โโโ package.json
โ โ โโโ README.md
โ โ โโโ vue.config.js
โ โ โโโ yarn.lock
โ โโโ build.gradle.kts
โ โโโ gradle.properties
โ โโโ settings.gradle.kts
๋ฉํฐ ๋ชจ๋ ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ๋ฉด ์ต์์ Gradle ์คํฌ๋ฆฝํธ์์ ํ์ ๋ชจ๋์ ์์ฑ๋ Gradle ์คํฌ๋ฆฝํธ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๋ณด๊ณ ๊ฐ๊ธฐ ์์ฑ๋ ๋น๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ด ๋น๋ํฉ๋๋ค. project-fe์๋ FE๋ง์ ์ํ ์์ค ์ฝ๋๊ฐ ๋ค์ด์์ผ๋ฏ๋ก Node Gradle ํ๋ฌ๊ทธ์ธ์ ์ด์ฉํ ๋น๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ณ , project-api์๋ Spring ์ ํ๋ฆฌ์ผ์ด์ ์์ค ์ฝ๋๋ฅผ ๋ฃ์์ผ๋ฏ๋ก Spring ๋ํ๋์์ ํ๋ฌ๊ทธ์ธ ๋ฑ์ ๋น๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ฉด ๋ชจ๋๋ฆฌ์ค ํํ๋ก Spring ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ๋น๋ ํ ์ ์์ต๋๋ค.
IntelliJ์์ ๋ฉํฐ ๋ชจ๋ ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ ๋๋ ๋จผ์ ์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ , ํ์ ๋ชจ๋์ ๋ง๋ค๋ฉด์ ์งํํ ์ ์์ต๋๋ค. ์งํ์ ์ํด ๋จผ์ ์ ํ๋ก์ ํธ๋ฅผ Gradle๋ก ๋ง๋ค์ด์ค๋๋ค.
ํ๋ก์ ํธ ์ต์์ ํด๋๋ฅผ ์ค๋ฅธ์ชฝ ํด๋ฆญํ ๋ค์ ์๋ก์ด ๋ชจ๋์ ์์ฑํฉ๋๋ค. ์๋ก์ด ๋ชจ๋์๋ api๋ผ๋ ์ด๋ฆ์ผ๋ก ์์ฑํด์ค๋๋ค.
$ vue create cms-fe
์ด ํฌ์คํธ์์๋ FE ์์ค ์ฝ๋๋ก Vue.js๋ฅผ ์ฌ์ฉํด๋ณด๊ฒ ์ต๋๋ค. ๊ฐ์ ์ํ๋ ํ๋ ์์ํฌ ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํํ์ฌ ๋ง๋ ํ๋ก์ ํธ์ ํ๋ก ํธ์๋๋ก ๊ตฌํํ ๋ชจ๋์ ๋ง๋ค์ด์ค๋๋ค.
๋ชจ๋์ด ๋ง๋ค์ด์ง ๋ค์๋ ์์ ๊ฐ์ด fe ๋ชจ๋์๋ build.gradle.kts ํ์ผ์ ํ๋ ์ถ๊ฐํด์ค๋๋ค.
์ด์ ์ต์์ settings.gradle.kts์์ ๋ ๋ชจ๋์ include ํด์ค๋๋ค. ๋น๋ํ ๋ ์ด์ ๋ ๋ ๋ชจ๋์ ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํ์ฌ ๋น๋ํ๊ฒ ๋ฉ๋๋ค.
๋จผ์ cms-fe์ build.gradle.kts ํ์ผ์ Node ํ๊ฒฝ์ ๊ตฌ์ฑํฉ๋๋ค. ์ฌ์ฉํ ๋ ธ๋ ๋ฒ์ ์ 18.17.1 ๋ฒ์ ์ด๊ณ , ํญ์ Node ํ๊ฒฝ์ ์ ์ ํ๋๋ก ํ์ฑํ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ , Vue ๋น๋๋ฅผ ์ํ ๋น๋ Task๋ฅผ ํ ๊ฐ ์์ฑํฉ๋๋ค. ์์ ์๋ ํญ์ npm install์ ์ํํ๋๋ก ํ๋ฉฐ ๋น๋ ๋ช ๋ น์ด๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ , BUILD_OUT_DIR์ด๋ผ๋ ํ๊ฒฝ ๋ณ์๋ฅผ ํตํด ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ Spring ํ๋ก์ ํธ๋ก ๋ณด๋ด์ด Spring ์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ๋์ํ๋๋ก ๊ตฌ์ฑํฉ๋๋ค.
์ฌ๊ธฐ์๋ Vue ๋น๋์ vite๋ฅผ ์ด์ฉํ๋๋ก ๊ตฌ์ฑํ์์ผ๋ฏ๋ก vite.config.ts ํ์ผ์์ Vue์ ๊ฒฐ๊ณผ๋ฌผ์ ์ง์ ํ ์ ์์ต๋๋ค. ์์์ ์ฐ๋ฆฌ๋ BUILD_OUT_DIR์ด๋ผ๋ ํ๊ฒฝ ๋ณ์๋ก ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ ์ง์ ํ์์ผ๋ฏ๋ก ํด๋น ๋ณ์๋ฅผ ์ด์ฉํ๋๋ก ๊ตฌ์ฑํฉ๋๋ค. ๋ง์ฝ์ ๋๋นํด ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ๋๋ ํฐ๋ฆฌ๋ก ๋น๋๋๋๋ก ๊ตฌ์ฑํฉ๋๋ค.
๋ค์์ Spring ๋ชจ๋์ ๊ตฌ์ฑํด๋ณด๊ฒ ์ต๋๋ค. ์ด ๊ธ์์๋ ๊ธฐ๋ณธ์ ์ธ ์น ํ์ด์ง๋ง์ ๋์ฐ๊ธฐ ์ํด Spring Web ๋ํ๋์์ Kotlin ๋ํ๋์๋ง์ ์ฌ์ฉํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฉํฐ ๋ชจ๋์์๋ Spring ์ ํ๋ฆฌ์ผ์ด์ ๋น๋์ ์ผ๋ฐ jar๊ฐ ์๋ bootJar ํ์คํฌ๋ก ๋น๋ํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ต์์ Gradle ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ ํ๋ฌ๊ทธ์ธ์ ์์ฑํ๊ณ ์ผ๋จ apply false๋ก ๋ก๋๋ค. ๊ฐ ํ๋ก์ ํธ๋ณ๋ก ์ฌ์ฉํ ํ๋ฌ๊ทธ์ธ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํ๋จ์ ์คํฌ๋ฆฝํธ์์ ํ๋ฌ๊ทธ์ธ ์ง์ ํ ์ฝ๋๋ฅผ project๋ก ๊ตฌํํ ํ ๊ฐ ํ๋ก์ ํธ์ ๋ง๊ฒ ์ฌ์ฉํ ํ๋ฌ๊ทธ์ธ์ ์์ฑํฉ๋๋ค. ์ ์ฒด ํ๋ก์ ํธ์ ์ ์ฉํ ์ฌํญ์ allProjects์ ๊ตฌํํด๋ก๋๋ค.
$ ./gradlew build
์ด์ Gradle ๋ช ๋ น์ด๋ก build ์์ ์ ์ํํด๋ด ๋๋ค. ๊ทธ๋ฌ๋ฉด ์์ ๊ฐ์ด ์ง์ ๋ ๋๋ ํฐ๋ฆฌ์ ๋น๋๋ ๊ฒฐ๊ณผ๋ฌผ์ด ์์ฑ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
Spring WebMvc ์ค์ ๊ตฌํ
ํ์ง๋ง ์ด๋๋ก Spring ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ฉด 404 Not found๊ฐ ๋ํ๋ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Spring์ resources/static ํด๋์ ์๋ ํ์ผ์ ์ ์ ๋ก๋ฉํ๋ฏ๋ก ์ฐ๋ฆฌ๊ฐ ์ง์ ํ frontend ํ์๋ ๋ฌด์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ฒ์๋ถํฐ static ํด๋๋ก ์ง์ ํ๋ ๊ฒ ๋ซ์ง ์์์๊น? ๋ฌผ๋ก ๊ทธ๋๋ ๋์ง๋ง ๋ฐฑ์๋ ํ๋ก์ ํธ์์ ํ๋ก ํธ์๋์ ๋ณ๊ฐ๋ก ์ ์ ์ธ ํ์ผ์ ์ ๊ณตํด์ผ ํ๋ ๊ฒฝ์ฐ static ํด๋์ ์ฌ์ฉ์ด ์ ํ๋ ์ ์์ต๋๋ค. ๋ง์ฝ static ํด๋์ FE ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ ๋์์ ์ก๊ณ ์ถ๋ค๋ฉด ์ด ๋ฐฉ๋ฒ์ ๋ฐ๋ผํด๋ด ์๋ค.
Spring ํ๋ก์ ํธ์ WebMvcConfig๋ผ๋ ์ด๋ฆ์ผ๋ก Configuration Bean์ ์์ฑํฉ๋๋ค. WebMvcConfigurer ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ์ ์ ๋ฆฌ์์ค ๊ฒฝ๋ก์ ์์์ ์ง์ ํ frontend ํด๋๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๋ง์ฝ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ๋ฆฌ์์ค๊ฐ ๋ฐฑ์๋ ํ๋ก์ ํธ์ ์กด์ฌํ๊ฑฐ๋ ์ฝ์ ์ ์๋ ํฌ๋งท์ธ ๊ฒฝ์ฐ ํด๋น ํ์ผ์ ์ฝ๋๋ก ํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด Vue ๊ฒฐ๊ณผ๋ฌผ์ ์์กดํ๋๋ก ํฉ๋๋ค. ์กด์ฌํ์ง ์๊ฑฐ๋ ์ฝ์ ์ ์๋ ๊ฒฝ์ฐ Vue์ ๋ฉ์ธ ํ์ด์ง๋ก ์ด๋ํ๋๋ก ํฉ๋๋ค.
์ด์ Spring ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ํ localhost:8080์ผ๋ก ์ ์ํ๋ฉด ์์ ๊ฐ์ด Vue ํ๋ฉด์ด Tomcat ์์์ ๋์ํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๋ง์น๋ฉฐ..
์ต๋ํ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋๋ฆฌ์ ์ํคํ ์ฒ๋ก ํ์ด์ง์ ์๋ฒ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ดค์ต๋๋ค. ํ์๋ฆฌํ๋ JSP๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ๊ตฌ์ฑ์ด ๊ตณ์ด ํ์์์ง๋ง ์์ ์ด ์ํ๋ ๊ธฐ์ ์ ์ ์ ํ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ์ด๋ฐ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
ํด๋น ํฌ์คํธ์์๋ Vue๋ฅผ ์ฌ์ฉํ์์ง๋ง React, Svlete ๋ฑ Node.js ์์์ ๋์ํ๋ ๋ค๋ฅธ ํ๋ก์ ํธ๋ค๋ ๋น์ทํ๊ฒ ๊ตฌ์ฑํ๋ฉด ๋์ํ๊ธฐ ๋๋ฌธ์ ์ ์ ํ ์์ฉํด์ ํ๋ก์ ํธ ๊ตฌ์ฑ์ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
'Programming > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring boot] HTMX + Thymeleaf ์กฐํฉ์ผ๋ก ์น ํ์ด์ง ๊ฐ๋ฐ ์์ํ๊ธฐ (0) | 2023.12.04 |
---|---|
[Spring] ๋น๋๊ธฐ ์์ ๊ณผ ๋ชจ๋ํฐ๋ง์ ์ํ TaskExecutor, TaskScheduler ๊ธฐ๋ณธ (0) | 2022.11.06 |
[Spring] Spring Advisor์ Pointcut - ์ค์ ํธ (0) | 2022.10.29 |
[Spring] Spring Advisor์ Pointcut - ๊ฐ๋ ํธ (0) | 2022.10.10 |
[Spring] OSIV๋ก ์์๋ณด๋ Spring Transaction ํค์ง๊ธฐ (0) | 2022.06.26 |