๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ์ค‘ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚  ๋•Œ ํŒŒ์‹ฑ์ด ์ค‘๋‹จ๋˜๋Š” ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ

๋ Œ๋”๋ง ์—”์ง„์€ HTML ํ•œ ์ค„์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ํŒŒ์‹ฑํ•˜๋ฉฐ DOM์„ ์ƒ์„ฑํ•ด ๋‚˜๊ฐ€๋‹ค๊ฐ€ JavaScript๋ฅผ ๋งŒ๋‚˜๋ฉด DOM ์ƒ์„ฑ์„ ์ž„์‹œ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. DOM ์ƒ์„ฑ์„ ์ž„์‹œ ์ค‘๋‹จํ•˜๊ณ , ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ํŒŒ์‹ฑํ•˜๊ธฐ ์œ„ํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์ œ์–ด๊ถŒ์„ ๋„˜๊ธฐ๊ฒŒ ๋˜๋Š”๋ฐ, ํŒŒ์‹ฑ์ด ๋๋‚˜๋ฉด ๋‹ค์‹œ ๋ Œ๋”๋ง ์—”์ง„์— ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ ์ค‘๋‹จ๋œ ๋ถ€๋ถ„๋ถ€ํ„ฐ HTML ํŒŒ์‹ฑ์„ ์žฌ๊ฐœํ•˜๋ฉฐ DOM ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
DOM์„ ์ƒ์„ฑํ•ด ๋‚˜๊ฐ€๋‹ค๊ฐ€ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚  ๋•Œ ํŒŒ์‹ฑ์ด ์ค‘๋‹จ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ ๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. async๋‚˜ defer ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์Šคํฌ๋ฆฝํŠธ ๋กœ๋“œ๊ฐ€ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ ํŽ˜์ด์ง€ ํŒŒ์‹ฑ์ด ์ค‘๋‹จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐Ÿ“ HTML ์ฝ”๋“œ

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Async vs Defer</title>
</head>
  <body>
    <h1>Async vs Defer ์˜ˆ์ œ>/h1>
    <script src="script.js" async>/script>
    <script src="script.js" defer>/script>
  </body>
</html>

๐Ÿ“ script.js

console.log("์ด ๋ถ€๋ถ„์€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.");
์—ฌ๊ธฐ์„œ async์™€ defer ์†์„ฑ์„ ๊ฐ€์ง„

๐Ÿ“ async ์†์„ฑ

๋ธŒ๋ผ์šฐ์ €๋Š” async ์†์„ฑ์„ ๊ฐ€์ง„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋‚˜๋ฉด HTML ํŒŒ์‹ฑ๊ณผ ํ•จ๊ป˜ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์˜ ๋‹ค์šด๋กœ๋“œ๋ฅผ ๋™์‹œ์— ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด ๋‹ค์šด๋กœ๋“œ๋˜๊ณ  ์‹คํ–‰๋  ์ค€๋น„๊ฐ€ ๋˜๋ฉด, HTML ํŒŒ์‹ฑ์€ ๋ฉˆ์ถ”๊ณ  ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ console.log๊ฐ€ ์‹คํ–‰๋  ๋•Œ๊นŒ์ง€ HTML ํŒŒ์‹ฑ์€ ๋ฉˆ์ถ”๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“ defer ์†์„ฑ

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