์ ์๋ฆฌ์ฆ์์ ๋ฐฑ์๋ ๋ฐฐํฌ๊น์ง ์์ฑํ์๋ค๋ฉด ์ด์ ๋ฐฐํฌ๋ ๋๋ฉ์ธ์ ๊ธฐ์ค์ผ๋ก ํ์ ๋ ํ๋ก ํธ ์ค๋์ ๋ฐฑ์๋ ์ฌ์ด์ url์ ์์ ํด์ค๋๋ค.
makeUrl: (url) => {
let obj = {};
if (url[0] === '/') {
obj['external'] = false;
if (process.env.NODE_ENV === 'development') {
obj['fullUrl'] = 'http://localhost:8080' + url;
}
else if (process.env.NODE_ENV === 'production') {
obj['fullUrl'] = 'https://tooravel.be' + url;
}
else {
new Error('process.env.NODE_ENV is not on development or production')
}
ํ๋ก ํธ ๋จ์์๋ fetch ํจ์๋ฅผ ๊ฐ์ธ์ ์ผ๋ก ๊ฐํธํด์ Fetch ์ ํธ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉ์ค์ด๋ค.
Feteh = {
makeUrl: () => { ...
}
get:() => {
...
return fetch(fullUrl, ...
}
post: () => {
...
return fetch(fullUrl, ...
}
}
์ด๋ฌํ ํํ์์ค์ ์๋จ์ ์ฝ๋๊ฐ ๋ค์ด ์๋์
์ด๋ค. ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ฐ๋ผ url์ ๋ฐ๊ฟ์ฃผ๋๋ฐ, ๋น๋๋ฅผ ํ์๋ค๋ฉด process.env.NODE_ENV
๊ฐ production
์๋๋ฉด development
๊ฐ ๋๋ ๊ฒ์ ์ด์ฉํ ๊ฒ์ด๋ค.
makeUrl ๋ถ๋ถ์ https://tooravel.be ๋ก ์์ ํด๋๋ฉด ์ดํ ์์ฒญํ๋ url๋ค์ด ๋ค์ ๋ถ์ด์ ์์ฒญ๋๋ค.
โ CORS ์ด์๋?
ํ๋กํ ์ฝ/ํธ์คํธ/ํฌํธ ๊ฐ ๋ค๋ฅด๋ค๋ฉด ๊ฐ์ ์ถ์ฒ์ ์์ฒญ์ด๋ผ ๋ฐ์๋ค์ด์ง ์๊ณ ๊ฑฐ๋ถํ๋ ์ ์ฑ ์ผ๋ก์ ์ ์ ์ค ํ๋๋ผ๋ ๋ค๋ฅด๋ค๋ฉด ๋ค๋ฅธ ์ถ์ฒ์ ์์ฒญ์ผ๋ก ๋ฐ์๋ค์ฌ ๊ฑฐ๋ถํ๋ ์ ์ฑ ์ด๋ค. ์ด ์ ์ฑ ์ ๋ค๋ฅธ ์ถ์ฒ์์ ๊ฐ์ ธ์จ ์คํฌ๋ฆฝํธ์ ์ํธ์์ฉํ๋๊ฒ์ ์ ํํ๋ ๋งค์ฐ ๋ณด์์ ์ค์ํ ์ ์ฑ ์ด๋ค.
์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ (๋ค๋ฅธ ์ถ์ฒ๋ก ๋ถํฐ ์คํฌ๋ฆฝํธ๊ฐ ์ํธ์์ฉ ํ ์ ์๋) ๋ฐฉ๋ฒ์ผ๋ก์ CORS(Cross-Origin Resource Sharing) ์ ์ฑ ๊ณผ ๊ด๋ จํ์ฌ ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ http ํต์ ์ ํ ๋ ์๋๋ฐฉ ์ธก์ ์ถ์ฒ๋ฅผ ๋ฏธ๋ฆฌ ์ธ์งํ๊ณ ํด๋น ์ถ์ฒ์ ๋ํ ์ ๋ณด๋ค์ ๋ํด์ ์๋ก ์ํธ์์ฉ ํ ์ ์๊ฒํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ด๋ฐฉ๋ฒ์ ํต์ ์ ๋ณด์ ํค๋์ ์๋ก์ ๋๋ฉ์ธ์ ์ ๋ณด๋ฅผ ์
๋ ฅํจ์ผ๋ก์ ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ค. ์ฃผ๋ก ์์ฒญ์ ๋ํ ์๋ต์ ํค๋์ ๋๋ฉ์ธ์ ๋ณด๋ฅผ ๊ธฐ์
ํ๋ค. ์ฆ, ๋ฐฑ์๋์์ cors ์ ๋ณด๋ฅผ ์์ ํด์ผํ๋ค.
Access-Control-Allow-Origin: http://example.com
ํ๋ก์ ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์์ ์ ๋ณด๊ตํ์ ๋์์ฃผ๋ ์๋ฒ์ด๋ค. ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๊ณ ์ ํ๋ ์๋ฒ์ Access-Control-Allow-Origin ์์ฑ์ ์์ ํ ์ ์๋ ๊ฒฝ์ฐ์ ๊ต์ฅํ ์ ์ฉํ๋ค. ํ๋ก์ ์๋ฒ๊ฐ ์ค์ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด์ ๋ฐ์์จ ๋ค์ ๊ทธ๊ฑธ Access-Control-Allow-Origin ์ค์ ์ ์ ์ ํ ํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ๋๋ ค์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ฌ๊ธฐ์ express js์ ํ๋ก์ ํธ์์ ์ฌ์ฉ๊ฐ๋ฅํ cors ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
const cors = require('cors');
app.use(cors({
origin: ['https://tooravel-front.vercel.app'];
credentials: true,
optionsSuccessStatus: 200
}));
cors ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๊ณ ์์ ๊ฐ์ด origin์ ํ์ฉํ๋ ํ๋ก ํธ์ค๋์ ๋๋ฉ์ธ ์ฃผ์๋ฅผ ์ ๋ ฅ ํ๋ฉด ํด๋นํ๋ ํ๋กํ ์ฝ/ ํธ์คํธ/ํฌํธ ์ ํด๋นํ๋ ์์ฒญ์ ๋ํด์ ์ํธ์์ฉ์ ํ ์ ์๋ค.
์ ์ ๊ฐ์ด ๋ฐฑ์๋ ์ฝ๋๋ฅผ ์์ ํ๋ฉด
๋๋์ด ๋ด๊ฐ ๋ง๋ ํ์ด์ง์์ ๋ก๊ทธ์ธ์ด ๋๊ฒ ์ ํ์ธ ํ ์ ์๋ค.!