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

HTML ์†์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ

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

<script> ์š”์†Œ#

JavaScript๋ฅผ HTML ํŽ˜์ด์ง€์— ์‚ฝ์ž…ํ•˜๋Š” ์ผ์ฐจ์ ์ธ ๋ฐฉ๋ฒ•์€ <script> ์š”์†Œ๋ฅผ ํ†ตํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Š” ๋„ท์Šค์ผ€์ดํ”„ ๋‚ด๋น„๊ฒŒ์ดํ„ฐ 2์—์„œ ์ฒ˜์Œ ๊ตฌํ˜„ํ–ˆ๊ณ , ์ดํ›„ ๊ณต์‹ HTML ๋ช…์„ธ์— ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

์†์„ฑ๊ฐ’์„ค๋ช…
asyncasync์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•  ๊ฒƒ์ธ์ง€ ๋ช…์‹œํ•จ.
charsetcharsetsrc ์†์„ฑ์œผ๋กœ ๋ช…์‹œํ•œ ์ฝ”๋“œ์˜ ๋ฌธ์ž์…‹์„ ์ง€์ •ํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋Œ€๊ฐœ ์ด ์†์„ฑ์˜ ๊ฐ’์„ ๋ฌด์‹œํ•˜๋ฏ€๋กœ ์ž˜ ์“ฐ์ด์ง€ ์•Š์Œ.
deferdeferํŽ˜์ด์ง€๊ฐ€ ์™„์ „ํžˆ ํŒŒ์‹ฑ๋  ๋•Œ๊นŒ์ง€ ์Šคํฌ๋ฆฝํŠธ์˜ ์‹คํ–‰์„ ์ง€์—ฐ์‹œํ‚ฌ ๊ฒƒ์ธ์ง€ ๋ช…์‹œํ•จ.
srcURL์™ธ๋ถ€ ํŒŒ์ผ์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•จ.
typetext/javascript (๊ธฐ๋ณธ๊ฐ’) ๋˜๋Š” module์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์˜ ์ฝ˜ํ…์ธ  ํƒ€์ž…(๋งˆ์ž„ ํƒ€์ž…)์„ ์ง€์ •ํ•จ. ์ด ์†์„ฑ์„ ์ƒ๋žตํ•ด๋„ ๊ธฐ๋ณธ ๊ฐ’์ด text/javascript ๋กœ ์•ˆ์ „ํ•จ. ์ตœ๊ทผ ๋ธŒ๋ผ์šฐ์ €์—์„œ module ์„ ์ƒˆ๋กญ๊ฒŒ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ•จ.

<script> ์š”์†Œ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ํŽ˜์ด์ง€์— ์ง์ ‘ JavaScript ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ ํŒŒ์ผ์—์„œ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. <script> ์š”์†Œ ์•ˆ์— ์ง์ ‘ JavaScript ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ์ธ๋ผ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ผ๊ณ  ํ•œ๋‹ค.

์ธ๋ผ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋Š” ๋ฌธ์ž์—ด </script> ๋Š” ์“ธ ์ˆ˜ ์—†๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŒŒ์‹ฑํ•˜๋ฉด์„œ ๋ฌธ์ž์—ด </script> ๋ฅผ ๋‹ซ๋Š” ํƒœ๊ทธ </script>๋กœ ์ธ์‹ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๋Š” / ๋ฌธ์ž๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•ด์„œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

<script type="text/javascript">  function sayScript() {    alert("<\/script>");  }</script>

JavaScript ์ฝ”๋“œ๋ฅผ ์™ธ๋ถ€์—์„œ ๋ถˆ๋Ÿฌ์˜ค๋ ค๋ฉด src ์†์„ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค. src ์†์„ฑ์˜ ๊ฐ’์œผ๋กœ JavaScript ํŒŒ์ผ์˜ URL์„ ์ง€์ •ํ•œ๋‹ค.

<script type="text/javascript" src="example.js"></script>

์ด ์™ธ๋ถ€ ํŒŒ์ผ์—๋Š” JavaScript ์ฝ”๋“œ๋งŒ ๋“ค์–ด๊ฐ€๋ฉฐ <script> , </script> ํƒœ๊ทธ๋ฅผ ์“ฐ์ง€์•Š๋Š”๋‹ค. src ์†์„ฑ์—๋Š” ์™ธ๋ถ€ ๋„๋ฉ”์ธ์˜ URL์„ ์จ์„œ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์— ์žˆ๋Š” JavaScript ํŒŒ์ผ๋„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

