DOM์ด๋ž€

์–‘์ฐŒยท2021๋…„ 9์›” 23์ผ
0

JS

๋ชฉ๋ก ๋ณด๊ธฐ
11/11

๐ŸŒป Achievement Goals

  • DOM์˜ ๊ฐœ๋…์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  • DOM์˜ ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•˜๊ณ , HTML๊ณผ DOM์ด ์–ด๋–ป๊ฒŒ ๋‹ฎ์•„์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • HTML์—์„œ Javascript ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ์ฃผ์˜์ ์— ๋Œ€ํ•ด์„œ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
    <script> ํƒœ๊ทธ๊ฐ€ ์ ์šฉ๋˜๋Š” ์œ„์น˜์— ๋”ฐ๋ผ์„œ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.



DOM์ด๋ž€?

  • DOM์€ ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ(document object model)์ž…๋‹ˆ๋‹ค.
  • DOM์€ nodes,property์™€ method๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ตฌ์กฐํ™”๋œ object๋กœ ๋ฌธ์„œ(document)๋ฅผ ํ‘œํ˜„ํ•œ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ๋ง๋กœ HTML, XML ๋ฌธ์„œ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ interface์ž…๋‹ˆ๋‹ค.

DOM์„ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์›น ํŽ˜์ด์ง€๋Š” ์ผ์ข…์˜ ๋ฌธ์„œ(Document)์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ๊ทธ ๋‚ด์šฉ์ด ํ•ด์„๋˜๊ฑฐ๋‚˜, HTML ์†Œ์Šค ๊ทธ ์ž์ฒด๊ฐ€ ๋ Œ๋”๋ง ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, JavaScript์™€ ๊ฐ™์€ ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด๊ฐ€ HTML ๋ฌธ์„œ ์•ˆ์— ์žˆ๋Š” ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์„ ํƒํ•˜์—ฌ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฐ์ฒด ๋ชจ๋ธ(object model)์ด ๋ฐ”๋กœ DOM์ž…๋‹ˆ๋‹ค.

์ฆ‰, DOM(Document Object Model)์ด๋ผ๋Š” ์ˆ˜๋‹จ์„ ํ†ตํ•ด์„œ JavaScript์™€ ๊ฐ™์€ ์Šคํฌ๋ฆฝํŒ…(scripting)์–ธ์–ด๊ฐ€ ์›นํŽ˜์ด์ง€์˜ ๋ฌธ์„œ ๊ตฌ์กฐ, ์Šคํƒ€์ผ, ๋‚ด์šฉ๋“ค์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

DOM๊ณผ script ํƒœ๊ทธ

DOM๊ณผ <script>...</script> ํƒœ๊ทธ๋Š” ๋ฌด์Šจ ๊ด€๋ จ์ด ์žˆ๋Š” ๊ฑธ๊นŒ์š”?

๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML ๋ฌธ์„œ๋ฅผ ์ฝ๋‹ค๊ฐ€ <script> ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด, DOM ์ƒ์„ฑ์„ ๋ฉˆ์ถ”๊ณ , ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

<div>...์Šคํฌ๋ฆฝํŠธ ์•ž ์ฝ˜ํ…์ธ ...</div>
<script src="JS/index.js"></script>

<!--์Šคํฌ๋ฆฝํŠธ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์‹คํ–‰์ด ๋๋‚˜๊ธฐ ์ „๊นŒ์ง€ ์•„๋ž˜ ๋‚ด์šฉ์ด ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค -->
<div>...์Šคํฌ๋ฆฝํŠธ ๋’ค ์ฝ˜ํ…์ธ ...</div>

์ด๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๋ช‡๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


1) body ๋ ๋ถ€๋ถ„์— ์Šคํฌ๋ฆฝํŠธ ํฌํ•จ

์ฒซ๋ฒˆ์งธ ํ•ด๊ฒฐ์ฑ…์€ body ๋ ๋ถ€๋ถ„์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. html๋ฌธ์„œ๊ฐ€ ๋ชจ๋‘ ํŒŒ์‹ฑ(parsing)๋˜๊ณ  ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด ๋‹ค์šด๋กœ๋“œ ๋ฐ ์‹คํ–‰์ด ๋˜๋Š” ๋กœ์ง์ž…๋‹ˆ๋‹ค.

<body>
 ... ์Šคํฌ๋ฆฝํŠธ ์œ„ ์ฝ˜ํ…์ธ  ๋“ค ...
 
 <script src="main.js"></script>
</body>

