React

๋ฆฌ์•กํŠธ Vite Proxy ํ™œ์šฉํ•œ CORS ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

martinooo 2024. 5. 3. 15:18

๐Ÿคท‍โ™‚๏ธ ๋ณธ๋ก ์— ์•ž์„œ


ํ”„๋ก ํŠธ์—”๋“œ ๋ฒˆ๋“ค๋Ÿฌ ๊ฐœ๋…๊ณผ webpack vs vite ๋น„๊ต์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ๊ธ€์„ ๋ณด์‹œ๋ฉด ๋” ๋งŽ์€ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค^^

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋ฒˆ๋“ค๋Ÿฌ ๊ฐœ๋…๊ณผ webpack vs vite ๋น„๊ต

https://cometruedream.tistory.com/224

 

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋ฒˆ๋“ค๋Ÿฌ ๊ฐœ๋…๊ณผ webpack vs vite ๋น„๊ต

๐Ÿฃ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ? ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋Š” ๋ถ„๋ฆฌ๋œ ์ฝ”๋“œ ์กฐ๊ฐ๋“ค์„ ํ•˜๋‚˜๋กœ ์••์ถ• ํ•˜๋Š” ๊ฐœ๋ฐœ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ํ•ต์‹ฌ ์ž‘์—…์€ HTML, CSS, JAVASCRIPT ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ํ•˜๋‚˜๋กœ ๊ฒฐํ•ฉํ•˜์—ฌ ๋‹จ์ผ ํŒŒ์ผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ์••์ถ•์‹œํ‚จ ๋‹จ์ผ

cometruedream.tistory.com

 

๐Ÿคท‍โ™‚๏ธ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ CORS ์˜ค๋ฅ˜?


ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ API CORS ์˜ค๋ฅ˜๊ฐ€ ๋นˆ๋ฒˆํžˆ ๋ฐœ์ƒํ•œ๋‹ค.

Vite ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ Proxy๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CORS ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ๊ฐ™์€ ๋„๋ฉ”์ธ ์ถœ์ฒ˜๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„ ์›ํ™œํ•˜๊ฒŒ API ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

CORS ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ?

  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ๋™์ผํ•œ ORIGIN์ด ์•„๋‹ ๊ฒฝ์šฐ CORS 500 ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • URL ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด protocol, host, port ์ ํ˜€์žˆ์ง€๋งŒ ์ด ๋ถ€๋ถ„์ด ๋‹ค๋ฅด๊ฒŒ ์š”์ฒญ์ด ๋“ค์–ด๊ฐ€๋ฉด CORS ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

URL ๋Œ€ํ•ด์„œ ๋ถ„์„ & ์ดํ•ด ์•Œ์•„๋ณด๊ธฐ

https://cometruedream.tistory.com/43

 

URL ๋Œ€ํ•ด์„œ ๋ถ„์„ & ์ดํ•ด

์˜ค๋Š˜์€ URL์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ(Domain) ? ๋„๋ฉ”์ธ์€ IP ์ฃผ์†Œ๋ฅผ ๊ฐ–๋Š” ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์‰ฝ๊ฒŒ ๊ธฐ์–ตํ•˜๊ณ  ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ค€ ์„œ๋น„์Šค ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ์ปดํ“จํ„ฐ์™€์˜ ํ†ต์‹ ์—์„œ๋Š” ์ˆซ์ž๋กœ ํ‘œํ˜„

cometruedream.tistory.com

 

 

 

๐Ÿคท‍โ™‚๏ธ CORS ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• 


๊ธฐ๋ณธ์ ์œผ๋กœ CORS ์˜ค๋ฅ˜ ํ•ด๊ฒฐ์€ ๋ฐฑ์—”๋“œ์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค.

๋ฐฑ์—”๋“œ์—์„œ ๋ฐ”๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ์•ˆ ๋˜๋Š” ๊ฒฝ์šฐ ํ”„๋ก ํŠธ์—์„œ๋„ ์ž„์‹œ๋ฐฉํŽธ์œผ๋กœ CORS ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

 

Proxy ์„ค์ •

