Cors.md


์›น์„ ๊ฐœ๋ฐœํ•œ๋‹ค๋ฉด ํ•œ ๋ฒˆ์ฏค์€ ๋“ค์–ด๋ณด์•˜์„ CORS์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1๏ธโƒฃ CORS๋ž€ ๋ฌด์—‡์ผ๊นŒ?


corsimage
  • CORS: Cross Origin Resource Sharing ๋‹ค๋ฅธ ์ถœ์ฒ˜๋กœ ๋ฆฌ์†Œ์Šค๊ฐ€ ์š”์ฒญ๋  ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‘๋‹ต์„ ๊ฑฐ๋ถ€ํ•˜๋Š” ์ •์ฑ…

โ” ์ถœ์ฒ˜

urlimage
  • ์„œ๋ฒ„์˜ ์œ„์น˜๋ฅผ ์˜๋ฏธํ•˜๋Š” URL๋“ค์€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ตฌ์„ฑ ์š”์†Œ(protocol, host, path, query string, fragment)๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

์ฆ‰, ์„œ๋ฒ„๊ฐ€ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•œ ์ถœ์ฒ˜(๊ฐ™์€ ์ถœ์ฒ˜)๊ฐ€ ์•„๋‹Œ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์€ ์ถœ์ฒ˜(๋‹ค๋ฅธ ์ถœ์ฒ˜)์—์„œ ์š”์ฒญํ•  ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ณด์•ˆ์ƒ์˜ ์ด์œ ๋กœ ์‘๋‹ต์„ ๊ฑฐ๋ถ€ํ•˜๋Š” ์ •์ฑ…

2๏ธโƒฃ ๋™์ž‘๋ฐฉ์‹


๊ธฐ๋ณธ์ ์œผ๋กœ ์›น ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•  ๋•Œ๋Š” HTTPํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š”๋ฐ, ์ด๋•Œ Header์— Origin์ด๋ผ๋Š” ํ•„๋“œ์— ์ถœ์ฒ˜๋ฅผ ํ•จ๊ป˜ ๋‹ด์•„๋ณด๋‚ด๊ฒŒ ๋œ๋‹ค.

Origin: https://example.example.io

์ดํ›„ ์„œ๋ฒ„๊ฐ€ ์ด ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ํ•  ๋•Œ Header์˜ Access-Control-Allow-Origin์ด๋ผ๋Š” ๊ฐ’์„ ๋‚ด๋ ค์ฃผ๊ณ , ์ดํ›„ Response๋ฅผ ๋ฐ›์€ ๋ธŒ๋ผ์šฐ์ €๋Š” ์š”์ฒญ์˜ Origin๊ณผ Response์˜ Access-Control-Allow-Origin์„ ๋น„๊ตํ•ด๋ณธ ํ›„ ์œ ํšจํ•œ ์‘๋‹ต์ธ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.

3๏ธโƒฃ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•


  • 3๊ฐ€์ง€์˜ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ ์ด ์ค‘ ์šฐ๋ฆฌ๋Š” ์„œ๋ฒ„์—์„œ Access-Controll-Allow-Origin ํ—ค๋”์— ์•Œ๋งž์€ ๊ฐ’์„ ์„ธํŒ…ํ•ด์ฃผ๋Š” ๋ฒ•์„ ์•Œ์•„๋ณผ๊ฒƒ์ด๋‹ค.

  • ์ด๋•Œ, ์™€์ผ๋“œ์นด๋“œ์ธ *๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ถœ์ฒ˜๋ฅผ ๋ฐ›์•„๋“ค์ธ๋‹ค๋ฉด ํŽธํ•˜๊ฒ ์ง€๋งŒ, ๋ณด์•ˆ์ƒ์œผ๋กœ ๋ณด์•˜์„ ๋•Œ ๋งค์šฐ ์‹ฌ๊ฐํ•œ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ€๊ธ‰์ ์ด๋ฉด ์ถœ์ฒ˜๋ฅผ ๋ช…์‹œํ•ด์ฃผ๋„๋ก ํ•˜์ž

  • express, Django, Spring์™€ ๊ฐ™์ด ์œ ๋ช…ํ•œ ๋ฐฑ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” CORS ์„ธํŒ…์ด๋‚˜ middleware๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋‹ˆ ์†์‰ฝ๊ฒŒ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    express์—์„œ cors ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ์„ธํŒ… ์˜ˆ์‹œ

var express = require("express");
const cors = require("cors");

var app = express();

// Set CORS middlware for all domain
app.use(cors());

//Set CORS middleware with options // limit origin only for livro-frontend server
const specificDomain = ""; // ์ ‘๊ทผ ํ—ˆ์šฉํ•  ์ฃผ์†Œ
const corsOptions = {
  origin: `http://${specificDomain}`,
  credentials: true,
};
app.use(cors(reactServerPath));

Last updated