Lecture/์ฝ๋์คํ
์ด์ธ
[SEB FE] Section4 unit10 Proxy
Dong _ hwa
2023. 5. 18. 08:50

Proxy

< proxy๋ฅผ ์ ์ฉํด ๋ธ๋ผ์ฐ์ ๋ฅผ ์์ธ ํ ํ๋ฆ >
React ์ฑ์์ ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด API๋ฅผ ์์ฒญํ ๋,
proxy๋ฅผ ํตํด ๋ฐฑ์๋ ์๋ฒ๋ก ์์ฒญ์ ์ฐํํ์ฌ ๋ณด๋ด๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ฉด ๋ฐฑ์๋ ์๋ฒ๋ ์๋ต์ React ์ฑ์ผ๋ก ๋ณด๋ด๊ณ ,
React ์ฑ์ ๋ฐ์ ์๋ต์ ๋ฐฑ์๋ ์๋ฒ ๋์ ๋ธ๋ผ์ฐ์ ์๊ฒ ์ ๋ฌํฉ๋๋ค.
์ด๋ ๊ฒ ๋๋ฉด ์ถ์ฒ๊ฐ ๊ฐ์์ง๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๋ ์ด ์ฌ์ค์ ๋์น ์ฑ์ง ๋ชปํ๊ณ ํ์ฉํ๊ฒ ๋ฉ๋๋ค
Proxy ์ฌ์ฉ๋ฒ
webpack dev server proxy
- ๋ธ๋ผ์ฐ์ API๋ฅผ ์์ฒญํ ๋ ๋ฐฑ์๋ ์๋ฒ์ ์ง์ ์ ์ผ๋ก ์์ฒญ์ ํ์ง ์๊ณ , ํ์ฌ ๊ฐ๋ฐ์๋ฒ์ ์ฃผ์๋ก ์ฐํ ์์ฒญ
- ์นํฉ ๊ฐ๋ฐ ์๋ฒ์์ ํด๋น ์์ฒญ์ ๋ฐ์ ๊ทธ๋๋ก ๋ฐฑ์๋ ์๋ฒ๋ก ์ ๋ฌํ๊ณ , ๋ฐฑ์๋ ์๋ฒ์์ ์๋ตํ ๋ด์ฉ์ ๋ค์ ๋ธ๋ผ์ฐ์ ์ชฝ์ผ๋ก ๋ฐํ
- ์นํฉ ๊ฐ๋ฐ์๋ฒ์ proxy ์ค์ ์ ์๋ ์นํฉ ์ค์ ์ ํตํด์ ์ ์ฉ์ ํ์ง๋ง, CRA ๋ฅผ ํตํด ๋ง๋ ๋ฆฌ์กํธ ํ๋ก์ ํธ์์๋ package.json ์์ "proxy" ๊ฐ์ ์ค์ ํ์ฌ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋๋ก ๊ตฌ์ฑ
...
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"proxy" : "์ฐํํ API ์ฃผ์" // ๋งจ ๋ฐ์ ์์ฑํด ๊ธ๋ฐฉ ์ฐพ์ ์ ์๊ฒ ํจ
}
// ๊ธฐ์กด์ fetch, ํน์ axios๋ฅผ ํตํด ์์ฒญํ๋ ๋ถ๋ถ์์ ๋๋ฉ์ธ ๋ถ๋ถ์ ์ ๊ฑฐ
export async function getAllfetch() {
const response = await fetch('์ฐํํ api์ฃผ์/params');
.then(() => {
...
})
}
export async function getAllfetch() {
const response = await fetch('/params');
.then(() => {
...
})
}
React Proxy ์ฌ์ฉ๋ฒ
์๋์ผ๋ก proxy๋ฅผ ์ ์ฉํด์ค์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ์ด๋๋ http-proxy-middleware ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉ
http-proxy-middleware ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
npm install http-proxy-middleware --save
React App์ src ํ์ผ ์์์ setupProxy.js ํ์ผ์ ์์ฑ,
์์์ ์ค์นํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ ๋ถ๋ฌ์ด
const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function(app) {
app.use(
'/api', //proxy๊ฐ ํ์ํ path prameter๋ฅผ ์
๋ ฅํฉ๋๋ค.
createProxyMiddleware({
target: 'http://localhost:5000', //ํ๊ฒ์ด ๋๋ api url๋ฅผ ์
๋ ฅํฉ๋๋ค.
changeOrigin: true, //๋์ ์๋ฒ ๊ตฌ์ฑ์ ๋ฐ๋ผ ํธ์คํธ ํค๋๊ฐ ๋ณ๊ฒฝ๋๋๋ก ์ค์ ํ๋ ๋ถ๋ถ์
๋๋ค.
})
);
};
// ๊ธฐ์กด์ fetch, ํน์ axios๋ฅผ ํตํด ์์ฒญํ๋ ๋ถ๋ถ์์ ๋๋ฉ์ธ ๋ถ๋ถ์ ์ ๊ฑฐ (์นํฉ๊ณผ ๋์ผ)
export async function getAllfetch() {
const response = await fetch('์ฐํํ api์ฃผ์/params');
.then(() => {
...
})
}
export async function getAllfetch() {
const response = await fetch('/params');
.then(() => {
...
})
}