๋‹จ์ 

  • ํ•ด๋‹น ํŽ˜์ด์ง€๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์˜์กด์ (๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜จ๋‹ค๋˜์ง€, DOM์š”์†Œ๋ฅผ ์ด์˜๊ฒŒ ๊พธ๋ฐˆ)์ด๋ผ๋ฉด, ์ •์ƒ์ ์ธ ํŽ˜์ด์ง€๋ฅผ ๋ณผ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.



    ์žฅ์ 
  • ๊ธฐ๋ณธ์ ์ธ html ๋ฌธ์„œ๋ฅผ ๋นจ๋ฆฌ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



2) async

๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ script ํƒœ๊ทธ์— async ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ํŒŒ์ผ์„ ๋ณ‘๋ ฌ๋กœ ๋‹ค์šด๋ฐ›๋Š”๋‹ค(๋น„๋™๊ธฐ์ ์œผ๋กœ)๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์šด๋กœ๋“œ๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฐ›๊ณ (html ํŒŒ์ผ ํŒŒ์‹ฑ, ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๊ณผ๋Š” ๋…๋ฆฝ์ ์ธ ๋‹ค์šด๋กœ๋“œ), ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์‹œ์—๋Š” html ํŒŒ์‹ฑ์ด ๋ฉˆ์ถ”๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

<body>
 ... ์Šคํฌ๋ฆฝํŠธ ์ฝ˜ํ…์ธ  ๋“ค ...
 
 <script async src="a.js"></script>
 <script async src="b.js"></script>
 <script async src="c.js"></script>
 ... ์Šคํฌ๋ฆฝํŠธ ์ฝ˜ํ…์ธ  ๋“ค ...
</body>

๋‹จ์ 

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



    ์žฅ์ 
  • ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์— ์ข…์†์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ async ๊ฐ€ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.(ํŒŒ์ผ์ด ์–ด๋Š ์ง€์ ์—์„œ ์‹คํ–‰๋˜๋Š”์ง€ ์ •ํ™•ํžˆ ์•Œ ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ ๋กœ๋“œ๊ฐ€ ๊ฐ€์žฅ ์ ํ•ฉ ํ•ฉ๋‹ˆ๋‹ค.)



3) defer

์„ธ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ script ํƒœ๊ทธ์— defer ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
async์™€ ๊ฐ™์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณ‘๋ ฌ์ ์œผ๋กœ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๋Š” ๊ฒƒ์€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ async์™€๋Š” ๋‹ค๋ฅธ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ๋Š” HTML ํŒŒ์‹ฑ์ด ๋ชจ๋‘ ์™„๋ฃŒ๋œ ํ›„์— ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์‹คํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‘๋ฒˆ์งธ๋กœ๋Š” ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด ์“ฐ์—ฌ์ง„ ์ˆœ์„œ๋Œ€๋กœ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚จ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
(async๋Š” ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋ณ‘๋ ฌ์ ์œผ๋กœ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๊ณ , ์ด ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๋๋‚˜๋ฉด html์˜ ํŒŒ์‹ฑ์„ ์ค‘๋‹จํ•˜๊ณ  ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค.)

<body>
 ... ์Šคํฌ๋ฆฝํŠธ ์ฝ˜ํ…์ธ  ๋“ค ...
 
 <script defer src="a.js"></script>
 <script defer src="b.js"></script>
 <script defer src="c.js"></script>
 ... ์Šคํฌ๋ฆฝํŠธ ์ฝ˜ํ…์ธ  ๋“ค ...
</body>

์žฅ์ 

  • DOM ์ „์ฒด๊ฐ€ ํ•„์š”ํ•œ ์Šคํฌ๋ฆฝํŠธ๋‚˜ ์‹คํ–‰ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    (์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ ํžŒ ์ˆœ์„œ์— ๋”ฐ๋ผ ์‹คํ–‰์ด ๋ฉ๋‹ˆ๋‹ค.)




์ด์™€ ๊ฐ™์ด, script ํƒœ๊ทธ์˜ ์†์„ฑ๋งˆ๋‹ค ์žฅ๋‹จ์ ์ด ์กด์žฌํ•จ์œผ๋กœ ๊ฐ๊ฐ ์ƒํ™ฉ์— ๋งž๋Š” script ํƒœ๊ทธ ์†์„ฑ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.







์ฐธ๊ณ  ์ž๋ฃŒ
1. https://ko.javascript.info/script-async-defer
2. ๋“œ๋ฆผ์ฝ”๋”ฉ ์—˜๋ฆฌ aync ์™€ defer ์ฐจ์ด์ 

profile
์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ž…๋‹ˆ๋‹ค! ํ˜น์‹œ ์ œ ๊ธ€์—์„œ ์ˆ˜์ •์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜, ๊ฐœ์„ ๋  ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ์ž์œ ๋กญ๊ฒŒ ๋Œ“๊ธ€ ๋‹ฌ์•„์ฃผ์„ธ์š”๐Ÿ˜Š

0๊ฐœ์˜ ๋Œ“๊ธ€