TIL - 21.07.04 ๐Ÿ‘จโ€๐Ÿ’ป - Js. DOM

์„ฑํ›ˆยท2021๋…„ 7์›” 4์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
20/59
post-thumbnail

TIL - 21.07.04 ๐Ÿ‘จโ€๐Ÿ’ป

Document Object Model ( ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ )

DOM, ๋”์€ ์›นํŽ˜์ด์ง€์˜ ์ปจํ…์ธ ๋ฅผ ์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋กœ ๋‚˜ํƒ€๋‚ด์ค€๋‹ค.
์ด๋•Œ ๋ชจ๋ธ์€ ๊ฐ์ฒด์˜ ํŠธ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋˜๋Š”๋ฐ ์ด๋ฅผ DOM tree ๋ผ๊ณ  ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด ์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด(๋”)๊ฐ€ ์ˆ˜์ •๋˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋Š” ๋‚ด์šฉ๋„ ์ˆ˜์ •๋˜๋ฉฐ ์ด๋•Œ ๋”์„ ์ˆ˜์ •ํ•˜๋Š” ํ”„๋กœํผํ‹ฐ, ๋ฉ”์†Œ๋“œ๋“ค์„ DOM API๋ผ๊ณ  ํ•œ๋‹ค.

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


Browser Object Model ( ๋ธŒ๋ผ์šฐ์ € ๊ฐ์ฒด ๋ชจ๋ธ )

BOM์€ ๋ฌธ์„œ ์ด์™ธ์˜ ๋ชจ๋“  ๊ฒƒ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ถ”๊ฐ€ ๊ฐ์ฒด์ด๋‹ค.

์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๋Š” navigator์™€ location์ด ์žˆ๋‹ค.

  • navigator๋Š” ๋ธŒ๋ผ์šฐ์ €์™€ ์šด์˜์ฒด์ œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด์ด๋ฉฐ ์œ ๋ช…ํ•œ ํ”„๋กœํผํ‹ฐ๋Š” ํ˜„์žฌ ์ ‘์†์ค‘์ธ ๋ธŒ๋ผ์šฐ์ € ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ๋Š” navigator.userAgent์™€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹คํ–‰์ค‘์ธ ์šด์˜์ฒด์ œ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” navigator.platform๋“ฑ์ด ์žˆ๋‹ค.

  • location์€ location.href = 'http://link.likethis'์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์›นํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ• ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.


DOM tree

๋”์—์„œ ์š”์†Œ, ์†์„ฑ, ํ…์ŠคํŠธ๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  HTML ์š”์†Œ๋Š” ๊ฐ์ฒด์ด๊ณ  HTML ํƒœ๊ทธ ์ค‘ ๋‹ค๋ฅธ ํƒœ๊ทธ๊ฐ€ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” ์ž์‹ ํƒœ๊ทธ๋ฅผ ์ค‘์ฒฉํƒœ๊ทธ๋ผ๊ณ  ํ•œ๋‹ค.

๋” ํŠธ๋ฆฌ๋Š” 4์ข…๋ฅ˜ ์ฃผ์š” ๋…ธ๋“œ(Node)๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  • ๋ฌธ์„œ ๋…ธ๋“œ ( Document Node )
    ํŠธ๋ฆฌ ์ตœ์ƒ์œ„์— ์žˆ์œผ๋ฉฐ ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ๋ฌธ์„œ ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด์•ผํ•˜๋Š”, ๋” ํŠธ๋ฆฌ ์ ‘๊ทผ์˜ ์‹œ์ž‘์ (entry point)์ด๋‹ค.

  • ์š”์†Œ ๋…ธ๋“œ ( Element Node )
    ์š”์†Œ ๋…ธ๋“œ๋Š” HTML ์š”์†Œ๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.
    HTML ์š”์†Œ๋Š” ์ค‘์ฒฉ์œผ๋กœ ๋ถ€์ž๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๋Š”๋ฐ ์ด๋ฅผ ํ†ตํ•ด ์ •๋ณด๋ฅผ ๊ตฌ์กฐํ™”ํ•œ๋‹ค.
    ํ›„์ˆ ํ•  ์†์„ฑ ๋…ธ๋“œ์™€ ํ…์ŠคํŠธ ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ํ•ด๋‹น ๋…ธ๋“œ๋“ค์˜ ์ƒ์œ„์ธ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„์•ผํ•œ๋‹ค.

  • ์†์„ฑ ๋…ธ๋“œ ( Attribute Node )
    ์†์„ฑ ๋…ธ๋“œ๋Š” HTML ์š”์†Œ์˜ ์†์„ฑ์„ ํ‘œํ˜„ํ•œ๋‹ค.
    ์†์„ฑ ๋…ธ๋“œ๋Š” ์ƒ์œ„์ธ ์š”์†Œ ๋…ธ๋“œ์˜ ์ž์‹์ด ์•„๋‹Œ '์ผ๋ถ€'๋กœ ํ‘œํ˜„๋˜๋ฉฐ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์ฐพ์œผ๋ฉด ์†์„ฑ ๋…ธ๋“œ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ…์ŠคํŠธ ๋…ธ๋“œ ( Text Node )
    ํ…์ŠคํŠธ ๋…ธ๋“œ๋Š” HTML ์š”์†Œ์˜ ๋ฌธ์ž๋ฅผ ํ‘œํ˜„ํ•˜๋ฉฐ ์ž์‹ ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค.
    ์ฆ‰, ๋” ํŠธ๋ฆฌ์˜ ์ตœํ•˜๋‹จ์€ ํ…์ŠคํŠธ ๋…ธ๋“œ์ด๋‹ค.

