FE/React
HTML의 DOM과 JavaScript의 관계 & React의 탄생
시녜's
2023. 3. 5. 02:40
1. DOM(document object model) 문서객체모델
- 웹페이지(HTML, XML)의 콘텐츠 및 구조, 스타일 요소를 구조화시켜 프로그래밍 언어가 해당 문서에 접근하고 읽고 조작할 수 있도록 API를 제공하는 일종의 인터페이스(의사소통 매개체)이다.
- 웹페이지(HTML문서)를 계층적 구조와 정보로 표현하며 이를 제어할 수 있는 property와 method를 제공하는 트리 자료구조
-> 최상위 노드(root)에서 시작해 자식 노드를 가진다
▶ Document node(root)
- 최상위 루트노드로 window객체의 document 프로퍼티로 바인딩되어있다. 문서에 하나만 존재한다.
▶ Element node
- html, head, body, meta, title, div, h2 ...
- 속성을 가질 수 있는 노드로 부모-자식 관계를 가지는 계층구조를 이룬다.
▶ Attribute node
- 노드에 대한 요소 정보를 가지는 노드이다. 부모-자식 관계가 아닌 해당 노드와 바인딩되어 있는 구조이다.
▶ text node
- 노드의 정보를 표현하는 가장 마지막에 위치하는 자식 노드 (리프노드)
- <h1> 태그 안에 들어가는 텍스트가 text node </h1>
DOM - JavaScript
📌 웹 브라우저에 기본적으로 내장되어 있는 자바스크립트로 (selector API 사용) DOM의 노드를 제어해 동적인 기능을 줄 수 있다.
※ DOM은 js만으로 구현되는 것이 아니지만 js의 아성을 이길 수 있는 언어가 없다.
📌 HTML문서에 없는 노드를 만들고 이어 붙여 웹 페이지에 렌더링 하는 과정이 동적으로 구현되는 것이다.
DOM 객체 구성요소
- 프로퍼티(property) : DOM 객체의 멤버 변수로 HTML 태그의 속성을 반영한다.
- 메서드(method) : DOM 객체의 멤버 함수로 HTML 태그를 제어한다.
- 컬렉션(collection) : 정보를 집합적으로 표현하는 일종의 배열이다. 예) children 컬렉션은 DOM 객체의 모든 자식 DOM 객체에 대한 주소를 가진다.
- 이벤트 리스너(event listener) : HTML 태그에 작성된 이벤트 리스너(onclick, onchange 등)들을 그대로 가진다.
- 스타일(style) : 이 프로퍼티를 통해 HTML 태그에 적용된 CSS 스타일 시트에 접근이 가능하다.
2. 리액트의 탄생
📌 배경
- dom을 직접 건드리는 작업은 번거롭다.
- 사용자와 인터렉션이 많아질수록 동적인 UI를 표현하려면 코드가 복잡해지며 관리하기 어려움
📌 react 발상
- 어떠한 상태가 바뀌었을 때, 처음부터 DOM을 초기화하고 새로 만들어서 보여주자는 아이디어에서 시작
📌 문제점
- 매번 이렇게 하게 되면 다양한 문제가 발생
📌 해결
- 메모리에 가상 DOM을 만든다.(속도와 성능 문제 해결)
- 업데이트가 필요한 부분만 가상 DOM으로 수정한다.
- 그 이후 REACT의 알고리즘을 통해 다른 부분을 감지하여 실제 브라우저의 DOM에 패치시켜준다.