Reactμ Reconciliation νλ‘μΈμ€ λ° Virtual DOMμ λν μ¬μΈ΅ λΆμμΌλ‘, μ ν리μΌμ΄μ μ±λ₯ ν₯μμ μν μ΅μ ν κΈ°μ μ μ΄ν΄λ΄ λλ€.
React Reconciliation: μ±λ₯ μ΅μ νλ₯Ό μν Virtual DOM
Reactλ μ»΄ν¬λνΈ κΈ°λ° μν€ν μ²μ μ μΈμ νλ‘κ·Έλλ° λͺ¨λΈλ‘ νλ‘ νΈμλ κ°λ°μ νλͺ μ μΌμΌμΌ°μ΅λλ€. React ν¨μ¨μ±μ ν΅μ¬μ Virtual DOMκ³Ό Reconciliationμ΄λΌλ νλ‘μΈμ€ μ¬μ©μ μμ΅λλ€. μ΄ κΈ°μ¬μμλ Reactμ Reconciliation μκ³ λ¦¬μ¦, Virtual DOM μ΅μ ν λ° React μ ν리μΌμ΄μ μ΄ μ μΈκ³ μ¬μ©μλ₯Ό μν΄ λΉ λ₯΄κ³ λ°μμ±μ΄ λ°μ΄λμ§ νμΈνλ μ€μ©μ μΈ κΈ°μ μ λν ν¬κ΄μ μΈ νμμ μ 곡ν©λλ€.
Virtual DOM μ΄ν΄
Virtual DOMμ μ€μ DOMμ λ©λͺ¨λ¦¬ λ΄ ννμ λλ€. Reactκ° μ μ§ κ΄λ¦¬νλ μ¬μ©μ μΈν°νμ΄μ€μ κ°λ²Όμ΄ 볡μ¬λ³Έμ΄λΌκ³ μκ°νμμμ€. Reactλ μ€μ DOM(λλ¦¬κ³ λΉμ©μ΄ λ§μ΄ λ¬)μ μ§μ μ‘°μνλ λμ Virtual DOMμ μ‘°μν©λλ€. μ΄ μΆμνλ₯Ό ν΅ν΄ Reactλ λ³κ²½ μ¬νμ μΌκ΄ μ²λ¦¬νκ³ ν¨μ¨μ μΌλ‘ μ μ©ν μ μμ΅λλ€.
Virtual DOMμ μ¬μ©νλ μ΄μ ?
- μ±λ₯: μ€μ DOMμ μ§μ μ‘°μνλ©΄ λ릴 μ μμ΅λλ€. Virtual DOMμ μ¬μ©νλ©΄ Reactλ μ€μ λ‘ λ³κ²½λ DOM λΆλΆλ§ μ λ°μ΄νΈνμ¬ μ΄λ¬ν μμ μ μ΅μνν μ μμ΅λλ€.
- νλ«νΌ κ° νΈνμ±: Virtual DOMμ κΈ°λ³Έ νλ«νΌμ μΆμννμ¬ λ€μν λΈλΌμ°μ λ° μ₯μΉμμ μΌκ΄λκ² μ€νν μ μλ React μ ν리μΌμ΄μ μ λ μ½κ² κ°λ°ν μ μμ΅λλ€.
- κ°μνλ κ°λ°: Reactμ μ μΈμ μ κ·Ό λ°©μμ κ°λ°μκ° UIλ₯Ό μ λ°μ΄νΈνλ λ° νμν νΉμ λ¨κ³κ° μλ UIμ μνλ μνμ μ§μ€ν μ μλλ‘ νμ¬ κ°λ°μ κ°μνν©λλ€.
Reconciliation νλ‘μΈμ€ μ€λͺ
Reconciliationμ Reactκ° Virtual DOMμ λ³κ²½ μ¬νμ κΈ°λ°μΌλ‘ μ€μ DOMμ μ λ°μ΄νΈνλ λ° μ¬μ©νλ μκ³ λ¦¬μ¦μ λλ€. μ»΄ν¬λνΈμ μν λλ propsκ° λ³κ²½λλ©΄ Reactλ μ Virtual DOM νΈλ¦¬λ₯Ό λ§λλλ€. κ·Έλ° λ€μ μ΄ μ νΈλ¦¬λ₯Ό μ΄μ νΈλ¦¬μ λΉκ΅νμ¬ μ€μ DOMμ μ λ°μ΄νΈνλ λ° νμν μ΅μνμ λ³κ²½ μ¬ν μ§ν©μ κ²°μ ν©λλ€. μ΄ νλ‘μΈμ€λ μ 체 DOMμ λ€μ λ λλ§νλ κ²λ³΄λ€ ν¨μ¬ ν¨μ¨μ μ λλ€.
Reconciliationμ μ£Όμ λ¨κ³:
- μ»΄ν¬λνΈ μ λ°μ΄νΈ: μ»΄ν¬λνΈμ μνκ° λ³κ²½λλ©΄ Reactλ ν΄λΉ μ»΄ν¬λνΈμ ν΄λΉ νμ μμμ λ€μ λ λλ§μ νΈλ¦¬κ±°ν©λλ€.
- Virtual DOM λΉκ΅: Reactλ μ Virtual DOM νΈλ¦¬λ₯Ό μ΄μ Virtual DOM νΈλ¦¬μ λΉκ΅ν©λλ€.
- Diffing μκ³ λ¦¬μ¦: Reactλ diffing μκ³ λ¦¬μ¦μ μ¬μ©νμ¬ λ νΈλ¦¬ κ°μ μ°¨μ΄μ μ μλ³ν©λλ€. μ΄ μκ³ λ¦¬μ¦μ νλ‘μΈμ€λ₯Ό κ°λ₯ν ν ν¨μ¨μ μΌλ‘ λ§λ€κΈ° μν΄ λ³΅μ‘μ±κ³Ό ν΄λ¦¬μ€ν±μ κ°μ§κ³ μμ΅λλ€.
- DOM ν¨μΉ: μ°¨μ΄μ μ κΈ°λ°μΌλ‘ Reactλ μ€μ DOMμ νμν λΆλΆλ§ μ λ°μ΄νΈν©λλ€.
Diffing μκ³ λ¦¬μ¦μ ν΄λ¦¬μ€ν±
Reactμ diffing μκ³ λ¦¬μ¦μ Reconciliation νλ‘μΈμ€λ₯Ό μ΅μ ννκΈ° μν΄ λͺ κ°μ§ μ£Όμ κ°μ μ μ¬μ©ν©λλ€.
- μλ‘ λ€λ₯Έ μ νμ λ μμλ μλ‘ λ€λ₯Έ νΈλ¦¬λ₯Ό μμ±ν©λλ€: μ»΄ν¬λνΈμ λ£¨νΈ μμ μ νμ΄ λ³κ²½λλ©΄(μ:
<div>
μμ<span>
μΌλ‘) Reactλ μ΄μ νΈλ¦¬λ₯Ό μΈλ§μ΄νΈνκ³ μ νΈλ¦¬λ₯Ό μμ ν λ§μ΄νΈν©λλ€. - κ°λ°μλ μ΄λ€ νμ μμκ° μλ‘ λ€λ₯Έ λ λλ§μμ μμ μ μΈμ§ ννΈν μ μμ΅λλ€:
key
propμ μ¬μ©νμ¬ κ°λ°μλ Reactκ° λμΌν κΈ°λ³Έ λ°μ΄ν°μ ν΄λΉνλ νμ μμλ₯Ό μλ³νλ λ° λμμ μ€ μ μμ΅λλ€. μ΄λ λͺ©λ‘ λ° κΈ°ν λμ μ½ν μΈ λ₯Ό ν¨μ¨μ μΌλ‘ μ λ°μ΄νΈνλ λ° μ€μν©λλ€.
Reconciliation μ΅μ ν: λͺ¨λ² μ¬λ‘
Reactμ Reconciliation νλ‘μΈμ€λ λ³Έμ§μ μΌλ‘ ν¨μ¨μ μ΄μ§λ§ κ°λ°μκ° μ±λ₯μ λμ± μ΅μ ννκ³ νΉν μΈν°λ· μ°κ²° μλκ° λ리거λ μ μΈκ³ λ€λ₯Έ μ§μμ μ₯μΉλ₯Ό μ¬μ©νλ μ¬μ©μμκ² μνν μ¬μ©μ κ²½νμ 보μ₯νκΈ° μν΄ μ¬μ©ν μ μλ λͺ κ°μ§ κΈ°μ μ΄ μμ΅λλ€.
1. ν€λ₯Ό ν¨κ³Όμ μΌλ‘ μ¬μ©
key
propμ μμ λͺ©λ‘μ λμ μΌλ‘ λ λλ§ν λ νμμ μ
λλ€. κ° μμμ λν μμ μ μΈ μλ³μλ₯Ό Reactμ μ 곡νμ¬ μ 체 λͺ©λ‘μ λΆνμνκ² λ€μ λ λλ§νμ§ μκ³ νλͺ©μ ν¨μ¨μ μΌλ‘ μ
λ°μ΄νΈ, μ¬μ λ ¬ λλ μ κ±°ν μ μμ΅λλ€. ν€κ° μμΌλ©΄ Reactλ λ³κ²½ μ¬νμ΄ μμ λλ§λ€ λͺ¨λ λͺ©λ‘ νλͺ©μ λ€μ λ λλ§ν΄μΌ νλ―λ‘ μ±λ₯μ μ¬κ°ν μν₯μ λ―ΈμΉ©λλ€.
μ:
APIμμ κ°μ Έμ¨ μ¬μ©μ λͺ©λ‘μ κ³ λ €νμμμ€.
const UserList = ({ users }) => {
return (
<ul>
{users.map(user => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);
};
μ΄ μμμλ user.id
κ° ν€λ‘ μ¬μ©λ©λλ€. μμ μ μ΄κ³ κ³ μ ν μλ³μλ₯Ό μ¬μ©νλ κ²μ΄ μ€μν©λλ€. λ°°μ΄ μΈλ±μ€λ₯Ό ν€λ‘ μ¬μ©νμ§ λ§μμμ€. λͺ©λ‘μ΄ μ¬μ λ ¬λ λ μ±λ₯ λ¬Έμ κ° λ°μν μ μμ΅λλ€.
2. React.memo
λ₯Ό μ¬μ©νμ¬ λΆνμν λ€μ λ λλ§ λ°©μ§
React.memo
λ ν¨μν μ»΄ν¬λνΈλ₯Ό λ©λͺ¨μ΄μ μ΄μ
νλ κ³ μ°¨ μ»΄ν¬λνΈμ
λλ€. propsκ° λ³κ²½λμ§ μμ κ²½μ° μ»΄ν¬λνΈκ° λ€μ λ λλ§λμ§ μλλ‘ ν©λλ€. μ΄λ νΉν μμ£Ό λ λλ§λλ μμ μ»΄ν¬λνΈμ κ²½μ° μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
μ:
import React from 'react';
const MyComponent = React.memo(({ data }) => {
console.log('MyComponent rendered');
return <div>{data}</div>;
});
export default MyComponent;
μ΄ μμμλ data
propμ΄ λ³κ²½λ κ²½μ°μλ§ MyComponent
κ° λ€μ λ λλ§λ©λλ€. μ΄λ 볡μ‘ν κ°μ²΄λ₯Ό propsλ‘ μ λ¬ν λ νΉν μ μ©ν©λλ€. κ·Έλ¬λ React.memo
μμ μννλ μμ λΉκ΅μ μ€λ²ν€λλ₯Ό μΌλμ λμμμ€. prop λΉκ΅κ° μ»΄ν¬λνΈμ λ€μ λ λλ§λ³΄λ€ λΉμ©μ΄ λ§μ΄ λλ κ²½μ° μ μ©νμ§ μμ μ μμ΅λλ€.
3. useCallback
λ° useMemo
Hooks μ¬μ©
useCallback
λ° useMemo
hooksλ ν¨μμ 볡μ‘ν κ°μ²΄λ₯Ό νμ μ»΄ν¬λνΈμ propsλ‘ μ λ¬ν λ μ±λ₯μ μ΅μ ννλ λ° νμμ μ
λλ€. μ΄λ¬ν hooksλ ν¨μ λλ κ°μ λ©λͺ¨μ΄μ μ΄μ
νμ¬ νμ μ»΄ν¬λνΈμ λΆνμν λ€μ λ λλ§μ λ°©μ§ν©λλ€.
useCallback
μ:
import React, { useCallback } from 'react';
const ParentComponent = () => {
const handleClick = useCallback(() => {
console.log('Button clicked');
}, []);
return <ChildComponent onClick={handleClick} />;
};
const ChildComponent = React.memo(({ onClick }) => {
console.log('ChildComponent rendered');
return <button onClick={onClick}>Click me</button>;
});
export default ParentComponent;
μ΄ μμμλ useCallback
μ΄ handleClick
ν¨μλ₯Ό λ©λͺ¨μ΄μ μ΄μ
ν©λλ€. useCallback
μ΄ μμΌλ©΄ ParentComponent
κ° λ λλ§λ λλ§λ€ μ ν¨μκ° μμ±λμ΄ propsκ° λ
Όλ¦¬μ μΌλ‘ λ³κ²½λμ§ μμ κ²½μ°μλ ChildComponent
κ° λ€μ λ λλ§λ©λλ€.
useMemo
μ:
import React, { useMemo } from 'react';
const ParentComponent = ({ data }) => {
const processedData = useMemo(() => {
// Perform expensive data processing
return data.map(item => item * 2);
}, [data]);
return <ChildComponent data={processedData} />;
};
export default ParentComponent;
μ΄ μμμλ useMemo
κ° λΉμ©μ΄ λ§μ΄ λλ λ°μ΄ν° μ²λ¦¬ κ²°κ³Όλ₯Ό λ©λͺ¨μ΄μ μ΄μ
ν©λλ€. processedData
κ°μ data
propμ΄ λ³κ²½λ λλ§ λ€μ κ³μ°λ©λλ€.
4. ShouldComponentUpdate ꡬν(ν΄λμ€ μ»΄ν¬λνΈμ©)
ν΄λμ€ μ»΄ν¬λνΈμ κ²½μ° shouldComponentUpdate
λΌμ΄νμ¬μ΄ν΄ λ©μλλ₯Ό μ¬μ©νμ¬ μ»΄ν¬λνΈκ° λ€μ λ λλ§λμ΄μΌ νλ μκΈ°λ₯Ό μ μ΄ν μ μμ΅λλ€. μ΄ λ©μλλ₯Ό μ¬μ©νλ©΄ νμ¬ λ° λ€μ propsμ μνλ₯Ό μλμΌλ‘ λΉκ΅νκ³ μ»΄ν¬λνΈλ₯Ό μ
λ°μ΄νΈν΄μΌ νλ κ²½μ° true
λ₯Ό λ°ννκ³ κ·Έλ μ§ μμ κ²½μ° false
λ₯Ό λ°νν μ μμ΅λλ€.
μ:
import React from 'react';
class MyComponent extends React.Component {
shouldComponentUpdate(nextProps, nextState) {
// Compare props and state to determine if an update is needed
if (nextProps.data !== this.props.data) {
return true;
}
return false;
}
render() {
console.log('MyComponent rendered');
return <div>{this.props.data}</div>;
}
}
export default MyComponent;
κ·Έλ¬λ μΌλ°μ μΌλ‘ λ λμ μ±λ₯κ³Ό κ°λ
μ±μ μν΄ hooks(React.memo
, useCallback
, useMemo
)κ° μλ ν¨μν μ»΄ν¬λνΈλ₯Ό μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
5. λ λλ§μμ μΈλΌμΈ ν¨μ μ μ λ°©μ§
λ λλ§ λ©μλ λ΄μμ μ§μ ν¨μλ₯Ό μ μνλ©΄ λ λλ§λ λλ§λ€ μ ν¨μ μΈμ€ν΄μ€κ° μμ±λ©λλ€. μ΄λ‘ μΈν΄ νμ μ»΄ν¬λνΈκ° λΆνμνκ² λ€μ λ λλ§λ μ μμ΅λλ€. propsκ° νμ λ€λ₯Έ κ²μΌλ‘ κ°μ£ΌλκΈ° λλ¬Έμ λλ€.
λμ μ΅κ΄:
const MyComponent = () => {
return <button onClick={() => console.log('Clicked')}>Click me</button>;
};
μ’μ μ΅κ΄:
import React, { useCallback } from 'react';
const MyComponent = () => {
const handleClick = useCallback(() => {
console.log('Clicked');
}, []);
return <button onClick={handleClick}>Click me</button>;
};
6. μν μ λ°μ΄νΈ μΌκ΄ μ²λ¦¬
Reactλ μ¬λ¬ μν μ
λ°μ΄νΈλ₯Ό λ¨μΌ λ λλ§ μ£ΌκΈ°λ‘ μΌκ΄ μ²λ¦¬ν©λλ€. μ΄λ κ² νλ©΄ DOM μ
λ°μ΄νΈ μλ₯Ό μ€μ¬ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€. κ·Έλ¬λ κ²½μ°μ λ°λΌ ReactDOM.flushSync
λ₯Ό μ¬μ©νμ¬ μν μ
λ°μ΄νΈλ₯Ό λͺ
μμ μΌλ‘ μΌκ΄ μ²λ¦¬ν΄μΌ ν μ μμ΅λλ€(νΉμ μλ리μ€μμ μΌκ΄ μ²λ¦¬μ μ΄μ μ 무ν¨νν μ μμΌλ―λ‘ μ£Όμν΄μ μ¬μ©νμμμ€).
7. λ³κ²½ λΆκ°λ₯ν λ°μ΄ν° ꡬ쑰 μ¬μ©
λ³κ²½ λΆκ°λ₯ν λ°μ΄ν° ꡬ쑰λ₯Ό μ¬μ©νλ©΄ propsμ μνμ λ³κ²½ μ¬νμ κ°μ§νλ νλ‘μΈμ€λ₯Ό λ¨μνν μ μμ΅λλ€. λ³κ²½ λΆκ°λ₯ν λ°μ΄ν° ꡬ쑰λ λ³κ²½ μ¬νμ΄ κΈ°μ‘΄ κ°μ²΄λ₯Ό μμ νλ λμ μ κ°μ²΄λ₯Ό μμ±νλλ‘ λ³΄μ₯ν©λλ€. μ΄λ κ² νλ©΄ κ°μ²΄μ λμΌμ±μ λΉκ΅νκ³ λΆνμν λ€μ λ λλ§μ λ°©μ§νλ κ²μ΄ λ μ¬μμ§λλ€.
Immutable.js λλ Immerμ κ°μ λΌμ΄λΈλ¬λ¦¬λ λ³κ²½ λΆκ°λ₯ν λ°μ΄ν° ꡬ쑰λ₯Ό ν¨κ³Όμ μΌλ‘ μ¬μ©νλ λ° λμμ΄ λ μ μμ΅λλ€.
8. μ½λ λΆν
μ½λ λΆν μ μ ν리μΌμ΄μ
μ μμ² μ λ‘λν μ μλ λ μμ μ²ν¬λ‘ λΆν νλ κΈ°μ μ
λλ€. μ΄λ κ² νλ©΄ μ΄κΈ° λ‘λ μκ°μ΄ μ€μ΄λ€κ³ νΉν λ€νΈμν¬ μ°κ²° μλκ° λλ¦° μ¬μ©μμ κ²½μ° μ ν리μΌμ΄μ
μ μ 체 μ±λ₯μ΄ ν₯μλ©λλ€. Reactλ React.lazy
λ° Suspense
μ»΄ν¬λνΈλ₯Ό μ¬μ©νμ¬ μ½λ λΆν μ λν κΈ°λ³Έ μ 곡 μ§μμ μ 곡ν©λλ€.
μ:
import React, { Suspense } from 'react';
const MyComponent = React.lazy(() => import('./MyComponent'));
const App = () => {
return (
<Suspense fallback={<div>Loading...</div>}>
<MyComponent />
</Suspense>
);
};
9. μ΄λ―Έμ§ μ΅μ ν
μ΄λ―Έμ§ μ΅μ νλ λͺ¨λ μΉ μ ν리μΌμ΄μ μ μ±λ₯μ ν₯μμν€λ λ° λ§€μ° μ€μν©λλ€. ν° μ΄λ―Έμ§λ λ‘λ μκ°μ ν¬κ² λλ¦¬κ³ νΉν μΈν°λ· μΈνλΌκ° μ νλ μ§μμ μ¬μ©μμ κ²½μ° κ³Όλν λμνμ μλΉν μ μμ΅λλ€. λ€μμ λͺ κ°μ§ μ΄λ―Έμ§ μ΅μ ν κΈ°μ μ λλ€.
- μ΄λ―Έμ§ μμΆ: TinyPNG λλ ImageOptimκ³Ό κ°μ λꡬλ₯Ό μ¬μ©νμ¬ νμ§μ μ νμν€μ§ μκ³ μ΄λ―Έμ§λ₯Ό μμΆν©λλ€.
- μ¬λ°λ₯Έ νμ μ¬μ©: μ΄λ―Έμ§ μ½ν μΈ μ λ°λΌ μ μ ν μ΄λ―Έμ§ νμμ μ νν©λλ€. JPEGλ μ¬μ§μ μ ν©νκ³ PNGλ ν¬λͺ λκ° μλ κ·Έλν½μ λ μ ν©ν©λλ€. WebPλ JPEG λ° PNGμ λΉν΄ λ°μ΄λ μμΆ λ° νμ§μ μ 곡ν©λλ€.
- λ°μν μ΄λ―Έμ§ μ¬μ©: μ¬μ©μμ νλ©΄ ν¬κΈ° λ° μ₯μΉμ λ°λΌ λ€λ₯Έ μ΄λ―Έμ§ ν¬κΈ°λ₯Ό μ 곡ν©λλ€.
<picture>
μμμ<img>
μμμsrcset
μμ±μ μ¬μ©νμ¬ λ°μν μ΄λ―Έμ§λ₯Ό ꡬνν μ μμ΅λλ€. - μ΄λ―Έμ§ μ§μ° λ‘λ: μ΄λ―Έμ§κ° λ·°ν¬νΈμ νμλ λλ§ μ΄λ―Έμ§λ₯Ό λ‘λν©λλ€. μ΄λ κ² νλ©΄ μ΄κΈ° λ‘λ μκ°μ΄ μ€μ΄λ€κ³ μ ν리μΌμ΄μ μ μΈμ§λ μ±λ₯μ΄ ν₯μλ©λλ€. react-lazyloadμ κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ©΄ μ§μ° λ‘λ ꡬνμ κ°μνν μ μμ΅λλ€.
10. μλ² μΈ‘ λ λλ§(SSR)
μλ² μΈ‘ λ λλ§(SSR)μ μλ²μμ React μ ν리μΌμ΄μ μ λ λλ§νκ³ λ―Έλ¦¬ λ λλ§λ HTMLμ ν΄λΌμ΄μΈνΈμ 보λ΄λ κ²μ ν¬ν¨ν©λλ€. μ΄λ κ² νλ©΄ μ΄κΈ° λ‘λ μκ°κ³Ό κ²μ μμ§ μ΅μ ν(SEO)κ° ν₯μλ μ μμΌλ©°, νΉν λ λμ μ μΈκ³ μ¬μ©μμκ² λλ¬νλ λ° μ μ©ν©λλ€.
Next.js λ° Gatsbyμ κ°μ νλ μμν¬λ SSRμ λν κΈ°λ³Έ μ 곡 μ§μμ μ 곡νκ³ κ΅¬νμ λ μ½κ² λ§λλλ€.
11. μΊμ± μ λ΅
μΊμ± μ λ΅μ ꡬννλ©΄ μλ²μ λν μμ² μλ₯Ό μ€μ¬ React μ ν리μΌμ΄μ μ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€. μΊμ±μ λ€μμ ν¬ν¨νμ¬ λ€μν μμ€μμ ꡬνν μ μμ΅λλ€.
- λΈλΌμ°μ μΊμ±: λΈλΌμ°μ μ μ΄λ―Έμ§, CSS λ° JavaScript νμΌκ³Ό κ°μ μ μ μμ°μ μΊμνλλ‘ μ§μνλλ‘ HTTP ν€λλ₯Ό ꡬμ±ν©λλ€.
- μλΉμ€ μ컀 μΊμ±: μλΉμ€ μ컀λ₯Ό μ¬μ©νμ¬ API μλ΅ λ° κΈ°ν λμ λ°μ΄ν°λ₯Ό μΊμν©λλ€.
- μλ² μΈ‘ μΊμ±: μλ²μμ μΊμ± λ©μ»€λμ¦μ ꡬννμ¬ λ°μ΄ν°λ² μ΄μ€μ λΆνλ₯Ό μ€μ΄κ³ μλ΅ μκ°μ κ°μ ν©λλ€.
12. λͺ¨λν°λ§ λ° νλ‘νμΌλ§
React μ ν리μΌμ΄μ μ μ κΈ°μ μΌλ‘ λͺ¨λν°λ§νκ³ νλ‘νμΌλ§νλ©΄ μ±λ₯ λ³λͺ© νμκ³Ό κ°μ μμμ μλ³νλ λ° λμμ΄ λ μ μμ΅λλ€. React Profiler, Chrome DevTools λ° Lighthouseμ κ°μ λꡬλ₯Ό μ¬μ©νμ¬ μ ν리μΌμ΄μ μ μ±λ₯μ λΆμνκ³ λλ¦° μ»΄ν¬λνΈ λλ λΉν¨μ¨μ μΈ μ½λλ₯Ό μλ³ν©λλ€.
κ²°λ‘
Reactμ Reconciliation νλ‘μΈμ€ λ° Virtual DOMμ κ³ μ±λ₯ μΉ μ ν리μΌμ΄μ μ ꡬμΆνκΈ° μν κ°λ ₯ν κΈ°λ°μ μ 곡ν©λλ€. κΈ°λ³Έ λ©μ»€λμ¦μ μ΄ν΄νκ³ μ΄ κΈ°μ¬μμ μ€λͺ ν μ΅μ ν κΈ°μ μ μ μ©ν¨μΌλ‘μ¨ κ°λ°μλ λΉ λ₯΄κ³ λ°μμ±μ΄ λ°μ΄λλ©° μ μΈκ³ μ¬μ©μμκ² νλ₯ν μ¬μ©μ κ²½νμ μ 곡νλ React μ ν리μΌμ΄μ μ λ§λ€ μ μμ΅λλ€. κ°μ μμμ μλ³νκ³ μ§νν¨μ λ°λΌ μ΅μ μ μ±λ₯μ μ μ§ν μ μλλ‘ μ ν리μΌμ΄μ μ μ§μμ μΌλ‘ νλ‘νμΌλ§νκ³ λͺ¨λν°λ§νλ κ²μ μμ§ λ§μμμ€.