์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- ์๋ฐ์คํฌ๋ฆฝํธ#JS#slice#splice
- UI
- ๋ ธ๋๊ต๊ณผ์
- UX
- react
- https://www.daleseo.com/js-array-slice-splice/
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ด์ฅ๊ณ ์ฐจํจ์
- variable#function
- cmarket
- children vs childrenNodes
- CSS
- ํท๊ฐ๋ฆฐ๋ค~
- for~in/for~of
- removeCookie
- https://dasima.xyz/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%A0%9C%EA%B3%B1-math-pow-%EA%B3%84%EC%82%B0/
- dom
- slice/splice/split
- @redux-toolkit
- ์๋ฐ์คํฌ๋ฆฝํธ#์กฐ๊ฑด๋ฌธ#๋ฌธ์์ด
- ์๋ฐ์คํฌ๋ฆฝํธ#JS#var#let#const#undefined#null
- toString#String
- js
- https://lo-victoria.com/introduction-to-redux-toolkit-for-beginners
- ใทใ
- https://developer-talk.tistory.com/299
- User Flow
- redux์ํ์ ์ง
- Beesbeesbees
- JS#3์ผ์ฐจ๋ฌ๋ฆฌ์#์ด๋ฐ์ธ๋ฐ#์๊ฐ๊ธ๋ฐฉ~
- Today
- Total
Daily Front_Minhhk
React Proxy ๋ณธ๋ฌธ
๐ก CORS - ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ , (Cross-Origin Resource Sharing, CORS)
์ถ๊ฐ HTTP ํค๋๋ฅผ ์ฌ์ฉํ์ฌ, ํ ์ถ์ฒ์์ ์คํ ์ค์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค๋ฅธ ์ถ์ฒ์ ์ ํํ ์์์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํ๋๋ก ๋ธ๋ผ์ฐ์ ์ ์๋ ค์ฃผ๋ ์ฒด์ ์ ๋๋ค.
CORS ์ ์ฑ ์ ์๋ฐ ํ์ฌ ๋ค๋ฅธ ์ถ์ฒ๋ฅผ ๊ฐ์ง ์ํ์์ ์์ฒญํ๊ฒ ๋๋ฉด, ๋ธ๋ผ์ฐ์ ๊ฐ ๋ณด์์์ ์ด์ ๋ก ์ฐจ๋จํ๋ค
ํด๋ผ์ด์ธํธ๊ฐ 3000๋ฒ ํฌํธ, ์๋ฒ ํฌํธ๊ฐ 3070 ์ผ ๋,
ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ๋ฆฌ์์ค๋ฅผ ์์ฒญ ํ ๋, CORS ์๋ฌ๊ฐ ๋ํ๋๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ์ง ์๊ฒ ๋๋ค.
→
๋์ผํ ์ถ์ฒ์์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ฉด ๋๋ค.
๐ก ๋ผ์ด๋ธ ๋ฐ์ดํฐ(live data)
์ค์ ์๋น์ค๋๊ณ ์๋ ์ฑ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค(Data Base, DB)์ ์ ์ฌ๋๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ ์ ๋ฐ ์ํ, ๊ฒฐ์ ๋ฑ ๋ค์ํ ์ ๋ณด๋ค์ ์๋ก ๋ค ์ ์์ต๋๋ค.
Proxy
React ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํน์ Webpack Dev Server์์ ์ ๊ณตํ๋ proxy ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด CORS ์ ์ฑ ์ ์ฐํํ ์ ์๋ค.
ํ๋ก์ ์ ์ฉ ์ ํ๋ฆ
์์ ๊ทธ๋ฆผ์ proxy๋ฅผ ์ ์ฉํด ๋ธ๋ผ์ฐ์ ๋ฅผ ์์ด๊ธฐ ์ ํ๋ฆ์ด๋ค.
ํ๋ก ํธ์๋, React ์ฑ์์ ๋ธ๋ผ์ฐ์ ์ชฝ์ผ๋ก ์์ฒญ์ ๋ณด๋ ๋๋ค.
๊ทธ๋ฌ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ๋ฐฑ์๋, ์ฆ ์๋ฒ ์ชฝ์ผ๋ก ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๊ฒ ๋ฉ๋๋ค.
์ด๋ ์ ๊ทผ ๊ถํ์ด ์๋์ง, ์ฆ ์ถ์ฒ๊ฐ ๊ฐ์์ง ํ์ธํ๋๋ฐ ์ด๋ ๋ฐฑ์๋ ์๋ฒ๋ ์ ์์ ์ผ๋ก 200 OK ์๋ต์ ๋ธ๋ผ์ฐ์
์๊ฒ ๋ณด๋ ๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋ธ๋ผ์ฐ์ ๋ ๋ฐ์ ๋ฆฌ์์ค ๋ฐ ์๋ต๊ณผ ํจ๊ป ์ถ์ฒ๊ฐ ๊ฐ์์ง ์๋์ง ํ์ธํ๊ฒ ๋๋๋ฐ,
์ด๋ ์ถ์ฒ๊ฐ ๋ค๋ฅด๋ค๋ฉด ์๋ต์ ํ๊ธฐ(CORS Error) ํ๊ณ ,
์ถ์ฒ๊ฐ ๊ฐ๋ค๋ฉด ์๋ต์ ํ๊ธฐํ์ง ์๊ณ ๋ค์ ํ๋ก ํธ์๋ ์ชฝ์ผ๋ก ์๋ต์ ๋ณด๋ด์ฃผ๋ ๊ฒ์ ๋๋ค.
ํ๋ก์ ์ ์ฉ ํ ํ๋ฆ
์์ ๊ทธ๋ฆผ์ proxy๋ฅผ ์ ์ฉํด ๋ธ๋ผ์ฐ์ ๋ฅผ ์์ธ ํ ํ๋ฆ์ด๋ค.
React ์ฑ์์ ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด API๋ฅผ ์์ฒญํ ๋, proxy๋ฅผ ํตํด ๋ฐฑ์๋ ์๋ฒ๋ก ์์ฒญ์ ์ฐํํ์ฌ ๋ณด๋ธ๋ค.
๊ทธ๋ฌ๋ฉด ๋ฐฑ์๋ ์๋ฒ๋ ์๋ต์ React ์ฑ์ผ๋ก ๋ณด๋ด๊ณ , React ์ฑ์ ๋ฐ์ ์๋ต์ ๋ฐฑ์๋ ์๋ฒ ๋์ ๋ธ๋ผ์ฐ์ ์๊ฒ ์ ๋ฌ
ํฉ๋๋ค.
์ด๋ ๊ฒ ๋๋ฉด ์ถ์ฒ๊ฐ ๊ฐ์์ง๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๋ ํ์ฉํ๊ฒ ๋ฉ๋๋ค.
์น ๊ฐ๋ฐ์์ Proxy ์ฌ์ฉ๋ฒ 2๊ฐ์ง
webpack dev server proxy
package.json ์์ "proxy" ๊ฐ์ ์ค์ ํ์ฌ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋๋ก ๊ตฌ์ฑ์ด ๋์ด ์๋ค.
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 ์ฌ์ฉ๋ฒ
webpack dev server ์์ ์ ๊ณตํ๋ 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 parameter๋ฅผ ์
๋ ฅํฉ๋๋ค.
createProxyMiddleware({
target: 'http://localhost:5000', //ํ๊ฒ์ด ๋๋ api url๋ฅผ ์
๋ ฅํฉ๋๋ค.
changeOrigin: true, //๋์ ์๋ฒ ๊ตฌ์ฑ์ ๋ฐ๋ผ ํธ์คํธ ํค๋๊ฐ ๋ณ๊ฒฝ๋๋๋ก ์ค์ ํ๋ ๋ถ๋ถ์
๋๋ค.
})
);
};
๊ธฐ์กด์ fetch, ํน์ axios๋ฅผ ํตํด ์์ฒญํ๋ ๋ถ๋ถ์์ ๋๋ฉ์ธ ๋ถ๋ถ์ ์ ๊ฑฐํ๋ค.
๋ฐ์ ๋ถ๋ถ์ webpack dev server ์์ ์ ๊ณตํ๋ proxy ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋์ ๋์ผํฉ๋๋ค.
export async function getAllfetch() {
const response = await fetch('์ฐํํ api์ฃผ์/params');
.then(() => {
...
})
}
export async function getAllfetch() {
const response = await fetch('/params');
.then(() => {
...
})
}
'Code๊ฐ๋ฐ์ผ์ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[firebase] firestore (0) | 2023.05.01 |
---|---|
[firebase] ํ๋ก์ ํธ ์์ฑ (0) | 2023.05.01 |
CI / CD (0) | 2023.02.03 |
AWS (0) | 2023.02.02 |
Optimization ์ต์ ํ (0) | 2023.02.01 |