junbin2 2025. 1. 23. 15:11

SOP์™€ CORS๋Š” ์›น ๊ด€๋ จ ๊ธฐ์ˆ ์„ ํ‘œ์ค€ํ™” ํ•ด์ฃผ๋Š” IETF(Internet Engineering Task Force) ๊ตญ์ œ ์ธํ„ฐ๋„ท ํ‘œ์ค€ํ™” ๊ธฐ๊ตฌ์—์„œ SOP์™€ CORS๋ฅผ ํ‘œ์ค€์œผ๋กœ์จ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค. ์ฆ‰, ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์ด ํ‘œ์ค€์„ ๋ฒ•์ ์œผ๋กœ ์ง€์ผœ์•ผ ํ•  ์˜๋ฌด๊ฐ€ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
๊ฒฐ๋ก ์€ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ SOP์™€ CORS์— ๋Œ€ํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž„. ๊ผญ ๋ฐฐ์›Œ์•ผ ํ•จ.
 

SOP ( Same-Origin Policy )

Same Origin Policy๋Š” "๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…" ์ด๋ผ๋Š” ์˜๋ฏธ๋กœ ํ•ด์„์ด ๋จ.
๋จผ์ € SOP๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Same-Origin Policy์—์„œ Origin์„ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค.
 
Origin
console.log(location.origin) ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜๊ฒŒ ๋˜๋ฉด ํ˜„์žฌ ์‚ฌ์ดํŠธ์˜ Origin(์ถœ์ฒ˜)์— ๋Œ€ํ•œ ์‚ฌ์ดํŠธ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

console.log(location.origin); // ํ˜„์žฌ ์‚ฌ์ดํŠธ์˜ Origin(์ถœ์ฒ˜)๋ฅผ ์•Œ์•„๋‚ด๋Š” ๋ช…๋ น์–ด
chrome://new-tab-page // -> ๊ฒฐ๊ณผ

์œ„์˜ ๊ฒฐ๊ณผ๋Š” ๋ธŒ๋ผ์šฐ์ €์— ์ฒ˜์Œ ๋“ค์–ด๊ฐ”์„ ๋•Œ ๋‚˜์˜ค๋Š” ๊ฒฐ๊ณผ์ด๋‹ค. ( ์ด์ œ ๋„ค์ด๋ฒ„๋กœ ๋“ค์–ด๊ฐ€ ๋ณผ ๊ฒƒ์ด๋‹ค. )

console.log(location.origin)
https://www.naver.com

๋„ค์ด๋ฒ„์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด ํ˜„์žฌ ์‚ฌ์ดํŠธ์ธ ๋„ค์ด๋ฒ„์˜ ์ถœ์ฒ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
 
"์ •๋ฆฌํ•˜๋ฉด, Origin(์ถœ์ฒ˜)๋Š” ๋‹จ์ˆœํžˆ ๋‚ด๊ฐ€ ํ˜„์žฌ ์ ‘์†ํ•˜๊ณ  ์žˆ๋Š” ์„œ๋ฒ„์˜ ๋„๋ฉ”์ธ์„ ์˜๋ฏธํ•œ๋‹ค."
 
์ด์ œ Origin์„ ์•Œ์•„ ๋ดค์œผ๋‹ˆ, SOP๋ฅผ ์•Œ์•„๋ณผ ์ฐจ๋ก€์ด๋‹ค.
 
SOP(๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…)์€ ๋™์ผํ•œ ์ถœ์ฒ˜์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๊ณ , ๋‹ค๋ฅธ ์ถœ์ฒ˜์— ๋Œ€ํ•ด์„œ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์—†๋Š” ์ •์ฑ…์ด๋ฉฐ, ์ถœ์ฒ˜๋Š” ํ”„๋กœํ† ์ฝœ, ๋„๋ฉ”์ธ, ํฌํŠธ ์ „์ฒด๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹น์ด ๋œ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด, "https://test.com:8080" ์—์„œ "https://test.com:8080/user"๋กœ ์š”์ฒญ์„ ๋ณด๋ƒˆ์„ ๋•Œ ํ”„๋กœํ† ์ฝœ, ๋„๋ฉ”์ธ, ํฌํŠธ ์ „์ฒด๊ฐ€ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•œ ์ถœ์ฒ˜๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
 

CORS (Cross-Origin Resource Sharing)

