React์—์„œ Proxy ์„ค์ •ํ•˜๊ธฐ

2022. 10. 13. 16:44ยท๊ฐœ๋…์ •๋ฆฌ/React

๐Ÿ“Proxy ๋ฅผ ์“ฐ๋Š” ์ด์œ 


๋ฆฌ์•กํŠธ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ์„œ๋ฒ„๋ฅผ ์—ด์–ด์„œ ์ฝ”๋“œ์˜ ์ˆ˜์ •์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜๊ณ  ๋ฐ”๋กœ๋ฐ”๋กœ ๋ธŒ๋ผ์šฐ์ €์— ๋ Œ๋”๋งํ•ด์ค€๋‹ค.

์ด๋•Œ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ์„œ๋ฒ„์™€ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์˜ ์ถœ์ฒ˜(origin)์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— CORS์ •์ฑ…์— ์œ„๋ฐฐ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค์ง€ ๋ชปํ•˜๊ฒŒ๋œ๋‹ค.

CORS: ๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ (Cross-Origin Resource Sharing, CORS)๋Š” ์ถ”๊ฐ€ HTTP ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ํ•œ ์ถœ์ฒ˜์—์„œ ์‹คํ–‰ ์ค‘์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ์„ ํƒํ•œ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋„๋ก ๋ธŒ๋ผ์šฐ์ €์— ์•Œ๋ ค์ฃผ๋Š” ์ฒด์ œ

๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ์„œ๋ฒ„์˜ ๋„๋ฉ”์ธ์„ ํ—ˆ์šฉํ•ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜๊ณ  ๋ฐฑ์—”๋“œ์—์„œ CORS ์„ค์ •์„ ํ•ด์ฃผ์–ด ์‘๋‹ตํ—ค๋”๋ฅผ ์ „๋‹ฌ ๋ฐ›๋Š” ๊ฒƒ์ด ์ •์„์ ์ธ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์ด์ง€๋งŒ Proxy๋ฅผ ์„ค์ •ํ•˜๋ฉด CORS ์ •์ฑ…์„ ์šฐํšŒํ•ด์„œ ํ†ต์‹ ์„ ํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

 

๐Ÿ“Proxy


Proxy๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” React ์•ฑ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ , ํ•ด๋‹น ์š”์ฒญ์„ ์ง์ ‘ ๋ฐฑ์—”๋“œ๋กœ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ React ์•ฑ์ด ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €๋Š” CORS ์ •์ฑ…์„ ์œ„๋ฐ˜ํ•œ์ง€ ๋ชจ๋ฅธ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋ฅผ proxy ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์†์ด๋Š” ๊ฒƒ์ด๋‹ค.

 

๐Ÿ“Proxy๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•


React ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํ˜น์€ Webpack Dev Server์—์„œ ์ œ๊ณตํ•˜๋Š” proxy ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ๋‹ค.


webpack dev server proxy

์›นํŒฉ ๊ฐœ๋ฐœ์„œ๋ฒ„์˜ proxy ์„ค์ •์€ ์›๋ž˜ ์›นํŒฉ ์„ค์ •์„ ํ†ตํ•ด์„œ ์ ์šฉ์„ ํ•˜์ง€๋งŒ, CRA ๋ฅผ ํ†ตํ•ด ๋งŒ๋“  ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ฐ„๋‹จํžˆ package.json ์—์„œ "proxy" ๊ฐ’์„ ์„ค์ •ํ•˜์—ฌ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑ์ด ๋˜์–ด ์žˆ๋‹ค.

...
	"proxy" : "์šฐํšŒํ•  API ์ฃผ์†Œ"
}

๊ธฐ์กด์˜ fetch ํ†ตํ•ด ์š”์ฒญํ•˜๋˜ ๋ถ€๋ถ„์—์„œ ๋„๋ฉ”์ธ ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•œ๋‹ค.

export async function getAllfetch() {

    const response = await fetch('์šฐํšŒํ•  api์ฃผ์†Œ/params');
    .then(() => {
			...
		})
}

export async function getAllfetch() {

    const response = await fetch('/params');
    .then(() => {
			...
		})
}

React ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

webpack dev server ์—์„œ ์ œ๊ณตํ•˜๋Š” proxy๋Š” ์ „์—ญ์ ์ธ ์„ค์ •์ด๊ธฐ ๋•Œ๋ฌธ์—, ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์—์„œ ์‘๋‹ต์„ ๋ฐ›์•„์™€์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค. ์ด๋•Œ๋Š” 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(
    createProxyMiddleware("/api", { //proxy๊ฐ€ ํ•„์š”ํ•œ path prameter๋ฅผ ์ž…๋ ฅ
      target: "http://localhost:3080", //ํƒ€๊ฒŸ์ด ๋˜๋Š” api url๋ฅผ ์ž…๋ ฅ
      changeOrigin: true, //๋Œ€์ƒ ์„œ๋ฒ„ ๊ตฌ์„ฑ์— ๋”ฐ๋ผ ํ˜ธ์ŠคํŠธ ํ—ค๋”๊ฐ€ ๋ณ€๊ฒฝ๋˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„
    })
  );
  app.use(
    createProxyMiddleware("/api2", {
      target: "http://localhost:3070",
      changeOrigin: true,
    })
  );
};

fetch ์š”์ฒญ ์ฝ”๋“œ๋Š” webpack dev server proxy์™€ ๋™์ผํ•˜๋‹ค.

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋™์ผ์กฐ๊ฑด (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๊ฐœ๋…์ •๋ฆฌ/React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๋ฆฌ์•กํŠธ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง์„ ์•Œ์•„๋ณด์ž
  • React ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ ์œ ์ง€ : ์‚ผํ•ญ ์—ฐ์‚ฐ์ž vs ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž
  • ๋ฒˆ๋“ค๋ง๊ณผ ์›นํŒฉ
  • [์ƒํƒœ๊ด€๋ฆฌ] Redux
imKion
imKion
Front-end Developer
  • imKion
    Kion
    imKion
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (46)
      • ๋ฌธ์ œ ํ•ด๊ฒฐ (6)
        • ๋ฆฌํŒฉํ„ฐ๋ง (3)
      • ํšŒ๊ณ  (8)
      • ๊ฐœ๋…์ •๋ฆฌ (29)
        • JavaScript (10)
        • React (9)
        • Next.JS (2)
        • WEB (5)
        • CS ์™ธ (2)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (2)
        • ์ฝ”ํ”Œ๋ฆฟ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    react 18
    OOP
    ํšŒ๊ณ 
    frontend
    ํ”„๋ก ํŠธ์—”๋“œ
    REACT
    typeScript
    ์ฝ”๋“œ์Šคํ…Œ์ด์ธ 
    JavaScript
    til
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.2
imKion
React์—์„œ Proxy ์„ค์ •ํ•˜๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”