ํ…์ŠคํŠธ ๋…ธ๋“œ๋Š” ์ค„์„ ๋ฐ”๊ฟ€๋•Œ๋„ ๋” ํŠธ๋ฆฌ ์ƒ์— ํ‘œํ˜„๋˜๋ฉฐ โ†ต(\n)๊ณผ โฃโฃ ๋„์–ด์“ฐ๊ธฐ ํŠน์ˆ˜๋ฌธ์ž๋กœ ํ‘œํ˜„๋œ๋‹ค.
๋‹ค๋งŒ ์ด ์ƒ์„ฑ์˜ ๋‘๊ฐ€์ง€ ์˜ˆ์™ธ๊ฐ€ ์žˆ๋‹ค.

  1. head ํƒœ๊ทธ ์ด์ „์˜ ๊ณต๋ฐฑ๊ณผ ์ƒˆ ์ค„์€ ๋ฌด์‹œ๋œ๋‹ค.
  2. body ํƒœ๊ทธ์˜ ๋‹ซ๋Š” ํƒœ๊ทธ ์ดํ›„์— ์ž‘์„ฑ๋˜๋Š” ์ปจํ…์ธ ๋Š” bodyํƒœ๊ทธ์˜ ์•ˆ์œผ๋กœ ์˜ฎ๊ฒจ์ง„๋‹ค.
  • ์ด์™ธ
    ์ฃผ์„ ๊ฐ™์€ ๊ฒƒ๋„ ํ…์ŠคํŠธ ๋…ธ๋“œ๊ฐ€ ์•„๋‹Œ ๋ณ„๋„ ๋…ธ๋“œ๋กœ ํ‘œํ˜„๋œ๋‹ค.

GOOD ๐Ÿ˜‰

๋”๊ณผ ๋”์„ ์ด์šฉํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ HTML ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฒ•์„ ์ตํ˜”๋‹ค.

BAD ๐Ÿ˜ฅ

๊ฒ‰ํ•ฅ๊ธฐ๋กœ ๋ฐฐ์›Œ ์ˆ™๋ จ์ด ๋งŽ์ด ํ•„์š”ํ•˜๋‹ค.

TO DO ๐Ÿ”ฅ

  • DOM ์ˆ™๋ จ
  • ์ด๋ฒคํŠธ
  • ๊ณ ์ฐจํ•จ์ˆ˜
  • react
  • node.js

Retrospect ๐Ÿง

์ •๋ง ์‚ฌ๋žŒ์ด ๊ฐ„์‚ฌํ•œ ๊ฒƒ ๊ฐ™๋‹ค.
ํ‰์ผ์—” ์‹œ๊ฐ„์— ์ซ“๊ธฐ๋ฉฐ ๊ณต๋ถ€ํ•˜๊ธฐ์— ์ฃผ๋ง์€ ๊ผญ ๋ณต์Šต์ด ์•„๋‹Œ ์˜ˆ์Šต ์œ„์ฃผ๋กœ ํ•™์Šตํ•ด์•ผ๊ฒ ๋‹ค ๋‹ค์งํ–ˆ๋Š”๋ฐ, ์ฃผ๋ง์ด๋ผ๊ณ  ํผ์ ธ์„œ ๋’น๊ตด๋’น๊ตด ํ•ด๋ฒ„๋ฆฌ๋‹ค๋‹ˆ..

๊ทธ๋‚˜๋งˆ ์ œ์‚ฌ๊ฐ€ ํ‰์ผ์ด ์•„๋‹ˆ๋ผ ์ฃผ๋ง์ด๋ผ ํ‰์ผ์„ ์•ˆ ๋‚ ๋ ธ๋‹ค๋Š”๊ฒŒ ์กฐ๊ทธ๋งˆํ•œ ์œ„์•ˆ์ผ๊นŒ.

10์ผ ํ›„๋ฉด HA์ธ๋ฐ ๊ธด์žฅ์ด ํ•„์š”ํ•œ ๋“ฏ ํ•˜๋‹คใ… 
์•ž์œผ๋กœ ํ•˜๋ฃจ์— ํ•œ์‹œ๊ฐ„์€ ๋ฆฌ์•กํŠธ ๊ฒ‰์„ ํ•ฅ๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ์•ผ๊ฒ ๋‹ค.

Reference ๐Ÿ™‡

https://ko.javascript.info/
https://poiemaweb.com/

profile
์–ด๋–ป๊ฒŒ ์ด๊ฑธ ํ’€์–ด๋‚ผ ์ˆ˜ ์žˆ์„๊นŒ

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