React μ€μΌμ€λ¬κ° μμ νμΉκΈ° μκ³ λ¦¬μ¦μ νμ©νμ¬ μ΄λ»κ² μμ λΆλ°°λ₯Ό μ΅μ ννκ³ , μ μΈκ³ μ¬μ©μλ₯Ό μν μΉ μ ν리μΌμ΄μ μ μ±λ₯κ³Ό λ°μμ±μ ν₯μμν€λμ§ μμ보μΈμ.
React μ€μΌμ€λ¬ μμ νμΉκΈ°: μμ λΆλ°° μ΅μ ν
λμμμ΄ λ°μ νλ μΉ κ°λ° νκ²½μμ μ ν리μΌμ΄μ μ±λ₯ μ΅μ νλ κ°μ₯ μ€μν©λλ€. μ¬μ©μ μΈν°νμ΄μ€ ꡬμΆμ μν μΈκΈ° μλ μλ°μ€ν¬λ¦½νΈ λΌμ΄λΈλ¬λ¦¬μΈ Reactλ λ°μμ±κ³Ό μνν μ¬μ©μ κ²½νμ 보μ₯νκΈ° μν΄ ν¨μ¨μ μΈ μμ κ΄λ¦¬μ μμ‘΄ν©λλ€. μ΄λ₯Ό λ¬μ±νκΈ° μν ν΅μ¬ κΈ°μ μ€ νλλ μ¬μ© κ°λ₯ν μ€λ λλ μ컀 κ°μ μμ μ λμ μΌλ‘ λΆλ°°νλ μκ³ λ¦¬μ¦μΈ 'μμ νμΉκΈ°(work stealing)'μ λλ€. μ΄ λΈλ‘κ·Έ κ²μλ¬Όμμλ React μ€μΌμ€λ¬κ° μμ νμΉκΈ°λ₯Ό νμ©νμ¬ μμ λΆλ°°λ₯Ό μ΅μ ννλ λ°©λ², κ·Έ μ΄μ , κ·Έλ¦¬κ³ μ μΈκ³ κ°λ°μμκ² μ μ© κ°λ₯ν μ€μ©μ μΈ μμ λ₯Ό μμΈν μ΄ν΄λ΄ λλ€.
μ΅μ νμ νμμ± μ΄ν΄νκΈ°
νλ μΉ μ ν리μΌμ΄μ μ μ’ μ’ λ³΅μ‘νλ©°, μ¬μ©μ μΈν°νμ΄μ€ λ λλ§, λ°μ΄ν° κ°μ Έμ€κΈ°, μ¬μ©μ μ λ ₯ μ²λ¦¬, μ λλ©μ΄μ κ΄λ¦¬ λ± λ€μν μμ μ μ²λ¦¬ν©λλ€. μ΄λ¬ν μμ μ κ³μ° μ§μ½μ μΌ μ μμΌλ©°, ν¨κ³Όμ μΌλ‘ κ΄λ¦¬λμ§ μμΌλ©΄ μ±λ₯ λ³λͺ© νμμ μ λ°νμ¬ μ§μ°λκ³ λ°μμ΄ μλ μ¬μ©μ κ²½νμ μ΄λν μ μμ΅λλ€. μ΄ λ¬Έμ λ μ μΈκ³μ μΌλ‘ λ€μν μΈν°λ· μλμ κΈ°κΈ° μ±λ₯μ κ°μ§ μ¬μ©μλ€μκ² λμ± μ¦νλ©λλ€. μ΅μ νλ μ¬μΉκ° μλλΌ, μΌκ΄λκ² κΈμ μ μΈ μ¬μ©μ κ²½νμ μ 곡νκΈ° μν΄ νμμ μ λλ€.
μ±λ₯ λ¬Έμ μ κΈ°μ¬νλ λͺ κ°μ§ μμΈμ λ€μκ³Ό κ°μ΅λλ€:
- μλ°μ€ν¬λ¦½νΈμ λ¨μΌ μ€λ λ νΉμ±: μλ°μ€ν¬λ¦½νΈλ κΈ°λ³Έμ μΌλ‘ λ¨μΌ μ€λ λμ΄λ―λ‘ ν λ²μ νλμ μμ λ§ μ€νν μ μμ΅λλ€. μ΄λ‘ μΈν΄ λ©μΈ μ€λ λκ° μ°¨λ¨λμ΄ μ ν리μΌμ΄μ μ΄ μ¬μ©μ μνΈμμ©μ μλ΅νμ§ λͺ»νκ² λ μ μμ΅λλ€.
- 볡μ‘ν UI μ λ°μ΄νΈ: μ»΄ν¬λνΈ κΈ°λ° μν€ν μ²λ₯Ό κ°μ§ React μ ν리μΌμ΄μ μ νΉν λμ λ°μ΄ν°μ μ¬μ©μ μνΈμμ©μ μ²λ¦¬ν λ μλ§μ UI μ λ°μ΄νΈλ₯Ό ν¬ν¨ν μ μμ΅λλ€.
- λ°μ΄ν° κ°μ Έμ€κΈ°: APIμμ λ°μ΄ν°λ₯Ό κ°μ Έμ€λ κ²μ μκ°μ΄ λ§μ΄ 걸릴 μ μμΌλ©°, λΉλκΈ°μ μΌλ‘ μ²λ¦¬νμ§ μμΌλ©΄ λ©μΈ μ€λ λλ₯Ό μ°¨λ¨ν μ μμ΅λλ€.
- 리μμ€ μ§μ½μ μΈ μμ : μ΄λ―Έμ§ μ²λ¦¬, 볡μ‘ν κ³μ°, λμ©λ λ°μ΄ν° μ‘°μκ³Ό κ°μ νΉμ μμ μ μλΉν 리μμ€λ₯Ό μλΉν μ μμ΅λλ€.
React μ€μΌμ€λ¬μ κ·Έ μν μκ°
React μ€μΌμ€λ¬λ React μνκ³ λ΄μμ μ€μν κ΅¬μ± μμλ‘, μμ μ μ°μ μμλ₯Ό μ νκ³ μ€μΌμ€λ§νμ¬ κ°μ₯ μ€μν μ λ°μ΄νΈκ° λ¨Όμ μ²λ¦¬λλλ‘ μ€κ³λμμ΅λλ€. μ΄λ λ λλ§ νλ‘μΈμ€λ₯Ό κ΄λ¦¬νκΈ° μν΄ λ°±κ·ΈλΌμ΄λμμ μλνμ¬ Reactκ° μ¬μ©μ μΈν°νμ΄μ€λ₯Ό ν¨μ¨μ μΌλ‘ μ λ°μ΄νΈν μ μλλ‘ ν©λλ€. μ£Όμ μν μ λ€μκ³Ό κ°μ μΈ‘λ©΄μ ν¬ν¨νμ¬ Reactκ° μννλ μμ μ μ‘°μ νλ κ²μ λλ€:
- μμ μ°μ μμ μ§μ : μ¬μ©μ μνΈμμ© λ λ°±κ·ΈλΌμ΄λ μμ κ³Ό κ°μ΄ μ€μλμ λ°λΌ μμ μ΄ μ€νλλ μμλ₯Ό κ²°μ ν©λλ€.
- νμ μ¬λΌμ΄μ±(Time Slicing): μμ μ λ μμ λ¨μλ‘ λλκ³ λ²κ°μ μ€ννμ¬ λ©μΈ μ€λ λκ° μ₯μκ° μ°¨λ¨λλ κ²μ λ°©μ§ν©λλ€.
- μμ νμΉκΈ°(ν΅μ¬ μμ): μ¬μ© κ°λ₯ν μ컀λ μ€λ λμ μμ μ λμ μΌλ‘ λΆλ°°νμ¬ λ¦¬μμ€ νμ©μ μ΅μ νν©λλ€.
React μ€μΌμ€λ¬λ Reactμ μ¬μ‘°μ (reconciliation) νλ‘μΈμ€μ ν¨κ» μ¬μ©μ κ²½νμ ν¬κ² ν₯μμν΅λλ€. μ ν리μΌμ΄μ μ΄ κ³μ°λμ΄ λ§μ μμ μ μνν λλ UIκ° λ λ°μμ μΌλ‘ λκ»΄μ§κ² λ§λλλ€. μ€μΌμ€λ¬λ μμ λΆνμ κ· νμ μ μ€νκ² μ‘°μ νμ¬ λ³λͺ© νμμ μ€μ΄κ³ ν¨μ¨μ μΈ λ¦¬μμ€ νμ©μ 보μ₯ν©λλ€.
μμ νμΉκΈ° μκ³ λ¦¬μ¦: μ¬μΈ΅ λΆμ
μμ νμΉκΈ°λ μ¬λ¬ μ€λ λλ μ컀 κ°μ μμ λΆνμ κ· νμ λμ μΌλ‘ λ§μΆλ λ° μ¬μ©λλ λ³λ ¬ νλ‘κ·Έλλ° κΈ°μ μ λλ€. React μ€μΌμ€λ¬μ λ§₯λ½μμ μ΄λ μμ μ λΆλ°°νμ¬ κ° μ€λ λλ μμ»€κ° ν¨κ³Όμ μΌλ‘ νμ©λλλ‘ λμ΅λλ€. μμ νμΉκΈ°μ ν΅μ¬ μμ΄λμ΄λ λ€μκ³Ό κ°μ΅λλ€:
- μμ ν: κ° μ컀(μ€λ λ λλ μ μ© νλ‘μΈμ)λ μμ λ§μ λ‘컬 μμ νλ₯Ό κ°μ§λλ€. μ΄ μμ λ€μ λ λλ§ μ λ°μ΄νΈμ κ°μ΄ μμ»€κ° μνν΄μΌ ν μμ λ¨μλ₯Ό λνλ λλ€.
- μμ μ€ν: κ° μ컀λ μ§μμ μΌλ‘ μμ μ λ‘컬 νλ₯Ό λͺ¨λν°λ§νκ³ μμ μ μ€νν©λλ€. μ컀μ νκ° λΉμ΄ μμ§ μμΌλ©΄ μμ μ κ°μ Έμ μ€νν©λλ€.
- μμ νμΉκΈ° μμ: μ컀μ νκ° λΉκ² λλ©΄, μ¦ λ μ΄μ ν μμ μ΄ μμμ λνλ΄λ©΄, μμ νμΉκΈ° νλ‘μΈμ€λ₯Ό μμν©λλ€.
- λ€λ₯Έ μ컀λ‘λΆν° νμΉκΈ°: λΉμ΄ μλ μ컀λ 무μμλ‘ λ€λ₯Έ μ컀λ₯Ό μ ννκ³ κ·Έ νμμ μμ μ "νμΉλ €κ³ " μλν©λλ€. μΌλ°μ μΌλ‘ μμ μ λ€λ₯Έ μ컀 νμ "맨 μ" λλ λμμ νμ³μ (λ°©ν΄λ₯Ό μ΅μννκΈ° μν΄) μ²λ¦¬λ©λλ€.
- λ‘λ λ°Έλ°μ±: μ΄ λ©μ»€λμ¦μ λ°μ μμ»€κ° κ³ΌλΆνλμ§ μκ³ μ ν΄ μμ»€κ° μ λλ‘ νμ©λμ§ μλ μν©μ λ°©μ§ν©λλ€. μ΄λ μμ λΆνκ° λ³νν¨μ λ°λΌ μ μνλ λμ νλ‘μΈμ€μ λλ€.
μ΄ μ κ·Ό λ°©μμ μ¬μ© κ°λ₯ν 리μμ€ μ λ°μ κ±Έμ³ μμ μ΄ ν¨μ¨μ μΌλ‘ λΆλ°°λλλ‘ λ³΄μ₯νμ¬ λ¨μΌ μμ»€κ° λ³λͺ©μ΄ λλ κ²μ λ°©μ§ν©λλ€. React μ€μΌμ€λ¬μ μμ νμΉκΈ° μκ³ λ¦¬μ¦μ κ° μμ»€κ° μλΉνλ μκ°μ μ΅μννμ¬ μ ν리μΌμ΄μ μ μ λ°μ μΈ μ±λ₯μ ν₯μμν€λ κ²μ λͺ©νλ‘ ν©λλ€.
React μ€μΌμ€λ¬μμ μμ νμΉκΈ°μ μ΄μ
React μ€μΌμ€λ¬μ μμ νμΉκΈ°λ₯Ό ꡬννλ©΄ κ°λ°μμ μ¬μ©μ λͺ¨λμκ² λ€μκ³Ό κ°μ λͺ κ°μ§ μ£Όμ μ΄μ μ΄ μμ΅λλ€:
- λ°μμ± ν₯μ: μμ μ λΆλ°°ν¨μΌλ‘μ¨ μμ νμΉκΈ°λ λ©μΈ μ€λ λκ° μ°¨λ¨λλ κ²μ λ°©μ§νμ¬ λ³΅μ‘ν μμ μ€μλ μ¬μ©μ μΈν°νμ΄μ€κ° κ³μ λ°μνλλ‘ λ³΄μ₯ν©λλ€.
- μ±λ₯ κ°ν: μμ νμΉκΈ°λ 리μμ€ νμ©μ μ΅μ ννμ¬ μ ν리μΌμ΄μ μ΄ μμ μ λ 빨리 μλ£νκ³ μ λ°μ μΌλ‘ λ λμ μ±λ₯μ λ°νν μ μλλ‘ ν©λλ€. μ΄λ νΉν μ μ¬μ κΈ°κΈ°λ λλ¦° μΈν°λ· μ°κ²°μ μ¬μ©νλ μ¬μ©μμκ² μ§μ° κ°μμ λ λΆλλ¬μ΄ κ²½νμ μλ―Έν©λλ€.
- ν¨μ¨μ μΈ λ¦¬μμ€ νμ©: μμ νμΉκΈ°λ μμ λΆνμ λμ μΌλ‘ μ μνμ¬ μ¬μ© κ°λ₯ν λͺ¨λ μ€λ λλ μμ»€κ° ν¨κ³Όμ μΌλ‘ νμ©λλλ‘ λ³΄μ₯νλ©°, μ ν΄ μκ°μ μ€μ΄κ³ 리μμ€ νμ©μ κ·Ήλνν©λλ€.
- νμ₯μ±: μμ νμΉκΈ° μν€ν μ²λ μνμ νμ₯μ κ°λ₯νκ² ν©λλ€. μ¬μ© κ°λ₯ν 리μμ€(μ½μ΄, μ€λ λ)μ μκ° μ¦κ°νλ©΄ μ€μΌμ€λ¬κ° μλμΌλ‘ μμ μ λΆλ°°νμ¬ ν° μ½λ λ³κ²½ μμ΄ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
- λ€μν μμ λΆνμ λν μ μμ±: μμ νμΉκΈ° μκ³ λ¦¬μ¦μ κ²¬κ³ νλ©° μμ λΆνμ λ³νμ μ μν©λλ€. μΌλΆ μμ μ΄ λ€λ₯Έ μμ λ³΄λ€ μ€λ 걸리λ κ²½μ°, μμ μ΄ μ¬μ‘°μ λμ΄ λ¨μΌ μμ μ΄ μ 체 νλ‘μΈμ€λ₯Ό μ°¨λ¨νλ κ²μ λ°©μ§ν©λλ€.
μ€μ©μ μΈ μμ : Reactμμ μμ νμΉκΈ° μ μ©νκΈ°
React μ ν리μΌμ΄μ μμ μμ νμΉκΈ°κ° μ΄λ»κ² μμ λΆλ°°λ₯Ό μ΅μ νν μ μλμ§ λ³΄μ¬μ£Όλ λͺ κ°μ§ μ€μ©μ μΈ μμ λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€. μ΄ μμ λ€μ μΌλ°μ μΈ κΈ°μ κ³Ό λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ μ μΈκ³ κ°λ°μμκ² μ μ©λ©λλ€.
μμ 1: useEffectλ₯Ό μ¬μ©ν λΉλκΈ° λ°μ΄ν° κ°μ Έμ€κΈ°
APIμμ λ°μ΄ν°λ₯Ό κ°μ Έμ€λ κ²μ React μ ν리μΌμ΄μ
μμ μΌλ°μ μΈ μμ
μ
λλ€. μ λλ‘ μ²λ¦¬νμ§ μμΌλ©΄ λ©μΈ μ€λ λλ₯Ό μ°¨λ¨ν μ μμ΅λλ€. useEffect ν
μ λΉλκΈ° ν¨μ λ° μμ
νμΉκΈ°μ ν¨κ» μ¬μ©νλ©΄ λ°μ΄ν° κ°μ Έμ€κΈ°λ₯Ό ν¨μ¨μ μΌλ‘ μ²λ¦¬ν μ μμ΅λλ€.
import React, { useState, useEffect } from 'react';
function DataFetcher() {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const jsonData = await response.json();
setData(jsonData);
} catch (err) {
setError(err);
} finally {
setLoading(false);
}
}
fetchData();
}, []);
if (loading) return Loading...;
if (error) return Error: {error.message};
return (
{/* Render data here */}
{JSON.stringify(data, null, 2)}
);
}
export default DataFetcher;
μ΄ μμ μμ λΉλκΈ° ν¨μμ ν¨κ» μ¬μ©λ useEffect ν
μ λ°μ΄ν° κ°μ Έμ€κΈ°λ₯Ό μ²λ¦¬ν©λλ€. React μ€μΌμ€λ¬λ μ΄ λΉλκΈ° μμ
μ μ§λ₯μ μΌλ‘ κ΄λ¦¬νμ¬ λ°μ΄ν°κ° κ°μ Έμ€λ λμ UIκ° λ°μμ±μ μ μ§ν μ μλλ‘ ν©λλ€. λ€νΈμν¬ μλ΅μ λ°μΌλ©΄ UIλ λ΄λΆμ μΌλ‘ μμ
νμΉκΈ° κΈ°μ μ μ¬μ©νμ¬ ν¨μ¨μ μΌλ‘ μ
λ°μ΄νΈλ©λλ€.
μμ 2: κ°μνλ₯Ό ν΅ν μ΅μ νλ λͺ©λ‘ λ λλ§
ν° λͺ©λ‘μ λ λλ§νλ κ²μ μ±λ₯ λ³λͺ©μ΄ λ μ μμ΅λλ€. react-windowλ react-virtualizedμ κ°μ λΌμ΄λΈλ¬λ¦¬λ 보μ΄λ νλͺ©λ§ λ λλ§νμ¬ μ±λ₯μ ν¬κ² ν₯μμν€λ λ° λμμ΄ λ©λλ€. React μ€μΌμ€λ¬λ μ΄λ¬ν λΌμ΄λΈλ¬λ¦¬μ ν¨κ» μλν©λλ€.
import React from 'react';
import { FixedSizeList as List } from 'react-window';
const items = Array.from({ length: 10000 }, (_, index) => `Item ${index + 1}`);
function Row({ index, style }) {
return (
{items[index]}
);
}
function VirtualizedList() {
return (
{Row}
);
}
export default VirtualizedList;
React μ€μΌμ€λ¬λ κ°μνλ νλͺ©μ λ λλ§μ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν©λλ€. μ¬μ©μκ° μ€ν¬λ‘€νλ©΄ μ€μΌμ€λ¬λ μλ‘ λ³΄μ΄λ νλͺ©μ λ λλ§μ μ°μ μμλ‘ μ²λ¦¬νμ¬ λΆλλ¬μ΄ μ€ν¬λ‘€ κ²½νμ μ μ§ν©λλ€.
μμ 3: μΉ μ컀λ₯Ό μ΄μ©ν λ°±κ·ΈλΌμ΄λ μ΄λ―Έμ§ μ²λ¦¬
μ΄λ―Έμ§ μ²λ¦¬λ κ³μ° λΉμ©μ΄ λ§μ΄ λ€ μ μμ΅λλ€. μ΄λ¬ν μμ μ μΉ μ컀(Web Workers)λ‘ μ€νλ‘λνλ©΄ λ©μΈ μ€λ λλ₯Ό μμ λ‘κ² μ μ§ν μ μμ΅λλ€. μμ νμΉκΈ°λ μ΄λ¬ν μΉ μ컀μ μμ μ λΆλ°°νλ λ° λμμ΄ λ©λλ€.
// Inside a Web Worker (worker.js)
self.addEventListener('message', (event) => {
const imageData = event.data;
// Perform image processing (e.g., resize, filter)
// ...
self.postMessage(processedImageData);
});
// In your React component
import React, { useState, useEffect } from 'react';
function ImageProcessor() {
const [processedImage, setProcessedImage] = useState(null);
const [loading, setLoading] = useState(true);
const [worker, setWorker] = useState(null);
useEffect(() => {
const newWorker = new Worker('worker.js');
setWorker(newWorker);
return () => {
newWorker.terminate();
};
}, []);
useEffect(() => {
if (worker) {
worker.addEventListener('message', (event) => {
setProcessedImage(event.data);
setLoading(false);
});
// Assuming you have imageData available
// e.g., loaded from a file input or fetched from API
const imageData = { /* your image data */ };
worker.postMessage(imageData);
setLoading(true);
}
}, [worker]);
if (loading) return Processing image...;
if (!processedImage) return null;
return (
);
}
export default ImageProcessor;
μ¬κΈ°μ μΉ μ컀λ μ΄λ―Έμ§ μ²λ¦¬ μμ μ μννκ³ , React μ€μΌμ€λ¬λ λ©μΈ μ€λ λμ μ컀 κ°μ μνΈμμ©μ κ΄λ¦¬ν©λλ€. μ΄ μν€ν μ²λ λ©μΈ μ€λ λμ λ°μμ±μ μ μ§ν©λλ€. μ΄ λ°©λ²μ λ€μν νμΌ μ νκ³Ό κΈ°κΈ° μ±λ₯μ μ²λ¦¬ν μ μμ΄ λ©μΈ μ ν리μΌμ΄μ μ λΆνλ₯Ό μ€μ¬μ£Όλ―λ‘ μ μΈκ³ μ¬μ©μμκ² κ΄λ²μνκ² μ μ©λ μ μμ΅λλ€.
κΈ°μ‘΄ νλ‘μ νΈμ React μ€μΌμ€λ¬ ν΅ν©νκΈ°
React μ€μΌμ€λ¬μ μμ νμΉκΈ° κΈ°λ₯μ κΈ°μ‘΄ νλ‘μ νΈμ ν΅ν©νλ κ²μ μΌλ°μ μΌλ‘ μ€μΌμ€λ¬μ λ΄λΆ μλμ λν λͺ μμ μΈ μμ μ νμλ‘ νμ§ μμ΅λλ€. Reactκ° μ΄λ₯Ό μλμΌλ‘ μ²λ¦¬ν©λλ€. κ·Έλ¬λ κ°λ°μλ λ€μμ ν΅ν΄ κ°μ μ μΌλ‘ μ±λ₯μ μν₯μ μ€ μ μμ΅λλ€:
- λΉλκΈ° μμ
: μκ°μ΄ λ§μ΄ 걸리λ μμ
μ μ€νλ‘λνκΈ° μν΄ λΉλκΈ° ν¨μ(
async/await)λ νλ‘λ―Έμ€(promise)λ₯Ό μ¬μ©ν©λλ€. - μ½λ λΆν : ν° μ»΄ν¬λνΈλ₯Ό λ μκ³ λ 립μ μΈ λͺ¨λλ‘ λΆν νμ¬ νμν λ λ‘λν¨μΌλ‘μ¨ μ΄κΈ° λ‘λ μκ°μ μ΅μνν©λλ€.
- λλ°μ΄μ± λ° μ€λ‘νλ§: μ λ ₯ λλ ν¬κΈ° μ‘°μ μ΄λ²€νΈμ κ°μ μ΄λ²€νΈ νΈλ€λ¬μ μ΄λ¬ν κΈ°μ μ ꡬννμ¬ μ λ°μ΄νΈ λΉλλ₯Ό μ€μ λλ€.
- λ©λͺ¨μ΄μ μ΄μ
:
React.memoλλ λ©λͺ¨μ΄μ μ΄μ κΈ°μ μ μ¬μ©νμ¬ λΆνμν μ»΄ν¬λνΈ λ¦¬λ λλ§μ λ°©μ§ν©λλ€.
μ΄λ¬ν μμΉμ λ°λ¦μΌλ‘μ¨ κ°λ°μλ μμ νμΉκΈ°λ₯Ό λ μ νμ©νλ μ ν리μΌμ΄μ μ λ§λ€μ΄ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
μμ λΆλ°° μ΅μ νλ₯Ό μν λͺ¨λ² μ¬λ‘
React μ€μΌμ€λ¬μ μμ νμΉκΈ° κΈ°λ₯μ μ΅λν νμ©νλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄μμμ€:
- μ±λ₯ λ³λͺ© νμ μλ³: λΈλΌμ°μ κ°λ°μ λꡬ(μ: Chrome DevTools)λ₯Ό μ¬μ©νμ¬ μ ν리μΌμ΄μ μ νλ‘νμΌλ§νκ³ μ±λ₯ λ¬Έμ λ₯Ό μΌμΌν€λ μμμ μλ³ν©λλ€. μ±λ₯ νκ³Ό κ°μ λꡬλ μμ κ³Ό μ€ν μκ°μ μκ°ννμ¬ μ μ¬μ μΈ λ³λͺ© νμμ κ°μ‘°ν μ μμ΅λλ€.
- μμ μ°μ μμ μ§μ : κ° μμ μ μ€μμ±μ μ μ€νκ² κ³ λ €νκ³ μ μ ν μ°μ μμλ₯Ό ν λΉν©λλ€. μ¬μ©μ μνΈμμ© λ° UI μ λ°μ΄νΈλ μΌλ°μ μΌλ‘ λ°±κ·ΈλΌμ΄λ μμ λ³΄λ€ λμ μ°μ μμλ₯Ό κ°μ ΈμΌ ν©λλ€.
- λ λ ν¨μ μ΅μ ν: UI μ
λ°μ΄νΈμ νμν μμ
λμ μ΅μννκΈ° μν΄ ν¨μ¨μ μΈ λ λ ν¨μλ₯Ό μμ±ν©λλ€. λΆνμν 리λ λλ§μ νΌνκΈ° μν΄ λ©λͺ¨μ΄μ μ΄μ
κΈ°μ (μ:
React.memo)μ μ¬μ©ν©λλ€. - λΉλκΈ° μμ
μ¬μ©: λ°μ΄ν° κ°μ Έμ€κΈ°, μ΄λ―Έμ§ μ²λ¦¬, 볡μ‘ν κ³μ°κ³Ό κ°μ μκ°μ΄ λ§μ΄ 걸리λ μμ
μλ λΉλκΈ° μμ
μ μ κ·Ήμ μΌλ‘ νμ©ν©λλ€.
async/awaitλλ νλ‘λ―Έμ€λ₯Ό μ¬μ©νμ¬ μ΄λ¬ν μμ μ ν¨κ³Όμ μΌλ‘ κ΄λ¦¬ν©λλ€. - μΉ μ컀 νμ©: κ³μ° μ§μ½μ μΈ μμ μ κ²½μ°, λ©μΈ μ€λ λ μ°¨λ¨μ λ°©μ§νκΈ° μν΄ μΉ μμ»€λ‘ μ€νλ‘λν©λλ€. μ΄λ₯Ό ν΅ν΄ μμ»€κ° λ°±κ·ΈλΌμ΄λ μ²λ¦¬λ₯Ό νλ λμ UIκ° λ°μμ±μ μ μ§ν μ μμ΅λλ€.
- λκ·λͺ¨ λͺ©λ‘ κ°μν: λκ·λͺ¨ λ°μ΄ν° λͺ©λ‘μ λ λλ§νλ κ²½μ°, κ°μν λΌμ΄λΈλ¬λ¦¬(μ:
react-window,react-virtualized)λ₯Ό μ¬μ©νμ¬ λ³΄μ΄λ νλͺ©λ§ λ λλ§ν©λλ€. μ΄λ DOM μμμ μλ₯Ό ν¬κ² μ€μ΄κ³ λ λλ§ μ±λ₯μ ν₯μμν΅λλ€. - μ»΄ν¬λνΈ μ λ°μ΄νΈ μ΅μ ν: λΆλ³ λ°μ΄ν° ꡬ쑰, λ©λͺ¨μ΄μ μ΄μ , ν¨μ¨μ μΈ μν κ΄λ¦¬ μ λ΅κ³Ό κ°μ κΈ°μ μ μ¬μ©νμ¬ μ»΄ν¬λνΈ μ λ°μ΄νΈ νμλ₯Ό μ€μ λλ€.
- μ±λ₯ λͺ¨λν°λ§: μ±λ₯ λͺ¨λν°λ§ λꡬμ κ°μ ν΄μ μ¬μ©νμ¬ νλ μ μλ, λ λλ§ μκ°, μ¬μ©μ κ²½νκ³Ό κ°μ μ§νλ₯Ό μΆμ νλ©° μ€μ νκ²½μμ μ ν리μΌμ΄μ μ μ±λ₯μ μ κΈ°μ μΌλ‘ λͺ¨λν°λ§ν©λλ€. μ΄λ μ±λ₯ λ¬Έμ λ₯Ό μλ³νκ³ ν΄κ²°νλ λ° λμμ΄ λ©λλ€.
μΌλ°μ μΈ κ³Όμ μ λ¬Έμ ν΄κ²°
React μ€μΌμ€λ¬μ μμ νμΉκΈ°λ μλΉν μ΄μ μ μ 곡νμ§λ§, κ°λ°μλ νΉμ λ¬Έμ μ μ§λ©΄ν μ μμ΅λλ€. μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νλ €λ©΄ λͺ©νμ λ§λ λ¬Έμ ν΄κ²°μ΄ νμν©λλ€. λ€μμ λͺ κ°μ§ μΌλ°μ μΈ λ¬Έμ μ ν΄κ²°μ± μ λλ€:
- UI λ©μΆ€ νμ: μμ νμΉκΈ°λ₯Ό ꡬνν νμλ UIκ° μ¬μ ν λ°μμ΄ μλ κ²½μ°, λ©μΈ μ€λ λκ° κ³μ μ°¨λ¨λκ³ μμ μ μμ΅λλ€. λͺ¨λ μκ°μ΄ λ§μ΄ 걸리λ μμ μ΄ μ§μ μΌλ‘ λΉλκΈ°μ μΈμ§ νμΈνκ³ , λ°©ν΄ν μ μλ λκΈ°μ μμ μ΄ μλμ§ νμΈνμμμ€. μ»΄ν¬λνΈ λ λ ν¨μμ μ μ¬μ μΈ λΉν¨μ¨μ±μ΄ μλμ§ κ²ν νμμμ€.
- μμ μ€λ³΅: νΉν λΉ λ₯Έ μ λ°μ΄νΈ μ μμ μ΄ κ²ΉμΉ μ μμ΅λλ€. μΆ©λμ νΌνκΈ° μν΄ μμ μ μ°μ μμλ₯Ό μ μ ν μ§μ νκ³ , μ€μν μ λ°μ΄νΈλ₯Ό μ°μ μ²λ¦¬νλλ‘ μΆ©λμ ν΄κ²°ν΄μΌ ν©λλ€.
- λΉν¨μ¨μ μΈ μ½λ: μλͺ» μμ±λ μ½λλ μ¬μ ν μ±λ₯ λ¬Έμ λ₯Ό μΌμΌν¬ μ μμ΅λλ€. μ΅μ νλ₯Ό μν΄ μ½λλ₯Ό μ² μ ν ν μ€νΈνκ³ , μ±λ₯ κ΄λ ¨ λ³λͺ© νμμ΄ μλμ§ μ»΄ν¬λνΈλ₯Ό κ²ν νμμμ€.
- λ©λͺ¨λ¦¬ λμ: 리μμ€λ₯Ό μλͺ» μ²λ¦¬νκ±°λ μ΄λ²€νΈ 리μ€λλ₯Ό μ 리νμ§ μμΌλ©΄ λ©λͺ¨λ¦¬ λμκ° λ°μνμ¬ μκ°μ΄ μ§λ¨μ λ°λΌ μ±λ₯μ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
κ²°λ‘ : ν¨μ¨μ μΈ μμ λΆλ°° μμ©νκΈ°
μμ νμΉκΈ° μκ³ λ¦¬μ¦μ κ°μΆ React μ€μΌμ€λ¬λ React μ ν리μΌμ΄μ μ μ΅μ ννκΈ° μν κ°λ ₯ν λꡬμ λλ€. κ°λ°μλ κ·Έκ²μ΄ μ΄λ»κ² μλνλμ§ μ΄ν΄νκ³ λͺ¨λ² μ¬λ‘λ₯Ό ꡬνν¨μΌλ‘μ¨ λ°μμ±μ΄ λ°μ΄λκ³ κ³ μ±λ₯μΈ μΉ μ ν리μΌμ΄μ μ λ§λ€ μ μμ΅λλ€. μ΄λ λ€μν μ₯μΉμ λ€νΈμν¬ μ‘°κ±΄μ μλ μ μΈκ³ μ¬μ©μμκ² νλ₯ν μ¬μ©μ κ²½νμ μ 곡νλ λ° λ§€μ° μ€μν©λλ€. μΉμ΄ κ³μ λ°μ ν¨μ λ°λΌ μμ κ³Ό 리μμ€λ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬νλ λ₯λ ₯μ λͺ¨λ μ ν리μΌμ΄μ μ μ±κ³΅μ κ²°μ μ μΈ μν μ ν κ²μ λλ€.
νλ‘μ νΈμ μμ νμΉκΈ°λ₯Ό ν΅ν©ν¨μΌλ‘μ¨, μμΉλ μ₯μΉμ κ΄κ³μμ΄ μ¬μ©μκ° μννκ³ μ±λ₯μ΄ λ°μ΄λ μΉ μ ν리μΌμ΄μ μ κ²½ννλλ‘ λ³΄μ₯ν μ μμ΅λλ€. μ΄λ μ¬μ©μ λ§μ‘±λλ₯Ό λμ΄κ³ μ ν리μΌμ΄μ μ μ λ°μ μΈ μ±κ³΅μ ν₯μμν΅λλ€.
μ΅μμ κ²°κ³Όλ₯Ό μ»μΌλ €λ©΄ λ€μ μ¬νμ κ³ λ €νμμμ€:
- μ±λ₯ λΆμ: μ ν리μΌμ΄μ μ μ±λ₯μ μ§μμ μΌλ‘ λͺ¨λν°λ§νμ¬ λ³λͺ© νμμ μλ³νκ³ μμ ν©λλ€.
- μ΅μ μ 보 μ μ§: μ΅μ React λ¦΄λ¦¬μ€ λ° μ€μΌμ€λ¬ μ λ°μ΄νΈμ λν μ 보λ₯Ό κΎΈμ€ν νμΈνμμμ€. μ’ μ’ μ±λ₯ κ°μ μ¬νμ΄ ν¬ν¨λ©λλ€.
- μ€ν: λ€μν μ΅μ ν μ λ΅μ ν μ€νΈνμ¬ μ ν리μΌμ΄μ μ κ³ μ ν μꡬμ κ°μ₯ μ ν©ν λ°©λ²μ μ°Ύμ΅λλ€.
μμ νμΉκΈ°λ κ³ μ±λ₯μ λ°μν μΉ μ ν리μΌμ΄μ μ μν κΈ°μ΄μ μΈ νλ μμν¬λ₯Ό μ 곡ν©λλ€. μ΄ λΈλ‘κ·Έ κ²μλ¬Όμμ μ μλ μ§μκ³Ό μμ λ₯Ό μ μ©ν¨μΌλ‘μ¨ κ°λ°μλ μ ν리μΌμ΄μ μ ν₯μμν€κ³ μ μΈκ³ μ¬μ©μμ μ¬μ©μ κ²½νμ κ°μ ν μ μμ΅λλ€.