Syw.Frontend

๐Ÿงฉ Vue 2๋กœ ๋ฐฐ์šฐ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ดˆ

1๋‹จ๊ณ„. Vue 2 + Express + Axios ์ธ์ฆ ๊ธฐ๋ฐ˜ ํˆฌ๋‘์•ฑ ๋งŒ๋“ค๊ธฐ

1-9. ํ”„๋ก ํŠธ-๋ฐฑ ์™„์ „ ๋ถ„๋ฆฌ ๊ตฌ์กฐ + ๋ฐฐํฌ ๋Œ€์‘ (CORS & Proxy)

๐ŸŽฏ ํ•™์Šต ๋ชฉํ‘œ

  • ํ”„๋ก ํŠธ(Vue)์™€ ๋ฐฑ์—”๋“œ(Express)๋ฅผ ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐœ๋ฐœ
  • CORS ๋ฌธ์ œ ํ•ด๊ฒฐ๊ณผ ํ”„๋ก์‹œ ์„ค์ • ์ ์šฉ
  • ๋ฐฐํฌ ์‹œ API ๊ฒฝ๋กœ ์ •๋ฆฌ

โœ… 1. ํ˜„์žฌ ๊ตฌ์กฐ ์š”์•ฝ

  • ํ”„๋ก ํŠธ์—”๋“œ(Vue CLI ์•ฑ): localhost:8080
  • ๋ฐฑ์—”๋“œ ์„œ๋ฒ„(Express): localhost:3000

โ†’ ์„œ๋กœ ๋‹ค๋ฅธ ํฌํŠธ๋กœ ์ธํ•ด CORS ์ •์ฑ… ์œ„๋ฐ˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ


โœ… 2. ๋ฐฑ์—”๋“œ์—์„œ CORS ํ—ˆ์šฉ

ํ„ฐ๋ฏธ๋„์—์„œ Express ์„œ๋ฒ„ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•œ ๋’ค ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์„ธ์š”:

npm install cors

๐Ÿ“ ์˜ˆ: vue2-api/ ์•ˆ์—์„œ ์‹คํ–‰

โœ… ์„œ๋ฒ„ ์ฝ”๋“œ (server.js)

const express = require('express')
const cors = require('cors')
const app = express()

app.use(cors()) // ๋ชจ๋“  ์ถœ์ฒ˜ ํ—ˆ์šฉ
app.use(express.json())

// ๋‚˜๋จธ์ง€ ๋ผ์šฐํ„ฐ ์„ค์ • ...

๋ณด์•ˆ ๊ฐ•ํ™”๋ฅผ ์œ„ํ•ด ๋ฐฐํฌ ์‹œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ œํ•œ๋œ ์ถœ์ฒ˜๋งŒ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

app.use(cors({ origin: 'https://my-frontend-domain.com' }))

โœ… 3. ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ก์‹œ ์„ค์ • (Vue CLI ์ „์šฉ)

๐Ÿ“„ vue.config.js ์ˆ˜์ •

// vue.config.js
module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:3000',
        changeOrigin: true,
        pathRewrite: { '^/api': '' }
      }
    }
  }
}

โœ… Axios ์š”์ฒญ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ

ํ”„๋ก ํŠธ์—์„œ ๊ธฐ์กด:

const API_URL = 'http://localhost:3000/todos'

๋ณ€๊ฒฝ ํ›„:

const API_URL = '/api/todos' // ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋จ

์ด ์„ค์ •์„ ํ†ตํ•ด Vue ์•ฑ์€ CORS ์—†์ด /api/todos๋กœ ๋ฐฑ์—”๋“œ์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โœ… 4. ํ”„๋กœ์ ํŠธ ์‹คํ–‰

# ํ„ฐ๋ฏธ๋„ 1
node server.js

# ํ„ฐ๋ฏธ๋„ 2 (vue ํ”„๋กœ์ ํŠธ ํด๋”)
npm run serve

ํ”„๋ก ํŠธ ์š”์ฒญ: localhost:8080/api/todos

๋ฐฑ์—”๋“œ ์‘๋‹ต: localhost:3000/todos โ† ํ”„๋ก์‹œ๊ฐ€ ์ค‘๊ฐ„์—์„œ ์—ฐ๊ฒฐ


โœ… 5. ๋ฐฐํฌ ์‹œ ๊ตฌ์กฐ

๊ตฌ์„ฑ ์˜ˆ์‹œ
ํ”„๋ก ํŠธ Netlify, Vercel, GitHub Pages, ์ •์  ํ˜ธ์ŠคํŒ…
๋ฐฑ์—”๋“œ Render, Heroku, Railway, EC2 ๋“ฑ ์„œ๋ฒ„ ํ˜ธ์ŠคํŒ…
API ๊ฒฝ๋กœ ํ”„๋ก์‹œ ๋Œ€์‹  ๋„๋ฉ”์ธ ์ฃผ์†Œ ์ง์ ‘ ์ง€์ • ํ•„์š”
// ๋ฐฐํฌ ์‹œ Axios baseURL ์˜ˆ์‹œ
const API_URL = 'https://my-api-server.com/todos'

๐Ÿง  ์ •๋ฆฌ

ํ•ญ๋ชฉ ์„ค๋ช…
CORS ํ—ˆ์šฉ ์„œ๋ฒ„์—์„œ cors() ์‚ฌ์šฉ
ํ”„๋ก์‹œ ์„ค์ • ๊ฐœ๋ฐœํ™˜๊ฒฝ์—์„œ CORS ์šฐํšŒ์šฉ (vue.config.js)
๊ฒฝ๋กœ /api/... ์‹ค์ œ ์„œ๋ฒ„์—์„œ๋Š” /todos, Vue์—์„œ๋Š” /api/todos
๋ฐฐํฌ ์‹œ ํ”„๋ก์‹œ ์ œ๊ฑฐํ•˜๊ณ  ์ ˆ๋Œ€ URL ์‚ฌ์šฉ

FE ์ €์žฅ์†Œ

GitHub - heroyooi/vue2-app at ch9

BE ์ €์žฅ์†Œ

GitHub - heroyooi/vue2-api at ch8

๐Ÿ’ฌ ๋Œ“๊ธ€

    โ€ป ๋กœ๊ทธ์ธ ํ›„ ๋Œ“๊ธ€์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.