โ˜๏ธ ๋งŒ์•ฝ <script> , </script> ํƒœ๊ทธ ์‚ฌ์ด์— ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๊ฐ€ ์žˆ๊ณ  src ์†์„ฑ๋„์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋‚ด๋ ค๋ฐ›์•„ ์‹คํ–‰ํ•˜๊ณ  ์ธ๋ผ์ธ ์ฝ”๋“œ๋Š” ๋ฌด์‹œํ•œ๋‹ค.

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

2020-04-20-html-์†์˜-์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ-image-0

โ˜๏ธ ์ด๋ฅผ ๋™๊ธฐ์ (Syncronous) ์ฒ˜๋ฆฌ๋ผ๊ณ  ํ•˜๋ฉฐ, ๋น„๋™๊ธฐ์ (Asyncronous)์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ์œ„ํ•ด์„œ async , defer ์†์„ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค.

ํƒœ๊ทธ ์œ„์น˜#

์ „ํ†ต์ ์œผ๋กœ <script> ์š”์†Œ๋Š” ํŽ˜์ด์ง€์˜ <head> ์š”์†Œ ์•ˆ์— ์“ฐ๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด์—ˆ๋‹ค.

<!DOCTYPE html><html>    <head>        <title>Document</title>        <script type="text/javascript" src="example1.js"></script>        <script type="text/javascript" src="example2.js"></script>    </head>    <body>        <!-- ํŽ˜์ด์ง€ ์ฝ˜ํ…์ธ  -->    </body></html>

์ด๋Ÿฐ ํ˜•์‹์„ ์ทจํ•œ ๋ชฉ์ ์€ CSS๋‚˜ JS ๊ฐ™์€ ์™ธ๋ถ€ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ํ•œ๊ณณ์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ์œ„ํ•จ์ด์—ˆ์ง€๋งŒ, ์ด๋ ‡๊ฒŒํ•˜๋ฉด ์™ธ๋ถ€ ํŒŒ์ผ์„ ์ „๋ถ€ ๋‚ด๋ ค๋ฐ›๊ณ  ํŒŒ์‹ฑํ•˜๊ณ , ํ•ด์„์„ ๋๋‚ผ ๋•Œ๊นŒ์ง€ํŽ˜์ด์ง€ ๋ Œ๋”๋ง์ด ๋ฉˆ์ถ”๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฐ ์ด์œ ๋กœ ์ตœ์‹  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ JavaScript ์ฝ”๋“œ๋ฅผ <body> ์š”์†Œ ์•ˆ์—, ํŽ˜์ด์ง€ ์ฝ˜ํ…์ธ  ๋งˆ์ง€๋ง‰์— ์“ด๋‹ค.

<!DOCTYPE html><html>    <head>        <title>Document</title>    </head>    <body>        <!-- ํŽ˜์ด์ง€ ์ฝ˜ํ…์ธ  -->        <script type="text/javascript" src="example1.js"></script>        <script type="text/javascript" src="example2.js"></script>    </body></html>

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” ํŽ˜์ด์ง€ ๋ Œ๋”๋ง์„ ๋ชจ๋‘ ๋งˆ์นœ ๋‹ค์Œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

defer#

HTML 4.01์—์„œ๋Š” <script> ์š”์†Œ์— defer ์†์„ฑ์„ ์ •์˜ํ–ˆ๋‹ค. defer ์†์„ฑ์˜ ๋ชฉ์ ์€ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ํŒŒ์‹ฑํ•œ ํ›„์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด๋„ ์ƒ๊ด€ ์—†๋‹ค๊ณ  ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

<script> ์š”์†Œ์— defer ์†์„ฑ์„ ์„ค์ •ํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์˜ ์‹คํ–‰(execution)์„ ์ง€์—ฐ์‹œํ‚จ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” defer ๊ฐ€ ์„ค์ •๋œ <script> ์š”์†Œ๋ฅผ ๋งŒ๋‚˜๋ฉด ์ฆ‰์‹œ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ค์ง€๋งŒ(fetch) HTML ๊ตฌ๋ฌธ ๋ถ„์„(parsing)์„ ์ผ์‹œ์ •์ง€ํ•˜์ง€ ์•Š๊ณ , parsing์ด ๋๋‚œ๋’ค์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

