κ°λ°μκ° μμ μ€νμ λΆμνκ³ μ±λ₯ λ³λͺ© νμμ μλ³νλ©°, λ€μν νλ«νΌμμ μνν μ¬μ©μ κ²½νμ μν΄ React μ ν리μΌμ΄μ μ μ΅μ νν μ μλλ‘ μ§μνλ React μ€μΌμ€λ¬ νλ‘νμΌλ§ κΈ°μ μ¬μΈ΅ λΆμ.
React μ€μΌμ€λ¬ νλ‘νμΌλ§: μ΅μ νλ μ±λ₯μ μν μμ μ€ν λΆμ
νλ μΉ κ°λ° μΈκ³μμ λΆλλ½κ³ λ°μμ±μ΄ λ°μ΄λ μ¬μ©μ κ²½νμ μ 곡νλ κ²μ λ§€μ° μ€μν©λλ€. Reactλ μ»΄ν¬λνΈ κΈ°λ° μν€ν μ²μ κ°μ DOMμ ν΅ν΄ 볡μ‘ν UIλ₯Ό ꡬμΆνλ λ° ν΅μ¬μ μΈ μν μ ν΄μμ΅λλ€. κ·Έλ¬λ Reactμ μ΅μ ν κΈ°λ₯μλ λΆκ΅¬νκ³ , νΉν κ·λͺ¨κ° ν¬κ³ 볡μ‘ν μ ν리μΌμ΄μ μμλ μ±λ₯ λ³λͺ© νμμ΄ λ°μν μ μμ΅λλ€. Reactκ° μμ μ μ΄λ»κ² μ€μΌμ€λ§νκ³ μ€ννλμ§ μ΄ν΄νλ κ²μ μ΄λ¬ν μ±λ₯ λ¬Έμ λ₯Ό μλ³νκ³ ν΄κ²°νλ λ° μ€μν©λλ€. μ΄ κΈμμλ React μ€μΌμ€λ¬ νλ‘νμΌλ§μ μΈκ³λ₯Ό κΉμ΄ νκ³ λ€μ΄, μμ μ€νμ λΆμνκ³ μ΅κ³ μ μ±λ₯μ μν΄ React μ ν리μΌμ΄μ μ μ΅μ ννλ ν¬κ΄μ μΈ κ°μ΄λλ₯Ό μ 곡ν©λλ€.
React μ€μΌμ€λ¬ μ΄ν΄νκΈ°
νλ‘νμΌλ§ κΈ°μ μ λν΄ μμ보기 μ μ, React μ€μΌμ€λ¬μ λν κΈ°λ³Έμ μΈ μ΄ν΄λ₯Ό νλ¦½ν΄ λ΄ μλ€. React μ€μΌμ€λ¬λ React μ ν리μΌμ΄μ λ΄μμ μμ μ€νμ κ΄λ¦¬νλ μν μ ν©λλ€. μμ μ μ°μ μμλ₯Ό μ νκ³ , λ μμ μμ λ¨μλ‘ λλλ©°, λ©μΈ μ€λ λλ₯Ό μ°¨λ¨νλ κ²μ μ΅μννλ λ°©μμΌλ‘ μ€νλλλ‘ μ€μΌμ€λ§ν©λλ€. μ΄ μ€μΌμ€λ§μ λ°μμ± μλ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό μ μ§νλ λ° λ§€μ° μ€μν©λλ€.
Reactλ λ λλ§μ λ μκ³ μ€λ¨ κ°λ₯ν μμ λ¨μλ‘ λΆν΄ν μ μλ Fiber μν€ν μ²λ₯Ό μ¬μ©ν©λλ€. μ΄ λ¨μλ€μ FiberλΌκ³ λΆλ₯΄λ©°, React μ€μΌμ€λ¬λ μ΄λ¬ν Fiberλ€μ κ΄λ¦¬νμ¬ μ¬μ©μ μ λ ₯κ³Ό κ°μ λμ μ°μ μμμ μμ μ΄ μ μνκ² μ²λ¦¬λλλ‘ λ³΄μ₯ν©λλ€. μ€μΌμ€λ¬λ μ°μ μμ νλ₯Ό μ¬μ©νμ¬ Fiberλ₯Ό κ΄λ¦¬νλ©°, μ΄λ₯Ό ν΅ν΄ κΈ΄κΈμ±μ λ°λΌ μ λ°μ΄νΈμ μ°μ μμλ₯Ό μ ν μ μμ΅λλ€.
μ£Όμ κ°λ :
- Fiber: μ»΄ν¬λνΈ μΈμ€ν΄μ€λ₯Ό λνλ΄λ μμ λ¨μμ λλ€.
- μ€μΌμ€λ¬(Scheduler): Fiberμ μ°μ μμλ₯Ό μ νκ³ μ€μΌμ€λ§νλ λͺ¨λμ λλ€.
- μν¬λ£¨ν(WorkLoop): Fiber νΈλ¦¬λ₯Ό μννλ©° μ λ°μ΄νΈλ₯Ό μννλ ν¨μμ λλ€.
- μ°μ μμ ν(Priority Queue): μ°μ μμμ λ°λΌ Fiberλ₯Ό κ΄λ¦¬νλ λ° μ¬μ©λλ μλ£ κ΅¬μ‘°μ λλ€.
νλ‘νμΌλ§μ μ€μμ±
νλ‘νμΌλ§μ μ ν리μΌμ΄μ μ μ±λ₯ νΉμ±μ μΈ‘μ νκ³ λΆμνλ κ³Όμ μ λλ€. Reactμ λ§₯λ½μμ νλ‘νμΌλ§μ ν΅ν΄ React μ€μΌμ€λ¬κ° μμ μ μ΄λ»κ² μ€ννλμ§ μ΄ν΄νκ³ , μ€λ μ€νλλ μμ μ μλ³νλ©°, μ΅μ νκ° κ°μ₯ ν° μν₯μ λ―ΈμΉ μ μλ μμμ μ νν μ°ΎμλΌ μ μμ΅λλ€. νλ‘νμΌλ§ μμ΄λ μ¬μ€μ λ§Ήλͺ©μ μΌλ‘ μ±λ₯μ κ°μ νλ € μΆμΈ‘μ μμ‘΄νκ² λ©λλ€.
μ¬μ©μκ° νΉμ μ»΄ν¬λνΈμ μνΈ μμ©ν λ μ ν리μΌμ΄μ μ λμ λλ μ§μ°μ΄ λ°μνλ μλ리μ€λ₯Ό μκ°ν΄ 보μμμ€. νλ‘νμΌλ§μ μ΄ μ§μ°μ΄ ν΄λΉ μ»΄ν¬λνΈ λ΄μ 볡μ‘ν λ λλ§ μμ , λΉν¨μ¨μ μΈ λ°μ΄ν° κ°μ Έμ€κΈ° νλ‘μΈμ€ λλ μν μ λ°μ΄νΈλ‘ μΈν κ³Όλν 리λ λλ§ λλ¬ΈμΈμ§ λ°νλΌ μ μμ΅λλ€. κ·Όλ³Έ μμΈμ νμ ν¨μΌλ‘μ¨ κ°μ₯ ν° μ±λ₯ ν₯μμ κ°μ Έμ¬ μ μλ μμμ μ΅μ ν λ Έλ ₯μ μ§μ€ν μ μμ΅λλ€.
React μ€μΌμ€λ¬ νλ‘νμΌλ§ λꡬ
React μ ν리μΌμ΄μ μ νλ‘νμΌλ§νκ³ React μ€μΌμ€λ¬ λ΄μ μμ μ€νμ λν ν΅μ°°λ ₯μ μ»μ μ μλ μ¬λ¬ κ°λ ₯ν λκ΅¬κ° μμ΅λλ€:
1. Chrome κ°λ°μ λꡬ μ±λ₯ ν
Chrome κ°λ°μ λꡬμ μ±λ₯ νμ React μ±λ₯μ ν¬ν¨νμ¬ μΉ μ ν리μΌμ΄μ μ λ€μν μΈ‘λ©΄μ νλ‘νμΌλ§ν μ μλ λ€μ©λ λꡬμ λλ€. JavaScript μ€ν, λ λλ§, νμΈν , λ€νΈμν¬ μμ² λ± λΈλΌμ°μ μμ λ°μνλ λͺ¨λ νλμ λν μμΈν νμλΌμΈμ μ 곡ν©λλ€. React μ ν리μΌμ΄μ κ³Ό μνΈ μμ©νλ©΄μ μ±λ₯ νλ‘νμ κΈ°λ‘ν¨μΌλ‘μ¨ μ±λ₯ λ³λͺ© νμμ μλ³νκ³ React μμ μ€νμ λΆμν μ μμ΅λλ€.
μ¬μ© λ°©λ²:
- Chrome κ°λ°μ λꡬλ₯Ό μ½λλ€(Ctrl+Shift+I λλ Cmd+Option+I).
- "Performance" νμΌλ‘ μ΄λν©λλ€.
- "Record" λ²νΌμ ν΄λ¦ν©λλ€.
- νλ‘νμΌλ§νλ €λ λμμ μ λ°νκΈ° μν΄ React μ ν리μΌμ΄μ κ³Ό μνΈ μμ©ν©λλ€.
- κΈ°λ‘μ μ€μ§νλ €λ©΄ "Stop" λ²νΌμ ν΄λ¦ν©λλ€.
- μμ±λ νμλΌμΈμ λΆμνμ¬ μ±λ₯ λ³λͺ© νμμ μλ³ν©λλ€.
μ±λ₯ νμ μΊ‘μ²λ λ°μ΄ν°λ₯Ό λΆμνκΈ° μν λ€μν λ·°λ₯Ό μ 곡ν©λλ€:
- νλ μ μ°¨νΈ(Flame Chart): JavaScript ν¨μμ νΈμΆ μ€νμ μκ°ννμ¬ κ°μ₯ λ§μ μκ°μ μλΉνλ ν¨μλ₯Ό μλ³ν μ μμ΅λλ€.
- λ°ν μ (Bottom-Up): κ° ν¨μμ κ·Έ νΈμΆ λμμμ μλΉλ μκ°μ μ§κ³νμ¬ κ°μ₯ λΉμ©μ΄ λ§μ΄ λλ μμ μ μλ³νλ λ° λμμ΄ λ©λλ€.
- μ½ νΈλ¦¬(Call Tree): νΈμΆ μ€νμ κ³μΈ΅μ νμμΌλ‘ νμνμ¬ μ€ν νλ¦μ λͺ ννκ² λ³Ό μ μμ΅λλ€.
μ±λ₯ ν λ΄μμ "Update"(μ»΄ν¬λνΈ μ λ°μ΄νΈλ₯Ό λνλ) λλ "Commit"(μ λ°μ΄νΈλ DOMμ μ΅μ’ λ λλ§μ λνλ)κ³Ό κ°μ React κ΄λ ¨ νλͺ©μ μ°ΎμΌμμμ€. μ΄λ¬ν νλͺ©λ€μ μ»΄ν¬λνΈ λ λλ§μ μμλ μκ°μ λν κ·μ€ν ν΅μ°°λ ₯μ μ 곡ν μ μμ΅λλ€.
2. React κ°λ°μ λꡬ νλ‘νμΌλ¬
React κ°λ°μ λꡬ νλ‘νμΌλ¬λ React μ ν리μΌμ΄μ νλ‘νμΌλ§μ μν΄ νΉλ³ν μ μλ μ λ¬Έ λꡬμ λλ€. Reactμ λ΄λΆ μμ μ λν λ μ§μ€λ λ·°λ₯Ό μ 곡νμ¬ μ»΄ν¬λνΈ λ λλ§, μν μ λ°μ΄νΈ λ° prop λ³κ²½κ³Ό κ΄λ ¨λ μ±λ₯ λ¬Έμ λ₯Ό λ μ½κ² μλ³ν μ μκ² ν΄μ€λλ€.
μ€μΉ:
React κ°λ°μ λꡬ νλ‘νμΌλ¬λ Chrome, Firefox, Edgeμ© λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μΌλ‘ μ 곡λ©λλ€. κ° λΈλΌμ°μ μ νμ₯ νλ‘κ·Έλ¨ μ€ν μ΄μμ μ€μΉν μ μμ΅λλ€.
μ¬μ©λ²:
- λΈλΌμ°μ μμ React κ°λ°μ λꡬ ν¨λμ μ½λλ€.
- "Profiler" νμΌλ‘ μ΄λν©λλ€.
- "Record" λ²νΌμ ν΄λ¦ν©λλ€.
- νλ‘νμΌλ§νλ €λ λμμ μ λ°νκΈ° μν΄ React μ ν리μΌμ΄μ κ³Ό μνΈ μμ©ν©λλ€.
- κΈ°λ‘μ μ€μ§νλ €λ©΄ "Stop" λ²νΌμ ν΄λ¦ν©λλ€.
νλ‘νμΌλ¬λ μΊ‘μ²λ λ°μ΄ν°λ₯Ό λΆμνκΈ° μν λ κ°μ§ μ£Όμ λ·°λ₯Ό μ 곡ν©λλ€:
- νλ μκ·Έλν(Flamegraph): μ»΄ν¬λνΈ νΈλ¦¬μ μκ°μ ννμΌλ‘, κ° λ§λλ μ»΄ν¬λνΈλ₯Ό λνλ΄κ³ κ·Έ λλΉλ ν΄λΉ μ»΄ν¬λνΈλ₯Ό λ λλ§νλ λ° κ±Έλ¦° μκ°μ λνλ λλ€.
- λν¬(Ranked): λ λλ§νλ λ° κ±Έλ¦° μκ° μμΌλ‘ μ λ ¬λ μ»΄ν¬λνΈ λͺ©λ‘μΌλ‘, κ°μ₯ λΉμ©μ΄ λ§μ΄ λλ μ»΄ν¬λνΈλ₯Ό μ μνκ² μλ³ν μ μμ΅λλ€.
React κ°λ°μ λꡬ νλ‘νμΌλ¬λ λ€μκ³Ό κ°μ κΈ°λ₯λ μ 곡ν©λλ€:
- μ λ°μ΄νΈ κ°μ‘° νμ: 리λ λλ§λλ μ»΄ν¬λνΈλ₯Ό μκ°μ μΌλ‘ κ°μ‘° νμνμ¬ λΆνμν 리λ λλ§μ μλ³νλ λ° λμμ μ€λλ€.
- μ»΄ν¬λνΈ props λ° state κ²μ¬: μ»΄ν¬λνΈμ propsμ stateλ₯Ό κ²μ¬νμ¬ λ¦¬λ λλ§λλ μ΄μ λ₯Ό μ΄ν΄ν©λλ€.
- μ»΄ν¬λνΈ νν°λ§: νΉμ μ»΄ν¬λνΈλ μ»΄ν¬λνΈ νΈλ¦¬μ μΌλΆμ μ§μ€ν©λλ€.
3. React.Profiler μ»΄ν¬λνΈ
React.Profiler
μ»΄ν¬λνΈλ μ ν리μΌμ΄μ
μ νΉμ λΆλΆμ λ λλ§ μ±λ₯μ μΈ‘μ ν μ μκ² ν΄μ£Όλ λ΄μ₯ React APIμ
λλ€. μΈλΆ λꡬμ μμ‘΄νμ§ μκ³ νλ‘κ·Έλλ° λ°©μμΌλ‘ νλ‘νμΌλ§ λ°μ΄ν°λ₯Ό μμ§ν μ μλ λ°©λ²μ μ 곡ν©λλ€.
μ¬μ©λ²:
νλ‘νμΌλ§νλ €λ μ»΄ν¬λνΈλ₯Ό React.Profiler
μ»΄ν¬λνΈλ‘ κ°μΈμμμ€. νλ‘νμΌλ¬λ₯Ό μλ³νκΈ° μν id
propκ³Ό κ° λ λλ§ νμ νΈμΆλ μ½λ°± ν¨μμΈ onRender
propμ μ 곡ν©λλ€.
import React from 'react';
function MyComponent() {
return (
{/* Component content */}
);
}
function onRenderCallback(
id: string,
phase: 'mount' | 'update',
actualDuration: number,
baseDuration: number,
startTime: number,
commitTime: number,
interactions: Set
) {
console.log(`Component ${id} rendered`);
console.log(`Phase: ${phase}`);
console.log(`Actual duration: ${actualDuration}ms`);
console.log(`Base duration: ${baseDuration}ms`);
}
onRender
μ½λ°± ν¨μλ λ λλ§ νλ‘μΈμ€μ λν μ 보λ₯Ό μ 곡νλ μ¬λ¬ μΈμλ₯Ό λ°μ΅λλ€:
id:
React.Profiler
μ»΄ν¬λνΈμid
propμ λλ€.phase:
μ»΄ν¬λνΈκ° λ§μ΄νΈλμλμ§ λλ μ λ°μ΄νΈλμλμ§λ₯Ό λνλ λλ€.actualDuration:
μ΄ μ λ°μ΄νΈμμ μ»΄ν¬λνΈλ₯Ό λ λλ§νλ λ° κ±Έλ¦° μκ°μ λλ€.baseDuration:
λ©λͺ¨μ΄μ μ΄μ μμ΄ μ»΄ν¬λνΈ νΈλ¦¬λ₯Ό λ λλ§νλ λ° κ±Έλ¦¬λ μμ μκ°μ λλ€.startTime:
Reactκ° μ΄ μ λ°μ΄νΈ λ λλ§μ μμν μκ°μ λλ€.commitTime:
Reactκ° μ΄ μ λ°μ΄νΈλ₯Ό 컀λ°ν μκ°μ λλ€.interactions:
μ΄ μ λ°μ΄νΈκ° μ€μΌμ€λ§λμμ λ μΆμ λλ "μνΈ μμ©"μ μ§ν©μ λλ€.
μ΄ λ°μ΄ν°λ₯Ό μ¬μ©νμ¬ μ»΄ν¬λνΈμ λ λλ§ μ±λ₯μ μΆμ νκ³ μ΅μ νκ° νμν μμμ μλ³ν μ μμ΅λλ€.
νλ‘νμΌλ§ λ°μ΄ν° λΆμ
μμμ μΈκΈν λꡬ μ€ νλλ₯Ό μ¬μ©νμ¬ νλ‘νμΌλ§ λ°μ΄ν°λ₯Ό μΊ‘μ²νλ€λ©΄, λ€μ λ¨κ³λ λ°μ΄ν°λ₯Ό λΆμνκ³ μ±λ₯ λ³λͺ© νμμ μλ³νλ κ²μ λλ€. λ€μμ μ§μ€ν΄μΌ ν λͺ κ°μ§ μ£Όμ μμμ λλ€:
1. λλ¦° λ λλ§ μ»΄ν¬λνΈ μλ³
React κ°λ°μ λꡬ νλ‘νμΌλ¬μ νλ μκ·Έλν(Flamegraph) λ° λν¬(Ranked) λ·°λ λ λλ§νλ λ° μ€λ μκ°μ΄ 걸리λ μ»΄ν¬λνΈλ₯Ό μλ³νλ λ° νΉν μ μ©ν©λλ€. νλ μκ·Έλνμμ λμ λ§λλ₯Ό κ°μ§ μ»΄ν¬λνΈλ λν¬ λͺ©λ‘ μλ¨μ λνλλ μ»΄ν¬λνΈλ₯Ό μ°ΎμΌμμμ€. μ΄λ¬ν μ»΄ν¬λνΈλ€μ μ΅μ ν λμμ΄ λ κ°λ₯μ±μ΄ λμ΅λλ€.
Chrome κ°λ°μ λꡬ μ±λ₯ νμμλ μλΉν μκ°μ μλΉνλ "Update" νλͺ©μ μ°ΎμΌμμμ€. μ΄λ¬ν νλͺ©μ μ»΄ν¬λνΈ μ λ°μ΄νΈλ₯Ό λνλ΄λ©°, μ΄ νλͺ© λ΄μμ μμλ μκ°μ ν΄λΉ μ»΄ν¬λνΈμ λ λλ§ λΉμ©μ λνλ λλ€.
2. λΆνμν 리λ λλ§ μ°Ύμλ΄κΈ°
λΆνμν 리λ λλ§μ νΉν 볡μ‘ν μ ν리μΌμ΄μ μμ μ±λ₯μ ν° μν₯μ λ―ΈμΉ μ μμ΅λλ€. React κ°λ°μ λꡬ νλ‘νμΌλ¬λ propsλ stateκ° λ³κ²½λμ§ μμμμλ λΆκ΅¬νκ³ λ¦¬λ λλ§λλ μ»΄ν¬λνΈλ₯Ό μλ³νλ λ° λμμ μ€ μ μμ΅λλ€.
React κ°λ°μ λꡬ μ€μ μμ "μ»΄ν¬λνΈκ° λ λλ§λ λ μ
λ°μ΄νΈ κ°μ‘° νμ" μ΅μ
μ νμ±ννμμμ€. μ΄λ κ² νλ©΄ 리λ λλ§λλ μ»΄ν¬λνΈκ° μκ°μ μΌλ‘ κ°μ‘° νμλμ΄ λΆνμν 리λ λλ§μ μ½κ² λ°κ²¬ν μ μμ΅λλ€. μ΄λ¬ν μ»΄ν¬λνΈκ° 리λ λλ§λλ μ΄μ λ₯Ό μ‘°μ¬νκ³ React.memo
λλ useMemo
μ κ°μ κΈ°μ μ ꡬννμ¬ μ΄λ₯Ό λ°©μ§νμμμ€.
3. λΉμ©μ΄ λ§μ΄ λλ κ³μ° κ²ν
μ»΄ν¬λνΈ λ΄μμ μ€λ μ€νλλ κ³μ°μ λ©μΈ μ€λ λλ₯Ό μ°¨λ¨νκ³ μ±λ₯ λ¬Έμ λ₯Ό μΌμΌν¬ μ μμ΅λλ€. Chrome κ°λ°μ λꡬ μ±λ₯ νμ μ΄λ¬ν κ³μ°μ μλ³νλ λ° μ μ©ν λꡬμ λλ€.
νλ μ μ°¨νΈ λλ λ°ν μ λ·°μμ μλΉν μκ°μ μλΉνλ JavaScript ν¨μλ₯Ό μ°ΎμΌμμμ€. μ΄λ¬ν ν¨μλ 볡μ‘ν κ³μ°, λ°μ΄ν° λ³ν λλ κΈ°ν λΉμ©μ΄ λ§μ΄ λλ μμ μ μννκ³ μμ μ μμ΅λλ€. λ©λͺ¨μ΄μ μ΄μ , μΊμ± λλ λ ν¨μ¨μ μΈ μκ³ λ¦¬μ¦μ μ¬μ©νμ¬ μ΄λ¬ν ν¨μλ₯Ό μ΅μ ννλ κ²μ κ³ λ €νμμμ€.
4. λ€νΈμν¬ μμ² λΆμ
λ€νΈμν¬ μμ² λν μ±λ₯ λ³λͺ© νμμ μμΈμ΄ λ μ μμΌλ©°, νΉν λ리거λ λΉλ²ν κ²½μ°μ κ·Έλ μ΅λλ€. Chrome κ°λ°μ λꡬμ λ€νΈμν¬ νμ μ ν리μΌμ΄μ μ λ€νΈμν¬ νλμ λν ν΅μ°°λ ₯μ μ 곡ν©λλ€.
μλ£νλ λ° μ€λ μκ°μ΄ 걸리λ μμ²μ΄λ λ°λ³΅μ μΌλ‘ μ΄λ£¨μ΄μ§λ μμ²μ μ°ΎμΌμμμ€. μΊμ±, νμ΄μ§λ€μ΄μ λλ λ ν¨μ¨μ μΈ λ°μ΄ν° κ°μ Έμ€κΈ° μ λ΅μ μ¬μ©νμ¬ μ΄λ¬ν μμ²μ μ΅μ ννλ κ²μ κ³ λ €νμμμ€.
5. μ€μΌμ€λ¬ μνΈ μμ© μ΄ν΄
React μ€μΌμ€λ¬κ° μμ μ μ΄λ»κ² μ°μ μμλ₯Ό μ νκ³ μ€ννλμ§μ λν λ κΉμ μ΄ν΄λ μ±λ₯ μ΅μ νμ λ§€μ° μ€μν μ μμ΅λλ€. Chrome κ°λ°μ λꡬ μ±λ₯ νκ³Ό React κ°λ°μ λꡬ νλ‘νμΌλ¬κ° μ€μΌμ€λ¬μ μλμ λν μΌλΆ κ°μμ±μ μ 곡νμ§λ§, μΊ‘μ²λ λ°μ΄ν°λ₯Ό λΆμνλ €λ©΄ Reactμ λ΄λΆ μλμ λν λ λ―Έλ¬ν μ΄ν΄κ° νμν©λλ€.
μ»΄ν¬λνΈμ μ€μΌμ€λ¬ κ°μ μνΈ μμ©μ μ§μ€νμμμ€. νΉμ μ»΄ν¬λνΈκ° μ§μμ μΌλ‘ λμ μ°μ μμμ μ λ°μ΄νΈλ₯Ό μ λ°νλ κ²½μ°, μ΄λ¬ν μ λ°μ΄νΈκ° μ νμνμ§, κ·Έλ¦¬κ³ μ§μ°μν€κ±°λ μ΅μ νν μ μλμ§ λΆμνμμμ€. μ€μΌμ€λ¬κ° λ λλ§, λ μ΄μμ, νμΈν κ³Ό κ°μ λ€λ₯Έ μ νμ μμ μ μ΄λ»κ² κ΅μ°¨νμ¬ μ²λ¦¬νλμ§ μ£Όμ κΉκ² μ΄ν΄λ³΄μμμ€. μ€μΌμ€λ¬κ° μ§μμ μΌλ‘ μμ κ°μ μ ννλ κ²½μ°, μ΄λ μ ν리μΌμ΄μ μ΄ μ€λμ±(thrashing)μ κ²ͺκ³ μμμ λνλΌ μ μμΌλ©°, μ΄λ μ±λ₯ μ νλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
μ΅μ ν κΈ°λ²
νλ‘νμΌλ§μ ν΅ν΄ μ±λ₯ λ³λͺ© νμμ μλ³νλ€λ©΄, λ€μ λ¨κ³λ μ ν리μΌμ΄μ μ μ±λ₯μ κ°μ νκΈ° μν μ΅μ ν κΈ°λ²μ ꡬννλ κ²μ λλ€. λ€μμ λͺ κ°μ§ μΌλ°μ μΈ μ΅μ ν μ λ΅μ λλ€:
1. λ©λͺ¨μ΄μ μ΄μ (Memoization)
λ©λͺ¨μ΄μ μ΄μ
μ λΉμ©μ΄ λ§μ΄ λλ ν¨μ νΈμΆ κ²°κ³Όλ₯Ό μΊμ±νκ³ λμΌν μ
λ ₯μ΄ λ€μ λ°μν λ μΊμλ κ²°κ³Όλ₯Ό λ°ννλ κΈ°λ²μ
λλ€. Reactμμλ React.memo
λ₯Ό μ¬μ©νμ¬ ν¨μν μ»΄ν¬λνΈλ₯Ό λ©λͺ¨μ΄μ¦νκ³ useMemo
ν
μ μ¬μ©νμ¬ κ³μ° κ²°κ³Όλ₯Ό λ©λͺ¨μ΄μ¦ν μ μμ΅λλ€.
import React, { useMemo } from 'react';
const MyComponent = React.memo(function MyComponent(props) {
// ... component logic
});
function MyComponentWithMemoizedValue() {
const expensiveValue = useMemo(() => {
// ... expensive computation
return result;
}, [dependencies]);
return (
{expensiveValue}
);
}
2. κ°μν(Virtualization)
κ°μνλ 보μ΄λ νλͺ©λ§ λ λλ§νμ¬ ν° λͺ©λ‘μ΄λ ν
μ΄λΈμ ν¨μ¨μ μΌλ‘ λ λλ§νλ κΈ°λ²μ
λλ€. react-window
λ° react-virtualized
μ κ°μ λΌμ΄λΈλ¬λ¦¬λ React μ ν리μΌμ΄μ
μμ λͺ©λ‘κ³Ό ν
μ΄λΈμ κ°μννκΈ° μν μ»΄ν¬λνΈλ₯Ό μ 곡ν©λλ€.
3. μ½λ λΆν (Code Splitting)
μ½λ λΆν μ μ ν리μΌμ΄μ
μ λ μμ μ²ν¬λ‘ λλκ³ νμμ λ°λΌ λ‘λνλ κΈ°λ²μ
λλ€. μ΄λ₯Ό ν΅ν΄ μ ν리μΌμ΄μ
μ μ΄κΈ° λ‘λ μκ°μ μ€μ΄κ³ μ λ°μ μΈ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€. Reactλ λμ importμ React.lazy
λ° Suspense
μ»΄ν¬λνΈλ₯Ό μ¬μ©νμ¬ μ½λ λΆν μ μ§μν©λλ€.
import React, { Suspense } from 'react';
const MyComponent = React.lazy(() => import('./MyComponent'));
function App() {
return (
Loading...
4. λλ°μ΄μ±(Debouncing)κ³Ό μ€λ‘νλ§(Throttling)
λλ°μ΄μ±κ³Ό μ€λ‘νλ§μ ν¨μκ° νΈμΆλλ μλλ₯Ό μ ννλ κΈ°λ²μ λλ€. λλ°μ΄μ±μ ν¨μκ° λ§μ§λ§μΌλ‘ νΈμΆλ ν μΌμ μκ°μ΄ μ§λ νμμΌ ν¨μ μ€νμ μ§μ°μν΅λλ€. μ€λ‘νλ§μ ν¨μκ° λ¨μ μκ°λΉ νΉμ νμ μ΄μ νΈμΆλμ§ μλλ‘ μλλ₯Ό μ νν©λλ€.
μ΄λ¬ν κΈ°λ²μ μ€ν¬λ‘€ νΈλ€λ¬λ 리μ¬μ΄μ¦ νΈλ€λ¬μ κ°μ΄ μμ£Ό νΈμΆλλ μ΄λ²€νΈ νΈλ€λ¬λ₯Ό μ΅μ ννλ λ° μ μ©ν μ μμ΅λλ€.
5. λ°μ΄ν° κ°μ Έμ€κΈ° μ΅μ ν
ν¨μ¨μ μΈ λ°μ΄ν° κ°μ Έμ€κΈ°λ μ ν리μΌμ΄μ μ±λ₯μ λ§€μ° μ€μν©λλ€. λ€μκ³Ό κ°μ κΈ°λ²μ κ³ λ €νμμμ€:
- μΊμ±(Caching): μμ£Ό μ κ·Όνλ λ°μ΄ν°λ₯Ό λΈλΌμ°μ λ μλ²μ μ μ₯νμ¬ λ€νΈμν¬ μμ² μλ₯Ό μ€μ λλ€.
- νμ΄μ§λ€μ΄μ (Pagination): λ°μ΄ν°λ₯Ό λ μμ μ²ν¬λ‘ λ‘λνμ¬ λ€νΈμν¬λ₯Ό ν΅ν΄ μ μ‘λλ λ°μ΄ν° μμ μ€μ λλ€.
- GraphQL: GraphQLμ μ¬μ©νμ¬ νμν λ°μ΄ν°λ§ κ°μ Έμ μ€λ²-νμΉμ λ°©μ§ν©λλ€.
6. λΆνμν μν μ λ°μ΄νΈ μ€μ΄κΈ°
μ λμ μΌλ‘ νμνμ§ μμ ν μν μ
λ°μ΄νΈλ₯Ό μ λ°νμ§ λ§μμμ€. useEffect
ν
μ΄ λΆνμνκ² μ€νλλ κ²μ λ°©μ§νκΈ° μν΄ μμ‘΄μ±μ μ μ€νκ² κ³ λ €νμμμ€. λΆλ³ λ°μ΄ν° ꡬ쑰λ₯Ό μ¬μ©νμ¬ Reactκ° λ³κ²½ μ¬νμ μ ννκ² κ°μ§νκ³ λ°μ΄ν°κ° μ€μ λ‘ λ³κ²½λμ§ μμμ λ μ»΄ν¬λνΈκ° 리λ λλ§λλ κ²μ λ°©μ§νλλ‘ νμμμ€.
μ€μ μ¬λ‘
React μ€μΌμ€λ¬ νλ‘νμΌλ§μ μ¬μ©νμ¬ μ ν리μΌμ΄μ μ±λ₯μ μ΅μ ννλ λͺ κ°μ§ μ€μ μ¬λ‘λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€:
μ¬λ‘ 1: 볡μ‘ν νΌ μ΅μ ν
μ¬λ¬ μ λ ₯ νλμ μ ν¨μ± κ²μ¬ κ·μΉμ΄ μλ 볡μ‘ν νΌμ΄ μλ€κ³ μμν΄ λ³΄μμμ€. μ¬μ©μκ° νΌμ μ λ ₯ν λλ§λ€ μ ν리μΌμ΄μ μ΄ λλ €μ§λλ€. νλ‘νμΌλ§ κ²°κ³Ό, μ ν¨μ± κ²μ¬ λ‘μ§μ΄ μλΉν μκ°μ μλΉνκ³ νΌμ΄ λΆνμνκ² λ¦¬λ λλ§λλλ‘ νλ κ²μΌλ‘ λνλ¬μ΅λλ€.
μ΅μ ν:
- λλ°μ΄μ±μ ꡬννμ¬ μ¬μ©μκ° μΌμ μκ° λμ νμ΄νμ λ©μΆ νμμΌ μ ν¨μ± κ²μ¬ λ‘μ§μ΄ μ€νλλλ‘ μ§μ°μν΅λλ€.
useMemo
λ₯Ό μ¬μ©νμ¬ μ ν¨μ± κ²μ¬ λ‘μ§μ κ²°κ³Όλ₯Ό λ©λͺ¨μ΄μ¦ν©λλ€.- μ ν¨μ± κ²μ¬ μκ³ λ¦¬μ¦μ κ³μ° 볡μ‘λλ₯Ό μ€μ΄λλ‘ μ΅μ νν©λλ€.
μ¬λ‘ 2: λκ·λͺ¨ λͺ©λ‘ μ΅μ ν
React μ»΄ν¬λνΈμμ λ λλ§λλ λκ·λͺ¨ νλͺ© λͺ©λ‘μ΄ μμ΅λλ€. λͺ©λ‘μ΄ μ»€μ§μλ‘ μ ν리μΌμ΄μ μ΄ λλ €μ§κ³ λ°μμ΄ μμ΄μ§λλ€. νλ‘νμΌλ§ κ²°κ³Ό, λͺ©λ‘ λ λλ§μ΄ μλΉν μκ°μ μλΉνλ κ²μΌλ‘ λνλ¬μ΅λλ€.
μ΅μ ν:
React.memo
λ₯Ό μ¬μ©νμ¬ κ°λ³ λͺ©λ‘ νλͺ©μ λ λλ§μ λ©λͺ¨μ΄μ¦ν©λλ€.μ¬λ‘ 3: λ°μ΄ν° μκ°ν μ΅μ ν
λκ·λͺ¨ λ°μ΄ν°μ μ νμνλ λ°μ΄ν° μκ°νλ₯Ό ꡬμΆνκ³ μμ΅λλ€. μκ°νμ μνΈ μμ©ν λ λμ λλ μ§μ°μ΄ λ°μν©λλ€. νλ‘νμΌλ§ κ²°κ³Ό, λ°μ΄ν° μ²λ¦¬μ μ°¨νΈ λ λλ§μ΄ λ³λͺ© νμμ μμΈμΈ κ²μΌλ‘ λνλ¬μ΅λλ€.
μ΅μ ν:
React μ€μΌμ€λ¬ νλ‘νμΌλ§ λͺ¨λ² μ¬λ‘
μ±λ₯ μ΅μ νλ₯Ό μν΄ React μ€μΌμ€λ¬ νλ‘νμΌλ§μ ν¨κ³Όμ μΌλ‘ νμ©νλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νμμμ€:
- νμ€μ μΈ νκ²½μμ νλ‘νμΌλ§: μ΄μ νκ²½κ³Ό λ§€μ° μ μ¬ν νκ²½μμ μ ν리μΌμ΄μ μ νλ‘νμΌλ§νκ³ μλμ§ νμΈνμμμ€. μ¬κΈ°μλ νμ€μ μΈ λ°μ΄ν°, λ€νΈμν¬ μ‘°κ±΄ λ° νλμ¨μ΄ κ΅¬μ± μ¬μ©μ΄ ν¬ν¨λ©λλ€.
- μ¬μ©μ μνΈ μμ©μ μ§μ€: μ±λ₯ λ¬Έμ λ₯Ό μΌμΌν€λ νΉμ μ¬μ©μ μνΈ μμ©μ νλ‘νμΌλ§νμμμ€. μ΄λ μ΅μ νκ° νμν μμμ μ’νλ λ° λμμ΄ λ κ²μ λλ€.
- λ¬Έμ λΆλ¦¬: μ±λ₯ λ³λͺ© νμμ μΌμΌν€λ νΉμ μ»΄ν¬λνΈλ μ½λλ₯Ό λΆλ¦¬νλ €κ³ λ Έλ ₯νμμμ€. μ΄λ λ¬Έμ μ κ·Όλ³Έ μμΈμ μλ³νκΈ° λ μ½κ² λ§λλλ€.
- μ ν μΈ‘μ : μ΅μ νλ₯Ό ꡬννκΈ° μ κ³Ό νμ νμ μ ν리μΌμ΄μ μ μ±λ₯μ μΈ‘μ νμμμ€. μ΄λ μ΅μ νκ° μ€μ λ‘ μ±λ₯μ ν₯μμν€κ³ μλμ§ νμΈνλ λ° λμμ΄ λ©λλ€.
- λ°λ³΅ λ° κ°μ : μ±λ₯ μ΅μ νλ λ°λ³΅μ μΈ κ³Όμ μ λλ€. λͺ¨λ μ±λ₯ λ¬Έμ λ₯Ό ν λ²μ ν΄κ²°ν κ²μ΄λΌκ³ κΈ°λνμ§ λ§μμμ€. μνλ μ±λ₯ μμ€μ λλ¬ν λκΉμ§ μ ν리μΌμ΄μ μ κ³μ νλ‘νμΌλ§νκ³ λΆμνλ©° μ΅μ ννμμμ€.
- νλ‘νμΌλ§ μλν: CI/CD νμ΄νλΌμΈμ νλ‘νμΌλ§μ ν΅ν©νμ¬ μ ν리μΌμ΄μ μ μ±λ₯μ μ§μμ μΌλ‘ λͺ¨λν°λ§νμμμ€. μ΄λ μ±λ₯ μ νλ₯Ό μ‘°κΈ°μ λ°κ²¬νκ³ νλ‘λμ μ λλ¬νλ κ²μ λ°©μ§νλ λ° λμμ΄ λ©λλ€.
κ²°λ‘
React μ€μΌμ€λ¬ νλ‘νμΌλ§μ React μ ν리μΌμ΄μ μ μ±λ₯μ μ΅μ ννλ λ° νμμ μΈ λꡬμ λλ€. Reactκ° μμ μ μ΄λ»κ² μ€μΌμ€λ§νκ³ μ€ννλμ§ μ΄ν΄νκ³ , μ¬μ© κ°λ₯ν νλ‘νμΌλ§ λꡬλ₯Ό νμ©ν¨μΌλ‘μ¨ μ±λ₯ λ³λͺ© νμμ μλ³νκ³ , λͺ©νμ λ§λ μ΅μ νλ₯Ό ꡬννλ©°, μνν μ¬μ©μ κ²½νμ μ 곡ν μ μμ΅λλ€. μ΄ ν¬κ΄μ μΈ κ°μ΄λλ React μ±λ₯ μ΅μ ν μ¬μ μ μμνλ λ° κ²¬κ³ ν κΈ°λ°μ μ 곡ν©λλ€. μ΅μ μ μ±λ₯κ³Ό μ¦κ±°μ΄ μ¬μ©μ κ²½νμ 보μ₯νκΈ° μν΄ μ ν리μΌμ΄μ μ μ§μμ μΌλ‘ νλ‘νμΌλ§νκ³ λΆμνλ©° κ°μ νλ κ²μ μμ§ λ§μμμ€.