๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
React

CORS ์—๋Ÿฌ ํ•ด๊ฒฐํ•˜๊ธฐ

by eugene663 2023. 5. 9.

๋ฆฌ์•กํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๋˜ ์ค‘..

๊ฐœ๋… ๊ณต๋ถ€ํ•  ๋•Œ ๋ณด์•˜๋˜ CORS๋ฅผ ์—๋Ÿฌ๋กœ ๋งž๋”ฑ๋“œ๋ฆฌ๊ฒŒ ๋˜์—ˆ๋‹ค...!๐Ÿคจ

 

CORS

Cross-Origin Resource Sharing(CORS)์€ ์ถ”๊ฐ€์ ์ธ HTTP header๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ origin์˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค.

์„œ๋น„์Šคํ•˜๊ณ  ์žˆ์ง€ ์•Š์€ ์‚ฌ์ดํŠธ์—์„œ ์„ธ์…˜์„ ์š”์ฒญํ•ด์„œ ์„ธ์…˜์„ ํš๋“ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ์‚ฌ์ดํŠธ๋Š” ์•…์˜์ ์œผ๋กœ ๋‚ด ์„ธ์…˜์„ ํƒˆ์ทจํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํ–‰๋™์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์š”์ฒญ์„ ๋ง‰์Šต๋‹ˆ๋‹ค. ํ”ผ์‹ฑ์‚ฌ์ดํŠธ๊ฐ€ ๋Œ€ํ‘œ์ ์ธ ๊ณต๊ฒฉ ์‚ฌ๋ก€๋กœ ํ”ผ์‹ฑ์‚ฌ์ดํŠธ๊ฐ€ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒƒ์„ ๋ง‰๊ณ  ํ—ˆ์šฉํ•œ origin๋งŒ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด CORS๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•  ๋•Œ ์ถ”๊ฐ€์ ์ธ ํ—ค๋”์— ์ •๋ณด๋ฅผ ๋‹ด๋Š”๋‹ค. ๋‚ด origin์€ ๋ฌด์—‡์ด๊ณ  ์–ด๋–ค ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์š”์ฒญ์„ ํ•  ๊ฒƒ์ด๊ณ  ์–ด๋–ค ํ—ค๋”๋“ค์„ ํฌํ•จํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๋‹ด์•„ ์„œ๋ฒ„์— ์ „์†กํ•œ๋‹ค. ์„œ๋ฒ„๋Š” ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” origin์„ ํ—ค๋”์— ๋‹ด์•„์„œ ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ๋ณด๋‚ธ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด ํ—ค๋”๋ฅผ ๋ณด๊ณ  ํ•ด๋‹น origin์—์„œ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ฆฌ์†Œ์Šค ์ „์†ก์„ ํ—ˆ์šฉํ•˜๊ณ  ๋งŒ์•ฝ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

 

์ฆ‰. ๋‹ค๋ฅธ ์›น์‚ฌ์ดํŠธ์—์„œ ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค!

 

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋–ด๋‹ค.

์œ„์™€ ๊ฐ™์ด ์—๋Ÿฌ๊ฐ€ ๋–ด๊ณ 

ํ•ด๊ฒฐ์ฑ…์€ ๋‚˜๋ฆ„ ๊ฐ„๋‹จํ•˜๋‹ค!

 

๋ฆฌ์•กํŠธ์—์„œ๋Š” ํ”„๋ก์‹œ ์„ค์ •์„ ํ†ตํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค!๐Ÿ˜‰

 

package.json์— 

"proxy": "http://์„œ๋ฒ„ ๋„๋ฉ”์ธ"

๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ ,

 

๋ณธ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•œ๋‹ค.

const formData = new FormData();
    formData.append("file", file);

    // ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก
    axios
      .post("/api/files-test", formData, {
        headers: {
          "Content-Type": "multipart/form-data",
        },
      })
      .then((response) => {
        // ์‘๋‹ต ์ฒ˜๋ฆฌ
        console.log("์š”์ฒญ ์„ฑ๊ณต");
        console.log(response);
      })
      .catch((error) => {
        // ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
        console.log("์š”์ฒญ ์‹คํŒจ");
        console.log(error);
      });

 

 

ํ•ด๊ฒฐ ์™„๋ฃŒ!

 

์—๋Ÿฌ๋กœ ์ฉ”์ฉ”๋งค๋‹ค๊ฐ€ ํ•ด๊ฒฐํ–ˆ์„ ๋•Œ ๊ทธ ์ƒ์พŒํ•จ์€ ์ •๋ง ์งœ๋ฆฟํ•˜๋‹ค.

์•„ ๊ทธ๋ ‡๊ตฌ๋‚˜.. ํ•˜๊ณ  ๋„˜์–ด๊ฐ”๋˜ ๊ฐœ๋…์„ ์ง์ ‘ ์—๋Ÿฌ๋กœ ๋ณด๊ฒŒ ๋˜๋‹ˆ ๊ธฐ๋ณธ ๊ฐœ๋…์˜ ์ดํ•ด๋„์— ๋Œ€ํ•œ ์ค‘์š”์„ฑ์„ ๊นจ๋‹ฌ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ธฐ๋ณธ๊ธฐ ํ™”์ดํŒ…!