인터페이스(Interface)
: 소프트웨어 개발에서 서로 다른 구성 요소가 소통하거나 상호작용할 수 있도록 설계된 접점 또는 규약을 의미합니다. 프로그래밍 언어, 사용자 경험, 시스템 설계 등 다양한 맥락에서 사용
파싱(Parsing)
: 문자열 형태로 작성된 데이터를 구조화된 형식으로 변환하는 과정.
브라우저에서는 HTML, CSS, JavaScript 코드를 읽고 분석하여 문서 구조(DOM)를 생성하거나 스타일을 적용하는 과정.
Virtual DOM 업데이트:
Diffing 알고리즘:
: DOM에서 변경된 부분을 효율적으로 찾아 실제 DOM에 최소한의 업데이트를 적용하기 위해 사용하는 최적화된 비교 방법.
Patch:
:Patch는 두 데이터 구조(예: 가상 DOM)의 차이점(Diffing)을 기반으로 변경 사항만을 적용하기 위해 생성되는 업데이트 명령 또는 수정 단위를 의미.
특징 | DOM | 가상 DOM |
---|---|---|
정의 | 브라우저가 사용하는 문서 모델. | 메모리에 유지되는 DOM의 사본. |
조작 방식 | 직접 DOM 노드를 수정. | 가상 DOM에서 변경 후 비교(diff). |
성능 | 빈번한 조작은 성능 저하를 유발. | 최소한의 DOM 업데이트로 효율적. |
사용 사례 | JavaScript 기반 직접 조작. | React와 같은 라이브러리에서 사용. |
"복잡한 DOM 조작을 추상화"
: DOM을 직접 다루는 복잡한 과정을 감추고, 간단한 API나 선언적 방식으로 처리할 수 있도록 도와준다는 의미.
개발자가 DOM의 세부적인 구조나 조작 방식을 몰라도, 필요한 동작을 간편하게 수행할 수 있게 만들어주는 방식.
Rendering(렌더링)
: 애플리케이션에서 데이터를 화면에 시각적으로 표시하는 과정
React의 렌더링 과정은 UI를 그리기 위한 선언적 업데이트 프로세스로 이루어짐.
선언적 업데이트
: "어떻게(how)"가 아니라 "무엇(what)"을 보여줘야 하는지를 선언적으로 표현하는 방식.
React에서 UI 업데이트를 수행할 때,
개발자는 현재 상태(state)나 props에 따라 UI가 어떻게 보여야 할지 선언적으로 정의하고,
React는 내부적으로 DOM을 효율적으로 업데이트함.
이를 통해 React는 상태나 props가 변경될 때, 변경된 부분만 DOM에 업데이트.
< 주요 단계 >
초기 렌더링
ReactDOM.render()
호출 시 컴포넌트 트리를 탐색하며 가상 DOM(Virtual DOM)을 생성.가상 DOM 비교 (Reconciliation)
Reconciliation(조화 과정)
:React가 가상 DOM(Virtual DOM)과 실제 DOM 간의 차이(Diff)를 비교하여 효율적으로 변경 사항을 업데이트하는 프로세스.
렌더링 및 커밋
import React, { useState } from "react";
const App = () => {
const [count, setCount] = useState(0);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
};
export default App;
setCount
호출로 count
가 업데이트.Count: 0
이 Count: 1
로 바뀜.React에서 컴포넌트가 그려지는 타이밍은 다음 단계에 따라 결정 :
초기 렌더링: 컴포넌트가 DOM에 추가될 때 실행.
useEffect
는 DOM 업데이트 이후 실행.useLayoutEffect
는 DOM이 업데이트되기 전에 동기적으로 실행.재렌더링 (Re-rendering): 상태나 props가 변경될 때 실행.
언마운트: 컴포넌트가 DOM에서 제거될 때 실행.
useEffect
에서 반환된 클린업 함수 실행.import React, { useEffect } from "react";
const MyComponent = ({ value }) => {
useEffect(() => {
console.log("컴포넌트가 렌더링됨");
return () => {
console.log("컴포넌트가 언마운트됨");
};
}, [value]);
return <div>{value}</div>;
};
export default MyComponent;
value
변경 → 컴포넌트 재렌더링.return
부분 → 언마운트 시 클린업 작업 실행.React의 생명주기는 컴포넌트가 생성, 업데이트, 제거되는 과정
< 주요 단계 >
마운트(Mount): 컴포넌트가 DOM에 삽입되는 단계.
useEffect
실행.constructor
→ render
→ componentDidMount
.업데이트(Update): 상태 또는 props 변경으로 컴포넌트가 다시 렌더링되는 단계.
useEffect
에서 의존성 배열에 따라 실행.componentDidUpdate
.언마운트(Unmount): 컴포넌트가 DOM에서 제거되는 단계.
useEffect
의 반환 함수 실행.componentWillUnmount
.결과 :
useEffect
실행.setCount
호출 → count
변경 → useEffect
다시 실행.useEffect
의 클린업 실행.요약 :
useEffect
실행.: 브라우저가 HTML, CSS, JavaScript 등을 받아 화면에 표시 가능한 최종 그래픽을 생성하는 일련의 단계
: 브라우저가 HTML 파일을 해석하여 DOM(Document Object Model) 트리를 생성.
<script>
태그를 만나면 JavaScript 실행으로 인해 파싱이 잠시 중단될 수 있음.<style>
태그의 내용)을 파싱.CSSOM (CSS Object Model)
: 브라우저가 CSS 스타일 규칙을 파싱하여 생성한 객체 모델
CSSOM은 DOM(Document Object Model)과 함께 브라우저가 웹페이지의 레이아웃과 스타일을 결정하는 데 사용.
<div>
안에 다른 요소가 있다면, 부모와 자식의 크기와 위치를 모두 계산.<!DOCTYPE html>
<html>
<head>
<style>
h1 {
color: blue;
font-size: 24px;
}
</style>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
<h1>
태그를 DOM에 추가.h1
스타일을 CSSOM에 추가.h1
요소의 스타일 적용.h1
의 크기와 위치 계산.h1
을 파란색 텍스트로 화면에 표시.