Hello to my YUNIVERSE

[Day 1] SpringBoot + Vue.js ๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ธํŒ…

by ์œค๊ทคํƒฑ๊ทค
๋ฐ˜์‘ํ˜•

์ด๊ฑฐ ์„ธํŒ…ํ•˜๋Š”๋ฐ 3์ผ์ด ๊ฑธ๋ฆฐ ์‚ฌ๋žŒ์ด ์žˆ๋‹ค? ๋ฟŒ์Š๋น ์Š (๊ทธ๊ฒŒ ๋‚˜์•ผ ๋‘ ๋น ๋‘ ๋น  ๋‘๋น„๋‘๋ฐฅ)d

Vue์™€ SpringBoot์— ๋ฌธ์™ธํ•œ์ธ ์‚ฌ๋žŒ์ด ์“ฐ๋Š” ๊ธ€์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ๋ถ€ํ„ฐ ์จ๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

โ€ป์ด ๊ธ€์€ Window ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Œ

 

1. SpringBoot Settin

 

1-1. JDK ์„ค์น˜

https://www.oracle.com/kr/java/

 

Java Software

๋น„์šฉ ์ ˆ๊ฐ, ํ˜์‹  ์ด‰์ง„, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋น„์Šค ๊ฐœ์„ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” Java Software. ์„ธ๊ณ„ 1์œ„ ๊ฐœ๋ฐœ์ž ํ”Œ๋žซํผ Java์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ํ™•์ธํ•ด๋ณด์„ธ์š”.

www.oracle.com

์ž๋ฐ” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด JDK๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

 

1-2. ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •

 

JAVA_HOME (์ถ”๊ฐ€) : JDK๊ฐ€ ์„ค์น˜๋œ ๋””๋ ‰ํ† ๋ฆฌ

CLASSPATH (์ถ”๊ฐ€) : %JAVA_HOME%\lib

PATH (ํŽธ์ง‘) : %JAVA_HOME%\bin

 

1-3. STS ์„ค์น˜

https://spring.io/tools

 

Spring | Home

Cloud Your code, any cloud—we’ve got you covered. Connect and scale your services, whatever your platform.

spring.io

์—์„œ ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๋Š” tool๊ณผ ์šด์˜์ฒด์ œ์— ๋งž๋Š” ์‹คํ–‰ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค.

๋‚˜๋Š” ์ต์ˆ™ํ•œ Eclipse๋กœ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•˜๋‹ค.

 

1-4. SpringBoot Project ์ƒ์„ฑ

Spring Starter Project๋ฅผ ์„ ํƒํ•˜์—ฌ SpringBoot ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

์œ„์™€ ๊ฐ™์ด ์„ค์ •์„ ์™„๋ฃŒํ•˜์˜€๋‹ค.

๊ผญ maven, gradle ๋‘˜ ์ค‘ ํƒ์ผ์„ ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ˆ ์ต์ˆ™ํ•œ ๊ฒƒ์œผ๋กœ ์„ ํƒํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

(์„ ํƒ์‚ฌํ•ญ)

SpringBootDevTools

Lombok

Oracle Driver

Spring Web

์„ ์„ ํƒํ•˜์—ฌ dependencies๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์ถ”ํ›„์— ํ•„์š”ํ•˜๋‹ค๋ฉด pom.xml์—์„œ ์•Œ์•„์„œ ์ถ”๊ฐ€ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์—

์ด ๋‹จ๊ณ„์—์„œ ๊ผญ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•  ํ•„์š”๋Š” ์—†๋‹ค๊ณ  ํ•œ๋‹ค.

์„ ํƒ์„ ๋‹ค ํ–ˆ๋‹ค๋ฉด Finish๋ฅผ ๋ˆŒ๋Ÿฌ Project๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

2. Vue.js Setting

 

2-1. VSCode ์„ค์น˜

https://code.visualstudio.com/

 

Visual Studio Code - Code Editing. Redefined

Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications.  Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.

code.visualstudio.com

(์„ ํƒ์‚ฌํ•ญ)

VSCode๋ฅผ ์„ค์น˜ ํ›„, Extensions์—์„œ

Vue3 Snippets

Vetur

HTML CSS Support

๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

 

2-2. Node.js ์„ค์น˜

https://nodejs.org/ko/download/

 

๋‹ค์šด๋กœ๋“œ

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

์–ด๋””์„œ๋Š” LTS๊ฐ€ ์•ˆ์ •์ ์ด๊ณ  ์–ด๋””์„œ๋Š” ์ตœ์‹ ๋ฒ„์ „์ด ์•ˆ์ •์ ์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ๋‚˜๋Š” LTS๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•˜๋‹ค.