SOP๋Š” ๋™์ผํ•œ ์ถœ์ฒ˜ ์ผ ๊ฒฝ์šฐ์—๋งŒ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์ง€๋งŒ, ์ด๋Ÿฌํ•œ ์ •์ฑ… ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์ถœ์ฒ˜์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค ๊ณต์œ ์— ๋Œ€ํ•ด ๋ถˆํŽธํ•จ์ด ์กด์žฌํ•˜์—ฌ ์˜ˆ์™ธ ์กฐํ•ญ์„ ๊ฐ™์ด ๋„ฃ๊ฒŒ ๋œ๋‹ค. ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค ์š”์ฒญ์ด๋ผ๋„ ์ด ์กฐํ•ญ์— ํ•ด๋‹นํ•  ๊ฒฝ์šฐ์—๋Š” ํ—ˆ์šฉ์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๊ฒƒ์ด CORS ์ •์ฑ…์„ ์ง€ํ‚จ ๋ฆฌ์†Œ์Šค ์š”์ฒญ์ด๋‹ค.
 
CORS๋Š” ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ ์— ๋Œ€ํ•œ ํ—ˆ์šฉ ๋ฐ ๋น„ํ—ˆ์šฉ์— ๋Œ€ํ•œ ์ •์ฑ…์„ ์˜๋ฏธํ•œ๋‹ค.
 
๋ณด์•ˆ์ƒ์œผ๋กœ๋Š” ์™ธ๋ถ€ ํŽ˜์ด์ง€์—์„œ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๊ฐ•์ œ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€๋งŒ, ๊ทธ ์™ธ๋ถ€ ํŽ˜์ด์ง€๊ฐ€ ๋ณด์ฆ์ด ๋˜์–ด์žˆ๋Š” ํŽ˜์ด์ง€๋ผ๋ฉด ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„๊ณผ ๋‹ค๋ฅธ ์ถœ์ฒ˜๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— CORS๋Š” ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
 
 
 
ํ•ต์‹ฌ ๋‚ด์šฉ
SOP์™€ CORS๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๊ด€๋ จ๋œ ๋ณด์•ˆ ์ •์ฑ…์ด๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ api ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ํ˜„์žฌ ์ถœ์ฒ˜์™€ ์ •์ฑ…๊ณผ ์•ˆ๋งž์œผ๋ฉด ๋™์ผํ•œ ์ถœ์ฒ˜๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๊ฒŒ ๋œ๋‹ค.

์ฆ‰, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ์˜ ์ ‘์†์ด๋‚˜ ๋ชจ๋“  ์š”์ฒญ์—์„œ ์ถœ์ฒ˜๋ฅผ ๋จผ์ € ํ™•์ธํ•˜๊ณ  ์ถœ์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋„๋ฉ”์ธ ํ”„๋กœํ† ์ฝœ ๋“ฑ ๋‹ค๋ฅธ ์ถœ์ฒ˜๋กœ ์š”์ฒญ์„ ๋ง‰์€๊ฒƒ์ด๊ณ , ์ด๋•Œ ๋‹ค๋ฅธ ์ถœ์ฒ˜๋กœ์˜ ์š”์ฒญ์— CORS๊ฐ€ ๋œจ๋ฉด์„œ CORS ์„ค์ •์„ ํ•ด์•ผ ๋œ๋‹ค๊ณ  ๋‚˜ํƒ€๋‚ด๋Š”๊ฒƒ์ด๋‹ค. Cors๋Š” sop์— ๋Œ€ํ•ด ํ—ˆ์šฉ ๋ฐ ๋น„ํ—ˆ์šฉ์„ ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ๋„์›€์„ ์ฃผ๋Š” ์ •์ฑ…์ด๋‹ค.

์ •๋ฆฌํ•˜๋ฉด, ๋‚ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ SOP์ •์ฑ…์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด ์ž๋™์œผ๋กœ ๋„์šฐ๋Š”๊ฒƒ์ด๋‹ค. ์š”์ฒญ์€ ์ž˜ ๊ฐ€๊ณ  ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ € ์ƒ์—์„œ Response๋ฅผ ์ฐจ๋‹จํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์„œ๋ฒ„๊ฐ€ CORS ์„ค์ •(Access-Control-Allow-Origin)์„ response ํ—ค๋”์— ๋‹ด์•„์„œ ๋ณด๋‚ด์ฃผ๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‘๋‹ต ํ—ค๋”๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๊ณผ์ •์—์„œ ํ—ค๋‹น ํ—ค๋”๋ฅผ ๋ณด๊ณ  Cors์ •์ฑ…์ด ํ™•์ธ์ด ๋˜๋ฉฐ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค.

๋ฐ˜๋Œ€๋กœ ์ƒ๊ฐํ•˜๋ฉด cors์„ค์ •์ด ๋˜์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ์‘๋‹ต ๊ณผ์ •์—์„œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ—ค๋”๋ฅผ ๊ฒ€์‚ฌํ•  ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š”๊ฒƒ์ด๋‹ค.