๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐Ÿ“„ ์›น ๋ธŒ๋ผ์šฐ์ง• ๊ณผ์ •

1. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์—์„œ HTML์„ ๊ฐ€์ ธ์˜ค๊ณ  ํ™”๋ฉด์— ๋ Œ๋”๋งํ•˜๋Š” ๊ณผ์ •์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”โ€‹

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์—์„œ HTML์„ ์–ด๋–ป๊ฒŒ ๊ฐ€์ ธ์˜ค๊ณ , ํ™”๋ฉด์— ์–ด๋–ป๊ฒŒ ๋ Œ๋”๋งํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

1. ์š”์ฒญ ์‹œ์ž‘โ€‹

  • URL ์ž…๋ ฅ: ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— URL์„ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น URL์„ ํŒŒ์‹ฑํ•˜์—ฌ ์–ด๋А ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ผ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • DNS ์กฐํšŒ: ๋ธŒ๋ผ์šฐ์ €๊ฐ€ DNS ์กฐํšŒ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ•ด๋‹น ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
  • ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ: ๋ธŒ๋ผ์šฐ์ €๋Š” ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด HTTP ๋˜๋Š” HTTPS ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ๋กœ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. HTTPS ํ”„๋กœํ† ์ฝœ์ธ ๊ฒฝ์šฐ SSL/TLS ์—ฐ๊ฒฐ๋„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2. ์„œ๋ฒ„ ์‘๋‹ตโ€‹

  • ์š”์ฒญ ์ฒ˜๋ฆฌ: ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๋ฉด, ์š”์ฒญ ๊ฒฝ๋กœ์™€ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ต๋‹ˆ๋‹ค.
  • Response ์ „์†ก: ์ดํ›„ HTML ํŒŒ์ผ์„ HTTP Response์˜ ์ผ๋ถ€๋กœ ๋ธŒ๋ผ์šฐ์ €์— ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Response์—๋Š” ์ƒํƒœ ์ฝ”๋“œ๋‚˜ ๊ธฐํƒ€ ๋งค๊ฐœ๋ณ€์ˆ˜(CORS, content-type ๋“ฑ)๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

3. HTML ํŒŒ์‹ฑโ€‹

  • DOM Tree ๊ตฌ์ถ•: ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML ํŒŒ์ผ์„ ์ฝ๊ธฐ ์‹œ์ž‘ํ•˜๋ฉฐ, HTML ํŒŒ์ผ์˜ ํƒœ๊ทธ์™€ ์†์„ฑ์— ๋”ฐ๋ผ DOM์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— DOM Tree๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•˜์œ„ ๋ฆฌ์†Œ์Šค ์š”์ฒญ(requesting subresources): HTML ํŒŒ์ผ์„ ํŒŒ์‹ฑํ•˜๋Š” ๊ณผ์ •์—์„œ CSS, JavaScript, ์ด๋ฏธ์ง€ ๋“ฑ์˜ ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„์— ์ถ”๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

4. ํŽ˜์ด์ง€ ๋ Œ๋”๋ง(Render Page)โ€‹

  • CSSOM Tree ๊ตฌ์ถ•: ๋ธŒ๋ผ์šฐ์ €๊ฐ€ CSS ํŒŒ์ผ์„ ํŒŒ์‹ฑํ•˜์—ฌ CSSOM Tree๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.
  • Render Tree: ๋ธŒ๋ผ์šฐ์ €๊ฐ€ DOM Tree์™€ CSSOM Tree๋ฅผ ํ•ฉ์ณ Render Tree๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ํŠธ๋ฆฌ์—๋Š” ๋ Œ๋”๋งํ•  ๋ชจ๋“  ๋…ธ๋“œ์™€ ํ•ด๋‹น ์Šคํƒ€์ผ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • Layout(๋ ˆ์ด์•„์›ƒ): ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ ˆ์ด์•„์›ƒ(Layout ๋˜๋Š” Reflow)์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๊ฐ ๋…ธ๋“œ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  • Paint(ํŽ˜์ธํŒ…): ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŽ˜์ธํŒ…(painting) ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ๊ฐ ๋…ธ๋“œ์˜ ๋‚ด์šฉ์„ ํŽ˜์ด์ง€์— ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

