-
κ°λ° λͺ¨λμμ API μμ²ν λ νλ‘μ μ€μ νκΈ° Proxying API Requests in Developmentπ»κ°λ°/React 2023. 7. 11. 13:48728x90
Proxying API Requests in Development | Create React App
Note: this feature is available with react-scripts@0.2.3 and higher.
create-react-app.dev
* μ°Έκ³ : μ΄ κΈ°λ₯μ react-scripts@0.2.3 μ΄μμμ μ¬μ©ν μ μμ΅λλ€.
μ¬λλ€μ μ’ μ’ λ°±μλ ꡬνκ³Ό λμΌν νΈμ€νΈ λ° ν¬νΈμμ νλ°νΈ μλ React μ±μ μ 곡ν©λλ€.
μλ₯Ό λ€μ΄ μ±μ΄ λ°°ν¬λ ν νλ‘λμ μ€μ μ λ€μκ³Ό κ°μ μ μμ΅λλ€./ - static server returns index.html with React app /todos - static server returns index.html with React app /api/todos - server handles any /api/* requests using the backend implementation
μ΄μ κ°μ μ€μ μ΄ μμΌλ©΄ κ°λ° μ€μ λ€λ₯Έ νΈμ€νΈλ ν¬νΈλ‘ 리λλ μ ν μΌλ € μμ΄ fetch('/api/todos')μ κ°μ μμ²μ μμ±νλ κ²μ΄ νΈλ¦¬ν©λλ€.
κ°λ° μ€μΈ API μλ²μ μ μ μλ μμ²μ νλ‘μνλλ‘ κ°λ° μλ²μ μ§μνλ €λ©΄ λ€μκ³Ό κ°μ΄ package.jsonμ νλ‘μ νλλ₯Ό μΆκ°ν©λλ€.
"proxy": "http://localhost:4000",
μ΄λ κ² νλ©΄ κ°λ° μ€μ fetch('/api/todos')ν λ κ°λ° μλ²κ° μ μ μμ°μ΄ μλμ μΈμνκ³ http://localhost:4000/api/todosμ λν μμ²μ ν΄λ°±μΌλ‘ νλ‘μν©λλ€. κ°λ° μλ²λ Accept ν€λμ text/htmlμ΄ μλ μμ²λ§ νλ‘μλ‘ λ³΄λ΄λ €κ³ μλν©λλ€.
νΈλ¦¬νκ²λ μ΄λ κ² νλ©΄ κ°λ° μ CORS λ¬Έμ λ° μ€λ₯ λ©μμ§λ₯Ό νΌν μ μμ΅λλ€.Fetch API cannot load http://localhost:4000/api/todos. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
νλ‘μλ κ°λ° λͺ¨λ(npm start μ¬μ©)μλ§ μν₯μ λ―ΈμΉλ©° /api/todosμ κ°μ URLμ΄ νλ‘λμ λͺ¨λμμ μ¬λ°λ₯Έ νλͺ©μ κ°λ¦¬ν€λμ§ νμΈνλ κ²μ μ¬μ©μμ μ± μμ λλ€.
/api μ λμ¬λ₯Ό μ¬μ©ν νμκ° μμ΅λλ€. text/html μλ½ ν€λκ° μλ μΈμλμ§ μμ μμ²μ μ§μ λ νλ‘μλ‘ λ¦¬λλ μ λ©λλ€.
νλ‘μ μ΅μ μ HTTP, HTTPS λ° WebSocket μ°κ²°μ μ§μν©λλ€.
νλ‘μ μ΅μ μ΄ μΆ©λΆν μ μ°νμ§ μμ κ²½μ° λμμΌλ‘ λ€μμ μνν μ μμ΅λλ€.
- μ§μ νλ‘μ ꡬμ±
- μλ²μμ CORSλ₯Ό νμ±νν©λλ€.
- νκ²½ λ³μλ₯Ό μ¬μ©νμ¬ μ¬λ°λ₯Έ μλ² νΈμ€νΈ λ° ν¬νΈλ₯Ό μ±μ μ½μ νμμμ€.
νλ‘μ κ΅¬μ± ν "μλͺ»λ νΈμ€νΈ ν€λ" μ€λ₯
"Invalid Host Header" Errors After Configuring Proxy
νλ‘μ μ΅μ μ νμ±ννλ©΄ λ³΄λ€ μ격ν νΈμ€νΈ κ²μ¬ μΈνΈλ₯Ό μ΅νΈμΈνκ² λ©λλ€. μ΄λ λ°±μλλ₯Ό μ격 νΈμ€νΈμ κ°λ°©λ μνλ‘ λλ©΄ μ»΄ν¨ν°κ° DNS 리λ°μΈλ© 곡격μ μ·¨μ½ν΄μ§κΈ° λλ¬Έμ νμν©λλ€.
μ΄κ²μ localhostμμ κ°λ°ν λ μν₯μ λ―ΈμΉμ§ μμ§λ§ μ¬κΈ°μ μ€λͺ λ λλ‘ μ격μΌλ‘ κ°λ°νλ κ²½μ° νλ‘μ μ΅μ μ νμ±νν ν λΈλΌμ°μ μ λ€μ μ€λ₯κ° νμλ©λλ€.
Invalid Host header
μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ €λ©΄ νλ‘μ νΈμ 루νΈμ μλ .env.developmentλΌλ νμΌμ κ³΅κ° κ°λ° νΈμ€νΈλ₯Ό μ§μ ν μ μμ΅λλ€.
HOST=mypublicdevhost.com
μ§κΈ κ°λ° μλ²λ₯Ό λ€μ μμνκ³ μ§μ λ νΈμ€νΈμμ μ±μ λ‘λνλ©΄ μλν΄μΌ ν©λλ€.
μ¬μ ν λ¬Έμ κ° μκ±°λ ν΄λΌμ°λ νΈμ§κΈ°μ κ°μ μ’ λ μ΄κ΅μ μΈ νκ²½μ μ¬μ©νλ κ²½μ° .env.development.localμ ν μ€μ μΆκ°νμ¬ νΈμ€νΈ κ²μ¬λ₯Ό μμ ν μ°νν μ μμ΅λλ€. μ΄λ μννλ©° μ»΄ν¨ν°λ₯Ό μ μ± μΉμ¬μ΄νΈμ μ격 μ½λ μ€νμ λ ΈμΆμν΅λλ€.
# NOTE: THIS IS DANGEROUS! # It exposes your machine to attacks from the websites you visit. DANGEROUSLY_DISABLE_HOST_CHECK=true
μ΄ λ°©λ²μ κΆμ₯νμ§ μμ΅λλ€.
μλμΌλ‘ νλ‘μ ꡬμ±
Configuring the Proxy Manually
* μ°Έκ³ : μ΄ κΈ°λ₯μ react-scripts@2.0.0 μ΄μμμ μ¬μ©ν μ μμ΅λλ€.
νλ‘μ μ΅μ μ΄ μΆ©λΆν μ μ°νμ§ μμ κ²½μ° Express μ± μΈμ€ν΄μ€μ μ§μ μ‘μΈμ€νκ³ κ³ μ ν νλ‘μ λ―Έλ€μ¨μ΄λ₯Ό μ°κ²°ν μ μμ΅λλ€.
μ΄ κΈ°λ₯μ package.jsonμ νλ‘μ μμ±κ³Ό ν¨κ» μ¬μ©ν μ μμ§λ§ λͺ¨λ λ Όλ¦¬λ₯Ό src/setupProxy.jsμ ν΅ν©νλ κ²μ΄ μ’μ΅λλ€.
λ¨Όμ npm λλ Yarnμ μ¬μ©νμ¬ http-proxy-middlewareλ₯Ό μ€μΉν©λλ€.$ npm install http-proxy-middleware --save $ # or $ yarn add http-proxy-middleware
λ€μμΌλ‘ src/setupProxy.jsλ₯Ό λ§λ€κ³ κ·Έ μμ λ€μ λ΄μ©μ λ£μ΅λλ€.
const { createProxyMiddleware } = require('http-proxy-middleware'); module.exports = function(app) { // ... };
μ΄μ μνλ λλ‘ νλ‘μλ₯Ό λ±λ‘ν μ μμ΅λλ€! λ€μμ μμ http-proxy-middlewareλ₯Ό μ¬μ©νλ μμ λλ€.
const { createProxyMiddleware } = require('http-proxy-middleware'); module.exports = function(app) { app.use( '/api', createProxyMiddleware({ target: 'http://localhost:5000', changeOrigin: true, }) ); };
μ°Έκ³ : μ΄ νμΌμ κ°μ Έμ¬ νμλ μμ΅λλ€. κ°λ° μλ²λ₯Ό μμνλ©΄ μλμΌλ‘ λ±λ‘λ©λλ€.
μ°Έκ³ : μ΄ νμΌμ Nodeμ JavaScript κ΅¬λ¬Έλ§ μ§μν©λλ€. μ§μλλ μΈμ΄ κΈ°λ₯λ§ μ¬μ©ν΄μΌ ν©λλ€(μ¦, Flow, ES λͺ¨λ λ±μ μ§μνμ§ μμ).
μ°Έκ³ : νλ‘μ κΈ°λ₯μ κ²½λ‘λ₯Ό μ λ¬νλ©΄ κ²½λ‘μμ κΈλ‘λΉ λ°/λλ ν¨ν΄ μΌμΉλ₯Ό μ¬μ©ν μ μμΌλ©° μ΄λ μ΅μ€νλ μ€ κ²½λ‘ μΌμΉλ³΄λ€ λ μ μ°ν©λλ€.'π»κ°λ° > React' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
React.memo, useMemo, useCallback μΈμ μ¨μΌ ν κΉ? (1) 2024.09.22 μ½λ μ€ν리ν Code Splitting & μλ² μ¬μ΄λ λ λλ§ Server Side Rendering (0) 2023.07.03 리λμ€ μν κ΄λ¦¬ λμ Redux (0) 2023.07.03 리μ‘νΈ λΌμ΄ν μ¬μ΄ν΄ λ©μλ React Lifecycle Methods (0) 2023.07.03