SOP & CORS

2025. 1. 23. 15:11ยท๐ŸŒ Network/๐Ÿ“œHTTP

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์„ค์ •์ด ๋˜์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ์‘๋‹ต ๊ณผ์ •์—์„œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ—ค๋”๋ฅผ ๊ฒ€์‚ฌํ•  ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š”๊ฒƒ์ด๋‹ค.

'๐ŸŒ Network > ๐Ÿ“œHTTP' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[HTTP] ์›น ํƒ„์ƒ ๋ฐฐ๊ฒฝ  (1) 2024.12.18
[HTTP] HTTP๋ž€?  (1) 2024.12.18
[HTTP] WebSocket  (3) 2024.12.08
[HTTP] CSR & SSR ์ด๋ž€?  (1) 2024.11.14
(HTTP) Stateless, Stateful  (3) 2024.04.26
'๐ŸŒ Network/๐Ÿ“œHTTP' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [HTTP] ์›น ํƒ„์ƒ ๋ฐฐ๊ฒฝ
  • [HTTP] HTTP๋ž€?
  • [HTTP] WebSocket
  • [HTTP] CSR & SSR ์ด๋ž€?
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด๋ณด๊ธฐ (155)
      • ๐ŸŽ“๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต (26)
        • ๐Ÿ–ฅ๏ธ์ปดํ“จํ„ฐ๊ณผํ•™๊ณผ (1)
        • ๐ŸŒ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ… (11)
        • โš™๏ธ์ปดํ“จํ„ฐ์˜ ์ดํ•ด (11)
        • ๐Ÿ›๏ธ์„ธ๊ณ„์˜์ •์น˜์™€๊ฒฝ์ œ (3)
      • ๐Ÿ› ๏ธBackend (52)
        • ๐Ÿ“š๋ฐฑ์—”๋“œ ๊ณต๋ถ€ (4)
        • โ˜•Java (21)
        • ๐ŸŒณSpring (11)
        • โšกPython (13)
        • JavaScript (1)
        • ๐Ÿ›ข๏ธDatabase (0)
        • Algorithm Problem Solving (2)
      • ๐ŸŒ Network (7)
        • ๐Ÿ“œHTTP (7)
      • ๐Ÿš€DevOps (1)
      • Data Structure (1)
      • โ›บ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ (65)
      • ์ •๋ณด (1)
      • ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ธ€ (2)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • GitHub
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์ž…์ถœ๋ ฅ
    ๋ฐฉํ†ต๋Œ€
    Spring Framework
    ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ…๊ฐœ๋ก 
    ์ปดํŒŒ์ผ๋Ÿฌ
    ๋‹คํ˜•์„ฑ
    ์„ธ๊ณ„ํ™”
    Python
    ํด๋ž˜์Šค
    ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต
    ์Šคํ”„๋ง
    spring
    ํŒŒ์ด์ฌ
    ์œ ๋น„์ฟผํ„ฐ์Šค
    Java
    ๋ฐฉ์†ก๋Œ€
    ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ…
    ์ปดํ“จํ„ฐ์˜ ์ดํ•ด
    ์ž๋ฐ”
    ํด๋ผ์šฐ๋“œ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.1
junbin2
SOP & CORS
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”