<script>
ํ๊ทธ๊ฐ ์ ์ฉ๋๋ ์์น์ ๋ฐ๋ผ์ ์คํ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์์์ ์ดํดํ ์ ์๋ค.
- 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>...</script>
ํ๊ทธ๋ ๋ฌด์จ ๊ด๋ จ์ด ์๋ ๊ฑธ๊น์?
๋ธ๋ผ์ฐ์ ๊ฐ HTML ๋ฌธ์๋ฅผ ์ฝ๋ค๊ฐ <script>
ํ๊ทธ๋ฅผ ๋ง๋๋ฉด, DOM ์์ฑ์ ๋ฉ์ถ๊ณ , ํด๋น ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ ์คํํฉ๋๋ค.
<div>...์คํฌ๋ฆฝํธ ์ ์ฝํ
์ธ ...</div>
<script src="JS/index.js"></script>
<!--์คํฌ๋ฆฝํธ ๋ค์ด๋ก๋ ๋ฐ ์คํ์ด ๋๋๊ธฐ ์ ๊น์ง ์๋ ๋ด์ฉ์ด ๋ณด์ด์ง ์์ต๋๋ค -->
<div>...์คํฌ๋ฆฝํธ ๋ค ์ฝํ
์ธ ...</div>
์ด๋ ๋ฐ์ํ๋ ๋ฌธ์ ์ ์ ์๋์ ๊ฐ์ต๋๋ค.
์์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ์ฌ ๋ช๊ฐ์ง ๋ฐฉ๋ฒ์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ฒซ๋ฒ์งธ ํด๊ฒฐ์ฑ ์ body ๋ ๋ถ๋ถ์ ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. html๋ฌธ์๊ฐ ๋ชจ๋ ํ์ฑ(parsing)๋๊ณ ์คํฌ๋ฆฝํธ ํ์ผ์ด ๋ค์ด๋ก๋ ๋ฐ ์คํ์ด ๋๋ ๋ก์ง์ ๋๋ค.
<body>
... ์คํฌ๋ฆฝํธ ์ ์ฝํ
์ธ ๋ค ...
<script src="main.js"></script>
</body>
๋จ์
- ํด๋น ํ์ด์ง๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์กด์ (๋ฐ์ดํฐ๋ฅผ ๋ฐ์์จ๋ค๋์ง, DOM์์๋ฅผ ์ด์๊ฒ ๊พธ๋ฐ)์ด๋ผ๋ฉด, ์ ์์ ์ธ ํ์ด์ง๋ฅผ ๋ณผ๋ ๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
์ฅ์ - ๊ธฐ๋ณธ์ ์ธ html ๋ฌธ์๋ฅผ ๋นจ๋ฆฌ ๋ณผ ์ ์์ต๋๋ค.
๋๋ฒ์งธ ๋ฐฉ๋ฒ์ 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 ๊ฐ ์ ์ฉํฉ๋๋ค.(ํ์ผ์ด ์ด๋ ์ง์ ์์ ์คํ๋๋์ง ์ ํํ ์ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋น๋๊ธฐ ๋ก๋๊ฐ ๊ฐ์ฅ ์ ํฉ ํฉ๋๋ค.)
์ธ๋ฒ์งธ ๋ฐฉ๋ฒ์ 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 ์ฐจ์ด์