Proxy๋ž€?

  • Proxy๋Š” API๋กœ ๋„คํŠธ์›Œํฌ ์š”์ฒญ & ์‘๋‹ต์„ ์ฃผ๊ณ  ๋ฐ›๋Š” client์™€ server ์‚ฌ์ด๋ฅผ ์ค‘๊ณ„ํ•˜๋Š” ์ค‘๊ฐ„์ž ์—ญํ• ์ด๋‹ค.
  • Proxy ์„ค์ •์„ ํ•œ๋‹ค๋ฉด ์š”์ฒญ์„ ๋‚ ๋ฆด ๋•Œ origin์„ ๋ฐ”๊ฟ”์„œ server ๋ณด๋‚ผ ์ˆ˜ ์žˆ์–ด์„œ cors ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ ์ชฝ์—์„œ Proxy ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์„ ํฌ์›Œ๋“œ Proxy๋ผ๊ณ  ํ•œ๋‹ค (์„œ๋ฒ„๋‹จ์—์„œ Proxy ์„ค์ •์€ ๋ฆฌ๋ฒ„์Šค Proxy๋ผ๊ณ  ํ•œ๋‹ค.).

 

 

Proxy ์„ค์ • ๋ฐฉ๋ฒ•

vite.config.json ํŒŒ์ผ์— Server ์•ˆ์— proxy ์˜ต์…˜์„ ์„ค์ •ํ•œ๋‹ค.

 

 

  • env ํŒŒ์ผ๋กœ API URL ์„ค์ •
  • /api ์•ž ๋ถ€๋ถ„์ธ origin์„ target์— ์„ค์ •๋˜์–ด ์žˆ๋Š” ๋ถ€๋ถ„์œผ๋กœ ๋ฐ”๊ฟ” ์ค€๋‹ค๋Š” ์˜๋ฏธ

 

์•„๋ž˜์˜ ๊ทธ๋ฆผ์œผ๋กœ Proxy ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

  1. vite.config.json ํŒŒ์ผ์— ์„ค์ •ํ•œ URL /api ํ”„๋ก์‹œ ์„ค์ •์ด ์ ์šฉ๋œ๋‹ค.
  2. ํ”„๋ก์‹œ rewrite ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด /api ๋ถ€๋ถ„์„ ์‚ญ์ œํ•˜๊ณ  /auth/login/email ๋ณ€๊ฒฝํ•œ๋‹ค.
  3. changeOrigin ์˜ต์…˜์œผ๋กœ HTTP ์š”์ฒญ ํ—ค๋”์˜ Host ๊ฐ’์„ target ์ฃผ์†Œ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
  4. ๊ฐ™์€ ๋„๋ฉ”์ธ์ด ์ถœ์ฒ˜๋ฅผ proxy ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๊ณ  proxy๋Š” ์œ„์—์„œ ์„ค๋ช…ํ–ˆ๋“ฏ์ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์™€์˜ ์ค‘๊ฐ„ ์ค‘๊ณ„์ž ์—ญํ• ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Proxy ์„œ๋ฒ„์—์„œ target ์ฃผ์†Œ๋กœ API ํ†ต์‹ ์„ ํ•œ๋‹ค.
  5. ์ตœ์ข…์ ์œผ๋กœ CORS ์˜ค๋ฅ˜๋ฅผ ์šฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

์„ค์ •ํ•œ Proxy API ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

 

๐Ÿคท‍โ™‚๏ธ ์ •๋ฆฌํ•˜์ž๋ฉด…


ํ”„๋ก ํŠธ์—์„œ ํฌ์›Œ๋“œ Proxy๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CORS๋ฅผ ํšŒํ”ผํ•ด ๋ณด์•˜๊ณ  vite์˜ ์˜ต์…˜์„ ํ™œ์šฉํ•ด์„œ CORS ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•ด ๋ณด์•˜๋‹ค.

๋ฐ”๋žŒ์งํ•œ ๋ฐฉ๋ฒ•์€ ๋ฐฑ์—”๋“œ์—์„œ ์ฒ˜๋ฆฌํ•ด ์ฃผ๋Š” ๊ฒƒ์ด์ง€๋งŒ ์ž„์‹œ๋ฐฉํŽธ์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด์„œ ํ”„๋ก ํŠธ์—์„œ Proxy ์šฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 


 

์žฌ๋ฐŒ๋Š” ์˜ค๋Š˜์˜ ๋ ๋ณ„ ์šด์„ธ ๋ณด๊ณ  ๊ฐ€์„ธ์š”!