5. JavaScript ์ƒํ˜ธ์ž‘์šฉโ€‹

  • JavaScript ์‹คํ–‰: HTML์— JavaScript๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ DOM์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์Šคํƒ€์ผ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ „์ฒด ๊ณผ์ •์€ ์ ์ง„์ ์œผ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๋ก ์ ์œผ๋กœ ์‚ฌ์šฉ์ž๋Š” ๋จผ์ € ์ผ๋ถ€ ์›น ํŽ˜์ด์ง€ ๋‚ด์šฉ์„ ๋ณด๊ณ , ๋งˆ์ง€๋ง‰์— ์ „์ฒด ์›น ํŽ˜์ด์ง€๋ฅผ ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ์˜ Reflow์™€ Repaint๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠนํžˆ ๋ณต์žกํ•œ ์Šคํƒ€์ผ์ด๋‚˜ ์ธํ„ฐ๋ž™์…˜ ํšจ๊ณผ๊ฐ€ ์žˆ๋Š” ์›น ํŽ˜์ด์ง€์—์„œ ๋‘๋“œ๋Ÿฌ์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ ๋ธŒ๋ผ์šฐ์ € ์ž์ฒด์˜ ์ตœ์ ํ™” ์™ธ์—๋„ ๊ฐœ๋ฐœ์ž๋Š” ๋ณดํ†ต ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋” ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

2. Reflow์™€ Repaint๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”โ€‹

Reflow(๋ฆฌํ”Œ๋กœ์šฐ)โ€‹

์›น ํŽ˜์ด์ง€์˜ DOM์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒจ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์š”์†Œ์˜ ์œ„์น˜๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ๋ฐฐ์น˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, Layout์„ ๋‹ค์‹œ ์ƒ์„ฑํ•˜์—ฌ ์š”์†Œ๋ฅผ ์žฌ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Reflow ๋ฐœ์ƒ ์กฐ๊ฑดโ€‹

Reflow๋Š” ๋‘ ๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ์ „์ฒด ํŽ˜์ด์ง€์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒƒ์ด๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์ผ๋ถ€ ์ปดํฌ๋„ŒํŠธ ์˜์—ญ์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ํŽ˜์ด์ง€ ์ดˆ๊ธฐ ์ง„์ž… ์‹œ๊ฐ€ ๊ฐ€์žฅ ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” Reflow์ž…๋‹ˆ๋‹ค
  • DOM ์š”์†Œ ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œ
  • ์š”์†Œ์˜ ํฌ๊ธฐ ๋ณ€๊ฒฝ, ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด์šฉ ์ถ”๊ฐ€๋‚˜ ๊ธ€์ž ํฌ๊ธฐ ๋ณ€๊ฒฝ ๋“ฑ
  • ์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ ์กฐ์ •, ์˜ˆ๋ฅผ ๋“ค์–ด margin์ด๋‚˜ padding์„ ํ†ตํ•œ ์ด๋™
  • ๋ธŒ๋ผ์šฐ์ € ์ž์ฒด์˜ ์ฐฝ ํฌ๊ธฐ ๋ณ€๊ฒฝ
  • ์˜์‚ฌ ํด๋ž˜์Šค ํŠธ๋ฆฌ๊ฑฐ, ์˜ˆ๋ฅผ ๋“ค์–ด hover ํšจ๊ณผ

Repaint(๋ฆฌํŽ˜์ธํŠธ)โ€‹

Layout์˜ ๋ณ€๊ฒฝ ์—†์ด ์ˆœ์ˆ˜ํ•˜๊ฒŒ ์š”์†Œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์š”์†Œ ์ž์ฒด๊ฐ€ Layout์— ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, Reflow๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฐ˜๋“œ์‹œ Repaint๋„ ๋ฐœ์ƒํ•˜์ง€๋งŒ, Repaint๋งŒ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ฐ˜๋“œ์‹œ Reflow๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

Repaint ๋ฐœ์ƒ ์กฐ๊ฑดโ€‹

  • ์š”์†Œ์˜ ์ƒ‰์ƒ์ด๋‚˜ ๋ฐฐ๊ฒฝ ๋ณ€๊ฒฝ, ์˜ˆ๋ฅผ ๋“ค์–ด color๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ background ์†์„ฑ์„ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ ๋“ฑ
  • ์š”์†Œ์˜ ๊ทธ๋ฆผ์ž๋‚˜ border๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ๋„ Repaint์— ํ•ด๋‹น