ํ—Œ๋ฐ Windows Installer๋ฅผ ๋ˆŒ๋Ÿฌ ๋ฐ”๋กœ ๋‹ค์šด๋กœ๋“œ๋ฅผ ๋ฐ›์œผ๋ฉด 64bit๊ฐ€ ์•„๋‹Œ 32bit ํŒŒ์ผ์ด ๋‹ค์šด๋ฐ›์•„์ ธ์„œ ๋ฐ‘์—์„œ 64bit ํŒŒ์ผ์„ ์†์ˆ˜ ๋ฐ›์•˜๋‹ค. ๋‚ด ์ปดํ“จํ„ฐ 64bit ๋งž๋Š”๋ฐ ์™œ...

 

node.js๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ npm๋„ ์„ค์น˜๊ฐ€ ์™„๋ฃŒ ๋œ๋‹ค.

 

2-3. Vue-cli ์„ค์น˜

cmd๋ฅผ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค.

npm install -g @vue/cli

๋ฅผ ์ž…๋ ฅํ•˜์—ฌ vue/cli๋ฅผ ์„ค์น˜ํ•œ๋‹ค. ์ด ๋•Œ -g ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ „์—ญ์ ์œผ๋กœ ์„ค์น˜ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์—

์„ค์น˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค.

 

2-4. Vue Project ์ƒ์„ฑ

workSpace๋ฅผ Openํ•˜๊ณ , terminal์„ ์˜คํ”ˆํ•œ๋‹ค.

/* ์ƒ์„ฑํ•œ ํ”„๋กœ์ ํŠธ๋กœ ์ด๋™ */
cd VueSpring

// Vue Project ์ƒ์„ฑ
vue create vue --no-git
/*
vue create vueํ”„๋กœ์ ํŠธ๋ช… git๋ฏธ์ƒ์„ฑ
*/

์„ ์ž…๋ ฅํ•œ๋‹ค.

 

๋‚˜๋Š” Vue3 Default๋กœ ์ƒ์„ฑํ•˜์˜€๋‹ค.

 

cd vue

npm run serve

ํ•˜์—ฌ ์ƒ์„ฑํ•œ vueProject๋กœ ์ด๋™ํ•œ๋‹ค.

 

server run์„ ํ†ตํ•ด์„œ ์ •์ƒ์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

Vue ์ดˆ๊ธฐํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚ฌ๋‹ค๋ฉด,

VSCode terminal์—์„œ Ctrl + C, y๋ฅผ ์ฐจ๋ก€๋กœ ์ž…๋ ฅํ•˜์—ฌ server๋ฅผ offํ•œ๋‹ค.

 

 

2-5. vue.config.js ์ˆ˜์ •

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  outputDir: "../src/main/resources/static",
  indexPath: "index.html",
  devServer: {
    port: 8081,
    proxy: "http://localhost:8080"
  },
  chainWebpack: config => {
    const svgRule = config.module.rule("svg");
    svgRule.uses.clear();
    svgRule.use("vue-svg-loader").loader("vue-svg-loader");
  }
})

outputDir : ๋นŒ๋“œ๋œ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ

indexPath : ์ƒ์„ฑ๋œ ํŒŒ์ผ ์ค‘์—์„œ ์ง„์ž…์  ํŒŒ์ผ

port : vue ๊ฐœ๋ฐœ ์„œ๋ฒ„ port

proxy : SpringBoot (backend ๋‚ด์žฅ was ์ฃผ์†Œ)

 

ํ˜„์žฌ ๋‚˜๋Š” SpringBoot์—์„œ ๋”ฐ๋กœ port๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— default port์ธ 8080์œผ๋กœ ์ง€์ •์ด ๋˜์–ด์žˆ๋‹ค.

vue ๊ฐœ๋ฐœ port๋Š” ์–ด๋””์„œ๋Š” ๋งž์ถฐ์•ผ ํ•œ๋‹ค๊ณ  ํ•˜๊ณ  ์–ด๋””์„œ๋Š” ๋‹ค๋ฅด๊ฒŒ ํ•ด์•ผํ•œ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ, ๋‚˜๋Š” ๋‹ค๋ฅด๊ฒŒ ์ง€์ •ํ–ˆ๋‹ค.

๋นŒ๋“œํŒŒ์ผ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด vue Project ๋‚ด dist ํด๋” ๋‚ด์— ๋นŒ๋“œํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜๋Š” SpringBoot ํ”„๋กœ์ ํŠธ์— ์ •์ ํŒŒ์ผ(๋นŒ๋“œํŒŒ์ผ)์„ ์ƒ์„ฑํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— SpringBoot ๋‚ด ํด๋”๋กœ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋”ฐ๋กœ ์ง€์ •ํ•ด์ค€ ๊ฒƒ์ด๋‹ค.

 