๋˜ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €๋Š” defer ์†์„ฑ์ด ์ ์šฉ๋œ ์—ฌ๋Ÿฌ <script> ์š”์†Œ๊ฐ€ ์žˆ์„๋•Œ ํ˜ธ์ถœ๋œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๋ช‡๋ช‡ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด ์†์„ฑ์„ ๋ฌด์‹œํ•˜๊ณ  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฆ‰์‹œ ๋‚ด๋ ค๋ฐ›๊ณ  ์ฆ‰์‹œ ์‹คํ–‰ํ•œ๋‹ค . ๋”ฐ๋ผ์„œ ์ง€์—ฐ์‹œํ‚ฌ ์Šคํฌ๋ฆฝํŠธ๋Š” ํŽ˜์ด์ง€ ๋งจ ๋งˆ์ง€๋ง‰์— ๋†“๋Š” ํŽธ์ด ์—ฌ์ „ํžˆ ์ตœ์ƒ์ด๋‹ค.

โ˜๏ธ defer ์†์„ฑ์€ ์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ๋งŒ ์œ ํšจํ•˜๋‹ค.

<script defer src="script.js">

2020-04-20-html-์†์˜-์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ-image-1

async#

HTML5์—์„œ๋Š” <script> ์š”์†Œ์— async ์†์„ฑ์„ ๋„์ž…ํ•˜์˜€๋‹ค. async ๋Š” ์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ์—๋งŒ ์ ์šฉ๋˜๊ณ  <script> ์š”์†Œ๋ฅผ ๋งŒ๋‚˜๋Š” ์ฆ‰์‹œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ fetch ํ•œ๋‹ค๋Š” ์ ์—์„œ defer ์™€ ๋น„์Šทํ•˜๋‹ค. defer ์™€ ๋‹ฌ๋ฆฌ async ๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ fetchํ•˜๊ณ  ๋‚˜์„œ ์‹คํ–‰๊ฐ€๋Šฅํ•œ ์‹œ์ ์ด ๋˜๋ฉด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ๊ตฌ๋ฌธ ๋ถ„์„์„ ์ผ์‹œ์ •์ง€ํ•œ๋‹ค.

์—ฌ๋Ÿฌ <script> ์š”์†Œ์— async ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ํ˜ธ์ถœ๋œ ์ˆœ์„œ๋Œ€๋กœ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†๋‹ค. ๋จผ์ € fetch๋œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋จผ์ € ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ async ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํŒŒ์ผ ์‚ฌ์ด์— ์˜์กด์„ฑ์ด ์žˆ์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

async ์†์„ฑ์˜ ๋ชฉ์ ์€ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋ชจ๋‘ ๋‚ด๋ ค๋ฐ›์•„ ์‹คํ–‰ํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ํ•„์š” ์—†์ด ํŽ˜์ด์ง€ ๋ Œ๋”๋ง์„ ์‹œ์ž‘ํ•ด๋„ ์ข‹์œผ๋ฉฐ, ์•ž์„  ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋’ค์— ์žˆ๋Š”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋‚ด๋ ค๋ฐ›์•„ ์‹คํ–‰ํ•ด๋„ ์ข‹๋‹ค๊ณ  ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

<script async src="script.js">

2020-04-20-html-์†์˜-์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ-image-2

XHTML#

XHTML์€ HTML์— XML์„ ์ ์šฉํ•œ ๊ฒƒ์ด๋‹ค. XHTML์€ HTML๋ณด๋‹ค ์—„๊ฒฉํ•˜์—ฌ <script> ์š”์†Œ์—์ธ๋ผ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์“ธ ๋•Œ๋„ ์ ์šฉ๋œ๋‹ค. ์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” HTML์—์„œ๋Š” ์œ ํšจํ•˜์ง€๋งŒ XHTML์—์„œ๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

<script type="text/javascript">  function compare(a, b) {    if (a < b) {      alert("A is less than B");    } else if (a > b) {      alert("A is greater than B");    } else {      alert("A is equal to B");    }  }</script>

HTML์—์„œ๋Š” <script> ์š”์†Œ์˜ ์ฝ˜ํ…์ธ ๋ฅผ ํŒŒ์‹ฑํ•˜๋Š” ํŠน๋ณ„ํ•œ ๊ทœ์น™์ด ์žˆ์ง€๋งŒ XHTML์—๋Š” ํ•ด๋‹น ๊ทœ์น™์ด ์ ์šฉ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. XHTML์€ < ๊ธฐํ˜ธ๋ฅผ ํƒœ๊ทธ์˜ ์‹œ์ž‘์œผ๋กœ ๊ฐ„์ฃผํ•ด < ๊ธฐํ˜ธ๋‹ค์Œ์— ๊ณต๋ฐฑ๋ฌธ์ž๊ฐ€ ์˜ฌ ์ˆ˜ ์—†๋‹ค๋Š” ๋ฌธ๋ฒ• ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

