๊ธฐ์ˆ  ๋ฉด์ ‘

CORS์™€ Preflight์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๐ŸŒŠwave 2025. 3. 2. 15:14

Q1. CORS๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?
CORS(Cross-Origin Resource Sharing)๋Š” ๋‹ค๋ฅธ ์ถœ์ฒ˜(๋„๋ฉ”์ธ, ํ”„๋กœํ† ์ฝœ, ํฌํŠธ) ๊ฐ„ ๋ฆฌ์†Œ์Šค ๊ณต์œ ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. SOP ์ •์ฑ…์œผ๋กœ ์ฐจ๋‹จ๋œ ๊ต์ฐจ ์ถœ์ฒ˜ ์š”์ฒญ์„ ์„œ๋ฒ„์˜ CORS ํ—ค๋” ์„ค์ •์„ ํ†ตํ•ด ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฏธ์„ค์ • ์‹œ ๋ธŒ๋ผ์šฐ์ €์—์„œ CORS ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.


Q2. SOP๊ฐ€ ๋ฌด์—‡์ด๋ฉฐ ์™œ ํ•„์š”ํ•œ๊ฐ€์š”?
SOP(Same-Origin Policy)๋Š” ๋™์ผ ์ถœ์ฒ˜(ํ”„๋กœํ† ์ฝœ, ๋„๋ฉ”์ธ, ํฌํŠธ ์ผ์น˜)์˜ ๋ฆฌ์†Œ์Šค๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ œํ•œํ•˜๋Š” ๋ณด์•ˆ ์ •์ฑ…์ž…๋‹ˆ๋‹ค. ํƒ€ ๋„๋ฉ”์ธ์˜ ๋ฆฌ์†Œ์Šค ๋ฌด๋‹จ ์ ‘๊ทผ์„ ๋ฐฉ์ง€ํ•ด XSS, CSRF ๋“ฑ์˜ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์˜ˆ๋ฐฉํ•ฉ๋‹ˆ๋‹ค.


Q3. SOP๊ฐ€ ์—†์œผ๋ฉด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ ์€?
์ฟ ํ‚ค์˜ ์„ธ์…˜ ID ํƒˆ์ทจ๋กœ ์ธํ•œ XSS, CSRF ๊ณต๊ฒฉ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค. SOP๋Š” ํƒ€ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ์„ ์ฐจ๋‹จํ•ด ์ด๋Ÿฌํ•œ ๊ณต๊ฒฉ์„ ์›์ฒœ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.


Q4. CORS ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์„ค๋ช…ํ•˜์„ธ์š”

  1. ์„œ๋ฒ„๋Š” Access-Control-Allow-Origin ๋“ฑ์˜ ํ—ค๋”๋กœ ํ—ˆ์šฉ ์ถœ์ฒ˜, ๋ฉ”์„œ๋“œ, ํ—ค๋”๋ฅผ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ธŒ๋ผ์šฐ์ €๋Š” ์š”์ฒญ ์ „ํ—ค๋”๋ฅผ ๊ฒ€์ฆํ•ด ์ฐจ๋‹จ ๋˜๋Š” ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ณต์žกํ•œ ์š”์ฒญ(์˜ˆ: PUT, ์‚ฌ์šฉ์ž ์ •์˜ ํ—ค๋”)์€ Preflight ์š”์ฒญ์œผ๋กœ ์‚ฌ์ „ ์Šน์ธ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

Q5. Preflight ์š”์ฒญ์ด๋ž€?
์‹ค์ œ ์š”์ฒญ ์ „ ์„œ๋ฒ„์˜ CORS ์ •์ฑ…์„ ํ™•์ธํ•˜๋Š” OPTIONS ๋ฉ”์„œ๋“œ ์‚ฌ์ „ ์š”์ฒญ์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ/ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ๋ณธ ์š”์ฒญ์„ ์ฐจ๋‹จํ•ด ๋ถˆํ•„์š”ํ•œ ํŠธ๋ž˜ํ”ฝ์„ ์ค„์ž…๋‹ˆ๋‹ค.


Q6. ๋ชจ๋“  CORS ์š”์ฒญ์— Preflight๊ฐ€ ๋ฐœ์ƒํ•˜๋‚˜์š”?
์•„๋‹™๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ฒฝ์šฐ์—” Preflight๊ฐ€ ์ƒ๋žต๋ฉ๋‹ˆ๋‹ค:

  • ๋‹จ์ˆœ ์š”์ฒญ: GET, HEAD, POST + ํŠน์ • ํ—ค๋”(์˜ˆ: Content-Type: text/plain)๋งŒ ์‚ฌ์šฉ ์‹œ
  • ์บ์‹ฑ: ์ด์ „ Preflight ์‘๋‹ต์ด Access-Control-Max-Age ๊ธฐ๊ฐ„ ๋‚ด์— ์บ์‹œ๋œ ๊ฒฝ์šฐ

Q7. ๋‹จ์ˆœ ์š”์ฒญ์˜ ์กฐ๊ฑด์€?

  1. ๋ฉ”์„œ๋“œ: GET, HEAD, POST ์ค‘ ํ•˜๋‚˜
  2. ํ—ค๋”: Accept, Accept-Language, Content-Language, Content-Type(๊ฐ’: application/x-www-form-urlencoded, multipart/form-data, text/plain)
  3. ์‚ฌ์šฉ์ž ์ •์˜ ํ—ค๋” ๋ฏธ์‚ฌ์šฉ