Reflow ๋˜๋Š” Repaint ์ตœ์ ํ™” ๋ฐฉ๋ฒ•โ€‹

  • table ๋ ˆ์ด์•„์›ƒ์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”. table ์†์„ฑ์€ ์†์„ฑ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ๋ ˆ์ด์•„์›ƒ์ด ์žฌ๋ฐฐ์น˜๋˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋ถ€๋“์ดํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, ๋งค๋ฒˆ ํ•œ ํ–‰๋งŒ ๋ Œ๋”๋งํ•˜๋„๋ก ๋‹ค์Œ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ „์ฒด ํ…Œ์ด๋ธ” ๋ฒ”์œ„์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ํ•˜์„ธ์š”. ์˜ˆ: table-layout: auto; ๋˜๋Š” table-layout: fixed;
  • DOM์„ ์ง์ ‘ ์กฐ์ž‘ํ•˜์—ฌ ์Šคํƒ€์ผ์„ ํ•˜๋‚˜์”ฉ ์กฐ์ •ํ•˜์ง€ ๋ง๊ณ , ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ์Šคํƒ€์ผ์„ class๋กœ ์ •์˜ํ•œ ํ›„ JS๋ฅผ ํ†ตํ•ด ์ „ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • Vue ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์˜ˆ๋กœ ๋“ค๋ฉด, class ๋ฐ”์ธ๋”ฉ ๋ฐฉ์‹์œผ๋กœ ์Šคํƒ€์ผ์„ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, function์œผ๋กœ ์ง์ ‘ ์Šคํƒ€์ผ์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์€ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ž์ฃผ ์ „ํ™˜์ด ํ•„์š”ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค, ์˜ˆ๋ฅผ ๋“ค์–ด ํƒญ ์ „ํ™˜์˜ ๊ฒฝ์šฐ, v-if๋ณด๋‹ค v-show๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ „์ž๋Š” CSS์˜ display: none; ์†์„ฑ๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ์ˆจ๊ธฐ์ง€๋งŒ, ํ›„์ž๋Š” ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜์—ฌ ์š”์†Œ๋ฅผ ์žฌ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์†Œ๋ฉธ์‹œํ‚ค๋ฏ€๋กœ ๋” ํฐ ์„ฑ๋Šฅ ์†Œ๋น„๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ๋ถ€๋“์ดํ•˜๊ฒŒ Reflow๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, requestAnimationFrame์„ ํ†ตํ•ด ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด API๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์–ด ๋ธŒ๋ผ์šฐ์ €์˜ ํ”„๋ ˆ์ž„ ์†๋„์™€ ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค). ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์—ฌ๋Ÿฌ ๋ฒˆ์˜ Reflow๋ฅผ ํ•œ ๋ฒˆ์œผ๋กœ ํ•ฉ์น˜๊ณ  Repaint ํšŸ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด ํŠน์ • ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ํŽ˜์ด์ง€์—์„œ ๋ชฉํ‘œ๋ฅผ ํ–ฅํ•ด ์ด๋™ํ•ด์•ผ ํ•  ๋•Œ, requestAnimationFrame์„ ํ†ตํ•ด ๋งค๋ฒˆ์˜ ์ด๋™์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, CSS3์˜ ์ผ๋ถ€ ์†์„ฑ์€ ํด๋ผ์ด์–ธํŠธ ์ธก ํ•˜๋“œ์›จ์–ด ๊ฐ€์†์„ ํŠธ๋ฆฌ๊ฑฐํ•˜์—ฌ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ: transform opacity filters Will-change
  • ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ํ•˜์œ„ ๋ ˆ๋ฒจ์˜ DOM ๋…ธ๋“œ์—์„œ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ•˜์—ฌ, ๋ถ€๋ชจ ์š”์†Œ์˜ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ๋ชจ๋“  ํ•˜์œ„ ์š”์†Œ๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์„ธ์š”.
  • ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์ ˆ๋Œ€ ์œ„์น˜(absolute, fixed) ์š”์†Œ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ์š”์†Œ์— ๋Œ€ํ•œ ์˜ํ–ฅ์ด ์ ์œผ๋ฉฐ, Repaint๋งŒ ํŠธ๋ฆฌ๊ฑฐํ•˜์—ฌ Reflow๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Exampleโ€‹

// bad
const element = document.querySelector('.wrapper');
element.style.margin = '4px';
element.style.padding = '6px';
element.style.borderRadius = '10px';
// good
.update {
margin: 4px;
padding: 6px;
border-radius: 10px;
}

const element = document.querySelector('.wrapper');
element.classList.add('update');

Referenceโ€‹

3. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์— OPTIONS ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์‹œ์ ์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”โ€‹

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์–ธ์ œ ์„œ๋ฒ„์— OPTIONS ์š”์ฒญ์„ ๋ณด๋‚ด๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ, CORS ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์ „์— preflight(์‚ฌ์ „ ๊ฒ€์‚ฌ) ๊ณผ์ •์ด ์žˆ์œผ๋ฉฐ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋จผ์ € OPTIONS ์š”์ฒญ์„ ๋ณด๋‚ด ์„œ๋ฒ„๊ฐ€ ์ด ๊ต์ฐจ ์ถœ์ฒ˜ ์š”์ฒญ์„ ํ—ˆ์šฉํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ํ—ˆ์šฉํ•œ๋‹ค๊ณ  ์‘๋‹ตํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹ค์ œ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

๋˜ํ•œ, ์š”์ฒญ์˜ method๊ฐ€ GET, HEAD, POST๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋„ OPTIONS ์š”์ฒญ์ด ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.