์ด ๋ฌธ๋ฒ• ์—๋Ÿฌ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ < ๊ธฐํ˜ธ๋ฅผ HTML ์—”ํ‹ฐํ‹ฐ <๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด ์ฝ”๋“œ๋Š” XHTML์—์„œ ์‹คํ–‰ ๋˜์ง€๋งŒ ๊ฐ€๋…์„ฑ์ด ๋‚˜์˜๋‹ค.

<script type="text/javascript">  function compare(a, b) {    if (a &lt; b) {      alert("A is less than B");    } else if (a > b) {      alert("A is greater than B");    } else {      alert("A is equal to B");    }  }</script>

๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ JavaScript ์ฝ”๋“œ๋ฅผ CDATA ์„น์…˜์œผ๋กœ ๊ฐ์‹ธ๋Š” ๊ฒƒ์ด๋‹ค. XHTML๊ณผ XML์—์„œ CDATA ์„น์…˜์€ ํ•ด๋‹น ์ฝ˜ํ…์ธ ๋ฅผ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ์˜ ํ…์ŠคํŠธ์ด๋ฉฐ ํŒŒ์‹ฑํ•˜๋ฉด ์•ˆ๋œ๋‹ค๊ณ  ๋ช…์‹œํ•œ๋‹ค.

<script type="text/javascript"><![CDATA[  function compare(a, b) {    if (a < b) {      alert("A is less than B");    } else if (a > b) {      alert("A is greater than B");    } else {      alert("A is equal to B");    }  }]]></script>

XHTML ํ˜ธํ™˜ ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ๋˜์ง€๋งŒ, ๋งŽ์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ XHTML ๋น„ํ˜ธํ™˜์ด๋ฉฐ CDATA๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด CDATA ๋งˆํฌ์—… ์•ž์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฃผ์„ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

<script type="text/javascript">//<![CDATA[  function compare(a, b) {    if (a < b) {      alert("A is less than B");    } else if (a > b) {      alert("A is greater than B");    } else {      alert("A is equal to B");    }  }//]]></script>

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด XHTML์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €์™€, XHTML์„ ์ง€์›ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ € ๋ชจ๋‘์—์„œ์ž˜ ๋™์ž‘ํ•œ๋‹ค.

์ธ๋ผ์ธ ์ฝ”๋“œ์™€ ์™ธ๋ถ€ ํŒŒ์ผ#

HTML ํŒŒ์ผ์— ์ง์ ‘ JavaScript ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ธ๋ผ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ์™ธ๋ถ€ ํŒŒ์ผ ์ค‘์—์–ด๋Š ๋ฐฉ๋ฒ•์ด ๋” ์ข‹์„๊นŒ? ์ผ๋ฐ˜์ ์œผ๋กœ ์™ธ๋ถ€ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋กœ ๊ฐ„์ฃผํ•œ๋‹ค. ์™ธ๋ถ€ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ๋‹ค - JS ํŒŒ์ผ์„ ๋ชจ๋‘ ๋””๋ ‰ํ„ฐ๋ฆฌ ํ•˜๋‚˜์— ๋ชจ์•„๋†“๊ณ , ๋งˆํฌ์—…๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ JavaScript ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์บ์‹ฑ - ๋ธŒ๋ผ์šฐ์ €๋Š” ์™ธ๋ถ€์—์„œ ์—ฐ๊ฒฐ๋œ JS ํŒŒ์ผ์„ ๋ชจ๋‘ ์บ์‹œํ•˜๋ฏ€๋กœ, ์„œ๋กœ ๋‹ค๋ฅธ ํŽ˜์ด์ง€์—์„œ ๊ฐ™์€ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํ•œ ๋ฒˆ๋งŒ ๋‚ด๋ ค๋ฐ›๊ณ  ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„ฑ๋Šฅ์ด ์ข‹์•„์ง„๋‹ค.

  • ๋ฏธ๋ž˜์—๋„ ์•ˆ์ „ํ•˜๋‹ค - JS ํŒŒ์ผ์„ ์™ธ๋ถ€์— ์ €์žฅํ•˜๋ฉด ์•ž์„œ ์–ธ๊ธ‰ํ•œ CDATA ์„น์…˜์ด๋‚˜ ์ฃผ์„ํŽธ๋ฒ•์„ ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ์™ธ๋ถ€ ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฌธ๋ฒ•์€ HTML์ด๋‚˜ XHTML์ด๋‚˜ ๋ชจ๋‘๋˜‘๊ฐ™๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

<noscript> ์š”์†Œ#