npm run build

terminal์— build ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ build ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.

 

๋นŒ๋“œํŒŒ์ผ ์ƒ์„ฑ์ด ์™„๋ฃŒ๋˜๋ฉด ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•œ ๋’ค, ๋‚ด์žฅ was๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Vue ์ดˆ๊ธฐํ™”๋ฉด์ด ๋ณด์ธ๋‹ค๋ฉด ์„ธํŒ… ์™„๋ฃŒ!

 

 

↓ Error: Source and destination must not be the same. ๊ฐ€ ๋‚œ๋‹ค๋ฉด ํ™•์ธ

๋”๋ณด๊ธฐ
module.exports = {
  outputDir: "../src/main/resources/static",
  indexPath: "../static/index.html",
  devServer: {
    proxy: "http://localhost:8080"
  }
};

๋ผ๊ณ  ์•Œ๋ ค์ฃผ๋˜ chatGPT... ํ•˜์ง€๋งŒ! ๋‚˜๋Š” ์ด๋ ‡๊ฒŒ ํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ณ„์†ํ•ด์„œ build Complete ํ›„ ์—๋Ÿฌ๋ฅผ ๋ฑ‰์–ด๋ƒˆ๋‹ค.

์•„๋ฌด๋ฆฌ ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ด๋„ ์•Œ ๋ฐฉ๋„๊ฐ€ ์—†์—ˆ๋‹ค๊ฐ€ ๊ฒฐ๊ตญ chatGPT์˜ ๋„์›€์„ ๋ฐ›์•„ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ outputDir / indexPath์˜ ๊ฒฝ๋กœ๋ฅผ ๋‹ฌ๋ฆฌํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ!

 

์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

outputDir๊ณผ indexPath๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š” outputDir์ด ๋นŒ๋“œ๋œ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์˜๋ฏธํ•˜๊ณ , indexPath๋Š” ์ƒ์„ฑ๋œ ํŒŒ์ผ ์ค‘์—์„œ ์ง„์ž…์  ํŒŒ์ผ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ outputDir๊ณผ indexPath๊ฐ€ ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋˜๋ฉด ๋นŒ๋“œ๋œ ํŒŒ์ผ์ด ์ด๋ฏธ ์ƒ์„ฑ๋œ ์ƒํƒœ์—์„œ ๋‹ค์‹œ ๊ทธ ํŒŒ์ผ์— ๋ฎ์–ด์“ฐ๊ธฐ๋ฅผ ํ•˜๋ ค๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, outputDir์ด dist์ด๊ณ , indexPath๊ฐ€ dist/index.html๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. ์ด ๊ฒฝ์šฐ npm run build ๋ช…๋ น์œผ๋กœ Vue.js ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

dist ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
Vue.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ปดํŒŒ์ผ๋œ ํŒŒ์ผ๋“ค์ด dist ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
dist/index.html ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
์œ„์˜ ๊ณผ์ •์—์„œ outputDir๊ณผ indexPath๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ, Vue.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ปดํŒŒ์ผ๋œ ํŒŒ์ผ๋“ค์ด ์ด๋ฏธ dist ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒ์„ฑ๋˜์–ด ์žˆ๊ณ , dist/index.html ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋ ค๊ณ  ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๊ฐ™์€ ํŒŒ์ผ์„ ๋Œ€์ƒ์œผ๋กœ ๋ฎ์–ด์“ฐ๊ธฐ๋ฅผ ์‹œ๋„ํ•˜๊ฒŒ ๋˜์–ด Error: Source and destination must not be the same. ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ outputDir๊ณผ indexPath๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

๋”ฐ๋ผ์„œ 2-5 ์ฒ˜๋Ÿผ outputDir๊ณผ indexPath๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•ด์ฃผ๊ฑฐ๋‚˜, 

์•„๋‹ˆ๋ฉด indexPath๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋ฐฉ๋ฒ•์ด๋‹ค... ^^....๋‚ด 3์ผ........

 

๋ฐ˜์‘ํ˜•

'FRONTEND > VUE.JS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Day 2] SpringBoot + Vue.js์— MyBatis ๋ผ์–น๊ธฐ  (1) 2023.03.21

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

๐™‰๐™š๐™ซ๐™š๐™ง ๐˜ฟ๐™ž๐™š

์œค๊ทคํƒฑ๊ทค

ํ™œ๋™ํ•˜๊ธฐ