CORS๋ž€?

๐Ÿ’ก
์‰ฝ๊ฒŒ ๋งํ•ด ๋ฐ์ดํ„ฐ ์š”์ฒญ์˜ ์ œํ•œ ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค
CORS(Cross Origin Resource Sharing)์˜ ๊ธฐ๋Šฅ์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์—์„œ ์–ด๋– ํ•œ ์š”์ฒญ์ž์— ์˜ํ•ด ํ—ˆ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ธฐ์ค€์— ์˜ํ•ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์š”์ฒญ์„ ํ• ์ง€ ์š”์ฒญ์„ ํ•˜์ง€ ์•Š์„์ง€์— ๋Œ€ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜
ย 

์™œ ๊ตณ์ด ๋ถˆํŽธํ•˜๊ฒŒ ์ œ์•ฝ์„ ๋‘๋Š”๊ฐ€?


๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ผ๋Š”๊ฒƒ์„ ๋Œ€๋ถ€๋ถ„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค
์—ฌ๊ธฐ์„œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์–ด๋–ค ์„œ๋ฒ„๋กœ ์–ด๋–ค ์š”์ฒญ์„ ๋ณด๋ƒˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค
๊ฐ€๋ น ๋‚ด ๋ธ”๋กœ๊ทธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณธ๋‹ค๋ฉด
notion image
์š”์ฒญํ•œ URL,Method,Payload ๋“ฑ์˜ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ๋ณด์ธ๋‹ค
์ด๊ฑธ ์ด์šฉํ•ด์„œ ๋˜‘๊ฐ™์ด ์š”์ฒญํ•˜๋ฉด?
notion image
๋‚ด ๋ธ”๋กœ๊ทธ์˜ ๋˜‘๊ฐ™์€ ๋ฐ์ดํ„ฐ๋“ค์„ ๊ฐ€์ ธ์˜ฌ์ˆ˜ ์žˆ๊ฒŒ ๋œ๊ฑฐ๊ณ  https://juny-biog.vercel.app์™€ ๊ฐ™์ด blog์˜ l ๋ถ€๋ถ„์„ i๋กœ ๋ฐ”๊พผ ๋„๋ฉ”์ธ์„ ๋งŒ๋“ค๊ณ  ๋‚ด ์‚ฌ์ดํŠธ๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“ค์ˆ˜ ์žˆ์„๊ฒƒ์ด๋‹ค
์ฆ‰! juny-blog๊ฐ€ ์š”์ฒญ์„ ํ–ˆ์„๋•Œ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ฒŒ๋” ํ•˜๋Š”๊ฒƒ์ด์ง€ juny-biog๊ฐ€ ์š”์ฒญ์„ ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ฑฐ์ ˆํ•˜๊ฒŒ๋” ํ•˜๋Š”๊ฒƒ์ด๋‹ค
Cors ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์ƒ๊ธฐ๊ธฐ์ „์—๋Š” ์ด์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์€ํ–‰๋“ฑ ๊ธˆ์œต์‚ฌ์ดํŠธ๋ฅผ ๋ณต์ œํ•ด์„œ ์ด๋Ÿฐ ์‚ฌ๊ธฐ๋ฅผ ๋งŽ์ด์ณค๋˜ ์‚ฌ๋ก€๋“ค์ด ์žˆ์—ˆ๋‹ค
ย 

CORS์˜ ์ œ์•ฝ


CORS์˜ ์ œ์•ฝ์€ ๋„๋ฉ”์ธ ์™ธ์—๋„ ์กด์žฌํ•œ๋‹ค
  1. ๋„๋ฉ”์ธ์ด ๋‹ค๋ฅผ๊ฒฝ์šฐ
  1. ํฌํŠธ๊ฐ€ ๋‹ค๋ฅผ ๊ฒฝ์šฐ โ†’ 8080 , 9090
  1. ํ”„๋กœํ† ์ฝœ์ด ๋‹ค๋ฅผ๊ฒฝ์šฐ โ†’ http , https
์ฆ‰ URL์—์„œ 3๊ฐœ์˜ ์š”์†Œ์ด๋‹ค protocol, domain, port
์•„๋งˆ Origin ์ด๋ผ๋Š” ๋œป์€ ์ € 3๊ฐœ๋ฅผ ํ•ฉ์นœ๋ง ์ธ๊ฒƒ ๊ฐ™๋‹ค
mdn์— ๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ๊นŒ origin ย ์ด๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๋Š” url์ผ ๊ฒฝ์šฐ 3๊ฐœ์˜ ์š”์†Œ๋ฅผ ํ•ฉ์นœ ๋ฌธ์ž์—ด์„ ๋ฆฌํ„ดํ•˜๊ธฐ๋„ํ•˜๊ณ .. ๊ทธ๋ƒฅ ๋‚ด ์ƒ๊ฐ
notion image
notion image

CORS๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•


์„œ๋ฒ„์—์„œ ๋™์˜๋ฅผ ํ•˜๋ƒ ์•ˆํ•˜๋ƒ์— ๋”ฐ๋ผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์š”์ฒญ์„ ๊ฑฐ์ ˆํ• ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ํ–ˆ๋‹ค
์„œ๋ฒ„์—์„œ cors๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๋ƒ ํ•˜๋ฉด ๊ทธ๊ฑด ์„œ๋ฒ„๋งˆ๋‹ค ์„ค์ •์ด ๋‹ค๋ฅด๊ธฐ์— ๋‹ค ์ฐพ์•„๋ด์•ผํ•œ๋‹ค..
๋‚ด๊ฐ€ ์“ธ๋•Œ๋งˆ๋‹ค ์—ฌ๊ธฐ๋‹ค๊ฐ€ ์ ์–ด๋†“์œผ๋ ค๊ณ  ํ•œ๋‹ค

node.js & express


๋…ธ๋“œ๋Š” cors๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋”ฐ๋กœ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค
$ npm i cors
import * as cors from 'cors'; import * as app from 'express'; // ๋ชจ๋“  ์š”์ฒญ์„ ํ—ˆ์šฉํ• ๋•Œ app.use(cors()) // juny-blog.vercel.app ๋งŒ ํ—ˆ์šฉํ• ๋•Œ app.use(cors( 'origin' : 'https://juny-blog.vercel.app', 'credentials' : true ))
origin ํ‚ค ๊ฐ’์—๋‹ค๊ฐ€ () => bool , new Error ๋กœ ๋ณต์ˆ˜๊ฐœ์˜ corsํ—ˆ์šฉ ๋˜๋Š” ์˜ˆ์™ธ ๋ฌธ๊ตฌ๋„ ํ• ์ˆ˜ ์žˆ์œผ๋‹ˆ https://www.npmjs.com/package/cors ์ž์„ธํ•œ๊ฑด ์œ„์˜ url ์ฐธ์กฐ
ย 

์ด์–ด์„œ ๋ณด์ถฉํ•  ๋‚ด์šฉโ€ฆ


์š”์ฒญ๊ณผ ์‘๋‹ต Headers์— ํ—ˆ์šฉ๊ด€๋ จ header๊ฐ€ ๋งŽ์•˜๋Š”๋ฐ ํ•œ๋ฒˆ ๋‹ค ์‚ดํŽด์„œ ์ •๋ฆฌํ•˜๊ธฐโ€ฆ
๋Œ“๊ธ€ 0๊ฐœ

๋“ฑ๋ก๋œ ๋Œ“๊ธ€์ด ํ•˜๋‚˜๋„ ์—†์Šต๋‹ˆ๋‹ค...๐Ÿ˜ข