<noscript> ์š”์†Œ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ JavaScript๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์„ ๋•Œ ๋Œ€์ฒด ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค. <noscript> ์š”์†Œ๋Š” <script> ์š”์†Œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  HTML ์š”์†Œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค. <noscript> ์š”์†Œ๋Š” ๋‹ค์Œ ๋‘ ์ƒํ™ฉ์—์„œ๋งŒ ํ‘œ์‹œ๋œ๋‹ค.

  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜

  • ๋ธŒ๋ผ์šฐ์ €์˜ ์Šคํฌ๋ฆฝํŠธ ์ง€์›์ด ๊บผ์ ธ ์žˆ์„ ๋•Œ

์ด ๋‘ ์ƒํ™ฉ์„ ์ œ์™ธํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” <noscript> ์š”์†Œ์˜ ์ฝ˜ํ…์ธ ๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค.

<!DOCTYPE html><html>  <head>    <title>Document</title>    <script type="text/javascript" src="example1.js"></script>    <script type="text/javascript" src="example2.js"></script>  </head>  <body>    <noscript>      <p>This page requires a JavaScript-enabled browser.</p>    </noscript>  </body></html>

์š”์•ฝ#

JavaScript๋Š” <script> ์š”์†Œ๋ฅผ ํ†ตํ•ด HTML์— ์‚ฝ์ž…๋œ๋‹ค. JavaScript๋Š” ์ธ๋ผ์ธ ๋˜๋Š” ์™ธ๋ถ€ ํŒŒ์ผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์™ธ๋ถ€ JS ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๋ ค๋ฉด src ์†์„ฑ์— ํŒŒ์ผ URL์„ ์“ด๋‹ค. ์™ธ๋ถ€ ๋„๋ฉ”์ธ์˜ JS ํŒŒ์ผ๋„ ๊ฐ€์ ธ์™€ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

  • ๋ชจ๋“  <script> ์š”์†Œ๋Š” ํŽ˜์ด์ง€์— ๋‚˜ํƒ€๋‚ด๋Š” ์ˆœ์„œ๋Œ€๋กœ ํ•ด์„๋œ๋‹ค. defer , async ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด <script> ์š”์†Œ์˜ ์ฝ”๋“œ๋ฅผ ์™„์ „ํžˆ fetchํ•˜๊ณ  ์‹คํ–‰ํ•œ ์ดํ›„์—๋งŒ๊ทธ ๋‹ค์Œ <script> ์š”์†Œ์˜ ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋˜ํ•œ defer , async ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด <script> ์š”์†Œ๋ฅผ ๋งŒ๋‚ฌ์„ ๋•Œ ์ฝ”๋“œ๋ฅผ ์™„์ „ํžˆ fetchํ•˜๊ณ  ์‹คํ–‰๋  ๋•Œ๊นŒ์ง€ ํŽ˜์ด์ง€ ๋ Œ๋”๋ง ์—ญ์‹œ ์ผ์‹œ ์ •์ง€๋œ๋‹ค. ์ด ๋•Œ๋ฌธ์— <script> ์š”์†Œ๋ฅผ ๋ณดํ†ต ํŽ˜์ด์ง€์˜ ์ฃผ์š” ์ฝ˜ํ…์ธ  ๋‹ค์Œ, </body> ํƒœ๊ทธ ๋ฐ”๋กœ ์•ž์—๋†“๋Š”๋‹ค.

  • defer ์†์„ฑ์€ ์Šคํฌ๋ฆฝํŠธ์˜ ์‹คํ–‰์„ ๋ฌธ์„œ ๋ Œ๋”๋ง ์ดํ›„๋กœ ๋ฏธ๋ฃฌ๋‹ค.

  • async ์†์„ฑ์€ ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๊ฐ€ fetch๋  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๋‚˜ ๋ฌธ์„œ ๋ Œ๋”๋ง์„ ์ฐจ๋‹จํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๊ณ  ๋ช…์‹œํ•œ๋‹ค. ์ด ์†์„ฑ์€ ๋งˆํฌ์—… ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ#

์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ์˜ CDATA ์‚ฌ์šฉ์— ๋Œ€ํ•ด์„œ :: Outsider's Dev Story

: ์Šคํฌ๋ฆฝํŠธ ์š”์†Œ

HTML script tag

[HTML5] ๊ผผ๊ผผํžˆ ์‚ดํŽด๋ณด๋Š” SCRIPT ์—˜๋ฆฌ๋จผํŠธ

script์˜ async์™€ defer ์†์„ฑ