[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ]pre-project - 8์ผ์ฐจ

JiEunยท2023๋…„ 6์›” 20์ผ
0

โœ”๏ธ ์‹œ์ž‘

API ๋ช…์„ธ์„œ๋ฅผ ๋ฐ›์•„ CORS๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Proxy์„ค์ •์„ ์ง„ํ–‰ํ•ด ๋ดค๋‹ค.


๐Ÿ“ CORS๋ฌธ์ œ

๋งˆํฌ์—…๋„ ์–ด๋Š ์ •๋„ ํ•ด๊ฒฐํ–ˆ๊ณ 
API๋ช…์„ธ์„œ๋„ ๋‚˜์™”๋‹ค ํ•ด์„œ

CORS๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Proxy ์„ค์ •์„ ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

vite๋กœ ์ง„ํ–‰์„ ํ–ˆ๊ณ  Ngrok๋กœ API๋ช…์„ธ์„œ๋ฅผ ๋ฐ›์•˜๋‹ค.

//vite.config.js
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [react()],
  server: {
    proxy: {
      '/questions': {
        target : 'https://1517-59-11-30-105.ngrok-free.app',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/questions/, ''),
        secure: false,
      }
    }
  }
})
//App.jsx
 const getAPIData = () => {
    fetch('/questions/recent?page=0&size=10', {
      headers: {
        'Content-Type': 'application/json;charset=UTF-8',
        'Accept': 'application/json',
      },
    })
    .then(res => console.log(res))
    .then(data => console.log(data))
  }
  getAPIData()

์ด๋ ‡๊ฒŒ ํ†ต์‹ ์„ ์ง„ํ–‰ํ•˜๋Š”๋ฐ ์ž๊พธ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค..

์ฝ˜์†”์ฐฝ์œผ๋กœ ๋ญ”๊ฐ€ ๋ฐ›์•„์™€ ์ง€๋Š”๊ฑฐ ๊ฐ™์€๋ฐ
res.json()์„ํ•˜๋ฉด

์—๋Ÿฌ๋ฅผ ๋ฑ‰์–ด ๋‚ธ๋‹ค...

2์‹œ๊ฐ„ ์ด์ƒ ๋ถ™์žก์•˜๋Š”๋ฐ ๊ฒฐ๊ตญ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ๋‹ค..ใ… ใ… 

๐Ÿ“ํ•ด๊ฒฐ

Q&A๋ž€์— ์งˆ๋ฌธ์„ ๋‚จ๊ธฐ๊ฒŒ ๋˜์—ˆ๊ณ  ํ•ด๋‹น ๋ฌธ์ œ์— ๋Œ€ํ•ด ์šฐ์„ 
Respones๊ฐ€ htmlํ˜•ํƒœ์ธ๋ฐ json์œผ๋กœ ํŒŒ์‹ฑํ•ด์„œ ๋‚˜๋Š” ์˜ค๋ฅ˜๋ผ๊ณ  ํ•˜์…จ๋‹ค.

์•Œ๊ณ ๋ณด๋‹ˆ Ngrok๋ฅผ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•˜ ใ„น๊ฒฝ์šฐ get ์š”์ฒญ์‹œ API๋ช…์„ธ์„œ ํ™”๋ฉด์ด ์•„๋‹Œ ngrokํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ๊ณ  ํ˜ธ์ถœ์‹œ header์—

'ngrok-skip-browser-warning':'true'
๋ฅผ ๋„ฃ์–ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค...

๋˜ํ•œ ํ•ด๋‹น ๋‹ต๋ณ€ ๋‹ฌ๋ฆฌ๊ธฐ ์ „ ๋ฐฑ์—”๋“œ์— CORS ํ™•์ธ ์š”์ฒญ๋„ ํ–ˆ์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ Proxy ์„ค์ •์€ ํ•„์š” ์—†๊ฒŒ ๋˜์—ˆ๋‹ค... ๐Ÿ‘€


โœ”๏ธ Keep

  • ํฌ๊ธฐํ•˜์ง€ ์•Š๊ณ  ์ด๊ฒƒ์ €๊ฒƒ ์‹œ๋„ํ•ด ๋ณด๋ ค๊ณ  ํ–ˆ๋‹ค.
  • ๋„ˆ๋ฌด ํ’€๋ฆฌ์ง€ ์•Š์œผ๋ฉด ํ˜ผ์ž ๋ถ™์žก์ง€ ๋ง๊ณ  ๋ฐ”๋กœ ๋ฌธ์˜๋ฅผ ๋„ฃ์–ด ์‹œ๊ฐ„ ๋‹จ์ถ•์„ ํ–ˆ๋‹ค.

โœ๏ธ Problem

  • Ngrok ํ™˜๊ฒฝ์ด CORS๋ถ€๋ถ„์— ๋Œ€ํ•ด ๋ฌธ์ œ๊ฐ€ ๋งŽ๋‹ค๊ณ  ํ•œ๋‹ค.
    - ์ด ๋ถ€๋ถ„์„ ์ œ๋Œ€๋กœ ์ธ์ง€ํ•˜์ง€ ๋ชป ํ–ˆ๋‹ค.
  • Ngrok์— ๋Œ€ํ•ด ๊ตฌ๊ธ€๋ง ํ–ˆ์–ด์•ผ ํ–ˆ๋Š”๋ฐ Prosxy๋‚˜ ๋„๋ฉ”์ธ ๋ถ€๋ถ„์— ์ดˆ์ ์„ ๋‘” ๊ฑฐ ๊ฐ™์•˜๋‹ค.

๐Ÿš€ Try

  • ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๋ถ€๋ถ„์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋‹ค๋ฅธ ๊ณณ์„ ์ดˆ์ ์„ ๋น„์ถฐ๋ณด์ž.
  • 1~2์‹œ๊ฐ„ ์ด์ƒ ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ๋ชปํ•˜๋ฉด ๋ฐ”๋กœ ๋„์›€ ์š”์ฒญ์„ ํ•ด๋ณด์ž (ํ”„๋กœ์ ํŠธ์—์„œ ์‹œ๊ฐ„์€ ๊ธˆ๐ŸŒŸ์ด๋‹ค.)

โœ๏ธ ๋งˆ์น˜๋ฉฐ

Proxy ์„ค์ •์€ ์ž˜ ํ–ˆ๋Š”๋ฐ ์ž๊พธ ์•ˆ ๋˜์„œ
์ดˆ๋ฐ˜์— ์• ๋ฅผ ๋จน์—ˆ๊ณ  ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ๋ฌธ์ œ์ธ์ค„ ์•Œ๊ณ 
์—„ํ•œ ๊ณณ๋งŒ ์ˆ˜์ •์„ ํ–ˆ๋‹ค.

์„œ๋ฒ„์™€์˜ ํ†ต์‹  ๋ถ€๋ถ„์€ ์•„์ง ๋งŽ์ด ๋ถ€์กฑํ•˜๋‹ค ๋Š๊ผˆ๋‹ค.

๊ตฌ๊ธ€๋ง์„ ํ•˜๋ฉด์„œ ์„ค์ • ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š”๋ฐ๋„
์ด๊ฒŒ ๋ฌด์Šจ ๋œป์ธ์ง€ ํ•˜๋‚˜์”ฉ ๊ฒ€์ƒ‰ํ•ด๋ณด๋ฉด์„œ ์ฐพ์•„๋ดค๋˜ ๊ฑฐ ๊ฐ™๋‹ค.

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

0๊ฐœ์˜ ๋Œ“๊ธ€