API ๋ช ์ธ์๋ฅผ ๋ฐ์ CORS๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Proxy์ค์ ์ ์งํํด ๋ดค๋ค.
๋งํฌ์
๋ ์ด๋ ์ ๋ ํด๊ฒฐํ๊ณ
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 ์ค์ ์ ํ์ ์๊ฒ ๋์๋ค... ๐
Proxy ์ค์ ์ ์ ํ๋๋ฐ ์๊พธ ์ ๋์
์ด๋ฐ์ ์ ๋ฅผ ๋จน์๊ณ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ฌธ์ ์ธ์ค ์๊ณ
์ํ ๊ณณ๋ง ์์ ์ ํ๋ค.
์๋ฒ์์ ํต์ ๋ถ๋ถ์ ์์ง ๋ง์ด ๋ถ์กฑํ๋ค ๋๊ผ๋ค.
๊ตฌ๊ธ๋ง์ ํ๋ฉด์ ์ค์ ์ฝ๋๋ฅผ ์์ฑํ๋๋ฐ๋
์ด๊ฒ ๋ฌด์จ ๋ป์ธ์ง ํ๋์ฉ ๊ฒ์ํด๋ณด๋ฉด์ ์ฐพ์๋ดค๋ ๊ฑฐ ๊ฐ๋ค.