μλ μν μ‘°μ λ° μ»΄ν¬λνΈ κ° λκΈ°ν κΈ°μ μ νꡬνμ¬ Reactμ μν κ΄λ¦¬λ₯Ό λ§μ€ν°νκ³ , μ ν리μΌμ΄μ λ°μμ±κ³Ό λ°μ΄ν° μΌκ΄μ±μ ν₯μμν€μΈμ.
React μλ μν μ‘°μ : μ»΄ν¬λνΈ κ° μν λκΈ°ν
μ¬μ©μ μΈν°νμ΄μ€ ꡬμΆμ μν μ λμ μΈ JavaScript λΌμ΄λΈλ¬λ¦¬μΈ Reactλ 볡μ‘νκ³ λμ μΈ μΉ μ ν리μΌμ΄μ μμ±μ μ©μ΄νκ² νλ μ»΄ν¬λνΈ κΈ°λ° μν€ν μ²λ₯Ό μ 곡ν©λλ€. React κ°λ°μ κ·Όλ³Έμ μΈ μΈ‘λ©΄μ ν¨κ³Όμ μΈ μν κ΄λ¦¬μ λλ€. μ¬λ¬ μ»΄ν¬λνΈλ‘ μ ν리μΌμ΄μ μ ꡬμΆν λ, μν λ³κ²½μ΄ λͺ¨λ κ΄λ ¨ μ»΄ν¬λνΈμ μΌκ΄λκ² λ°μλλλ‘ νλ κ²μ΄ μ€μν©λλ€. λ°λ‘ μ΄ μ§μ μμ μλ μν μ‘°μ κ³Ό μ»΄ν¬λνΈ κ° μν λκΈ°ν κ°λ μ΄ λ§€μ° μ€μν΄μ§λλ€.
Reactμμ μνμ μ€μμ± μ΄ν΄νκΈ°
React μ»΄ν¬λνΈλ λ³Έμ§μ μΌλ‘ νλ©΄μ λ λλ§λμ΄μΌ ν κ²μ μ€λͺ νλ μμλ₯Ό λ°ννλ ν¨μμ λλ€. μ΄ μ»΄ν¬λνΈλ€μ μν(state)λΌκ³ νλ μ체 λ°μ΄ν°λ₯Ό κ°μ§ μ μμ΅λλ€. μνλ μκ°μ΄ μ§λ¨μ λ°λΌ λ³ν μ μλ λ°μ΄ν°λ₯Ό λνλ΄λ©°, μ»΄ν¬λνΈκ° μ€μ€λ‘λ₯Ό λ λλ§νλ λ°©μμ κ²°μ ν©λλ€. μ»΄ν¬λνΈμ μνκ° λ³κ²½λλ©΄ Reactλ μ΄λ¬ν λ³κ²½ μ¬νμ λ°μνκΈ° μν΄ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό μ§λ₯μ μΌλ‘ μ λ°μ΄νΈν©λλ€.
μνλ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬νλ λ₯λ ₯μ μνΈμμ©μ μ΄κ³ λ°μμ±μ΄ λ°μ΄λ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό λ§λλ λ° λ§€μ° μ€μν©λλ€. μ μ ν μν κ΄λ¦¬ μμ΄λ μ ν리μΌμ΄μ μ λ²κ·Έκ° λ°μνκΈ° μ½κ³ , μ μ§ κ΄λ¦¬κ° μ΄λ €μ°λ©°, λ°μ΄ν° λΆμΌμΉκ° λ°μν κ°λ₯μ±μ΄ λμμ§λλ€. λ¬Έμ λ μ’ μ’ μ ν리μΌμ΄μ μ μ¬λ¬ λΆλΆμμ μνλ₯Ό λκΈ°ννλ λ°©λ²μ μμΌλ©°, νΉν 볡μ‘ν UIλ₯Ό λ€λ£° λ λμ± κ·Έλ μ΅λλ€.
μλ μν μ‘°μ : ν΅μ¬ λ©μ»€λμ¦
Reactμ λ΄μ₯ λ©μ»€λμ¦μ λλΆλΆμ μν μ‘°μ μ μλμΌλ‘ μ²λ¦¬ν©λλ€. μ»΄ν¬λνΈμ μνκ° λ³κ²½λλ©΄ Reactλ DOM(Document Object Model)μ μ΄λ λΆλΆμ μ λ°μ΄νΈν΄μΌ νλμ§ κ²°μ νλ νλ‘μΈμ€λ₯Ό μμν©λλ€. μ΄ νλ‘μΈμ€λ₯Ό μ‘°μ (reconciliation)μ΄λΌκ³ ν©λλ€. Reactλ κ°μ DOMμ μ¬μ©νμ¬ λ³κ²½ μ¬νμ ν¨μ¨μ μΌλ‘ λΉκ΅νκ³ κ°μ₯ μ΅μ νλ λ°©μμΌλ‘ μ€μ DOMμ μ λ°μ΄νΈν©λλ€.
Reactμ μ‘°μ μκ³ λ¦¬μ¦μ μ§μ μ μΈ DOM μ‘°μλμ μ΅μννλ κ²μ λͺ©νλ‘ ν©λλ€. μ΄λ μ±λ₯ λ³λͺ© νμμ μΌμΌν¬ μ μκΈ° λλ¬Έμ λλ€. μ‘°μ νλ‘μΈμ€μ ν΅μ¬ λ¨κ³λ λ€μκ³Ό κ°μ΅λλ€:
- λΉκ΅: Reactλ νμ¬ μνμ μ΄μ μνλ₯Ό λΉκ΅ν©λλ€.
- μ°¨μ΄μ μλ³(Diffing): Reactλ μν λ³κ²½μ λ°λΌ κ°μ DOM νν κ°μ μ°¨μ΄μ μ μλ³ν©λλ€.
- μ λ°μ΄νΈ: Reactλ λ³κ²½ μ¬νμ λ°μνκΈ° μν΄ μ€μ DOMμ νμν λΆλΆλ§ μ λ°μ΄νΈνμ¬ νλ‘μΈμ€λ₯Ό μ±λ₯μ μ΅μ νν©λλ€.
μ΄λ¬ν μλ μ‘°μ μ κΈ°λ³Έμ μ΄μ§λ§, νΉν μ¬λ¬ μ»΄ν¬λνΈ κ°μ 곡μ ν΄μΌ νλ μνλ₯Ό λ€λ£° λλ νμ μΆ©λΆνμ§λ μμ΅λλ€. λ°λ‘ μ΄ μ§μ μμ μ»΄ν¬λνΈ κ° μν λκΈ°ν κΈ°μ μ΄ νμνκ² λ©λλ€.
μ»΄ν¬λνΈ κ° μν λκΈ°ν κΈ°μ
μ¬λ¬ μ»΄ν¬λνΈκ° λμΌν μνμ μ κ·Όνκ±°λ μμ ν΄μΌ ν λ, λκΈ°νλ₯Ό 보μ₯νκΈ° μν΄ μ¬λ¬ μ λ΅μ μ¬μ©ν μ μμ΅λλ€. μ΄λ¬ν λ°©λ²λ€μ 볡μ‘μ±μ΄ λ€μνλ©° λ€μν μ ν리μΌμ΄μ κ·λͺ¨μ μꡬ μ¬νμ μ ν©ν©λλ€.
1. μν λμ΄μ¬λ¦¬κΈ°(Lifting State Up)
μ΄κ²μ κ°μ₯ κ°λ¨νκ³ κ·Όλ³Έμ μΈ μ κ·Ό λ°©μ μ€ νλμ λλ€. λ μ΄μμ νμ μ»΄ν¬λνΈκ° μνλ₯Ό 곡μ ν΄μΌ ν λ, μνλ₯Ό κ·Έλ€μ κ³΅ν΅ λΆλͺ¨ μ»΄ν¬λνΈλ‘ μ΄λμν΅λλ€. κ·Έλ¬λ©΄ λΆλͺ¨ μ»΄ν¬λνΈλ μνλ₯Ό μ λ°μ΄νΈνλ ν¨μμ ν¨κ» μνλ₯Ό μμμκ² propsλ‘ μ λ¬ν©λλ€. μ΄λ 곡μ μνμ λν λ¨μΌ μ§μ€ 곡κΈμ(single source of truth)μ λ§λλλ€.
μμ: `Counter` μ»΄ν¬λνΈμ `Display` μ»΄ν¬λνΈκ° μλ€κ³ μμν΄ λ³΄μΈμ. λ μ»΄ν¬λνΈ λͺ¨λ λμΌν μΉ΄μ΄ν° κ°μ νμνκ³ μ λ°μ΄νΈν΄μΌ ν©λλ€. μνλ₯Ό κ³΅ν΅ λΆλͺ¨(μ: `App`)λ‘ λμ΄μ¬λ¦¬λ©΄ λ μ»΄ν¬λνΈκ° νμ λμΌνκ³ λκΈ°νλ μΉ΄μ΄ν° κ°μ κ°λλ‘ λ³΄μ₯ν μ μμ΅λλ€.
μ½λ μμ:
import React, { useState } from 'react';
function Counter(props) {
return (
<button onClick={props.onClick} >Increment</button>
);
}
function Display(props) {
return <p>Count: {props.count}</p>;
}
function App() {
const [count, setCount] = useState(0);
const increment = () => {
setCount(count + 1);
};
return (
<div>
<Counter onClick={increment} />
<Display count={count} />
</div>
);
}
export default App;
2. React 컨ν μ€νΈ API μ¬μ©νκΈ°
React 컨ν μ€νΈ APIλ λͺ¨λ λ 벨μ ν΅ν΄ λͺ μμ μΌλ‘ propsλ₯Ό μ λ¬ν νμ μμ΄ μ»΄ν¬λνΈ νΈλ¦¬ μ 체μμ μνλ₯Ό 곡μ νλ λ°©λ²μ μ 곡ν©λλ€. μ΄λ μ¬μ©μ μΈμ¦ λ°μ΄ν°, ν λ§ μ€μ λλ μΈμ΄ μ€μ κ³Ό κ°μ μ μ μ ν리μΌμ΄μ μνλ₯Ό 곡μ νλ λ° νΉν μ μ©ν©λλ€.
μλ λ°©μ: `React.createContext()`λ₯Ό μ¬μ©νμ¬ μ»¨ν μ€νΈλ₯Ό μμ±ν©λλ€. κ·Έλ° λ€μ, νλ‘λ°μ΄λ(provider) μ»΄ν¬λνΈλ₯Ό μ¬μ©νμ¬ μ»¨ν μ€νΈ κ°μ μ κ·Όν΄μΌ νλ μ ν리μΌμ΄μ λΆλΆμ κ°μλλ€. νλ‘λ°μ΄λλ μνμ ν΄λΉ μνλ₯Ό μ λ°μ΄νΈνλ ν¨μλ₯Ό ν¬ν¨νλ `value` propμ λ°μ΅λλ€. κ·Έλ¬λ©΄ 컨μλ¨Έ(consumer) μ»΄ν¬λνΈλ `useContext` ν μ μ¬μ©νμ¬ μ»¨ν μ€νΈ κ°μ μ κ·Όν μ μμ΅λλ€.
μμ: λ€κ΅μ΄ μ ν리μΌμ΄μ μ ꡬμΆνλ€κ³ μμν΄ λ³΄μΈμ. `currentLanguage` μνλ₯Ό 컨ν μ€νΈμ μ μ₯ν μ μμΌλ©°, νμ¬ μΈμ΄κ° νμν λͺ¨λ μ»΄ν¬λνΈλ μ½κ² μ κ·Όν μ μμ΅λλ€.
μ½λ μμ:
import React, { createContext, useState, useContext } from 'react';
const LanguageContext = createContext();
function LanguageProvider({ children }) {
const [language, setLanguage] = useState('en');
const toggleLanguage = () => {
setLanguage(language === 'en' ? 'fr' : 'en');
};
const value = {
language,
toggleLanguage,
};
return (
<LanguageContext.Provider value={value} >{children}</LanguageContext.Provider>
);
}
function LanguageSwitcher() {
const { language, toggleLanguage } = useContext(LanguageContext);
return (
<button onClick={toggleLanguage} >Switch to {language === 'en' ? 'French' : 'English'}</button>
);
}
function DisplayLanguage() {
const { language } = useContext(LanguageContext);
return <p>Current Language: {language}</p>;
}
function App() {
return (
<LanguageProvider>
<LanguageSwitcher />
<DisplayLanguage />
</LanguageProvider>
);
}
export default App;
3. μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬ μ¬μ©νκΈ° (Redux, Zustand, MobX)
곡μ μνκ° λ§κ³ μνλ₯Ό λ μμΈ‘ κ°λ₯νκ² κ΄λ¦¬ν΄μΌ νλ λ 볡μ‘ν μ ν리μΌμ΄μ μ κ²½μ°, μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬κ° μμ£Ό μ¬μ©λ©λλ€. μ΄λ¬ν λΌμ΄λΈλ¬λ¦¬λ μ ν리μΌμ΄μ μνλ₯Ό μν μ€μ μ§μ€μ μ μ₯μ(store)μ μ μ΄λκ³ μμΈ‘ κ°λ₯ν λ°©μμΌλ‘ ν΄λΉ μνλ₯Ό μ λ°μ΄νΈνκ³ μ κ·Όνλ λ©μ»€λμ¦μ μ 곡ν©λλ€.
- Redux: μμΈ‘ κ°λ₯ν μν 컨ν μ΄λλ₯Ό μ 곡νλ μΈκΈ° μκ³ μ±μν λΌμ΄λΈλ¬λ¦¬μ λλ€. λ¨μΌ μ§μ€ 곡κΈμ, λΆλ³μ±, μμ ν¨μμ μμΉμ λ°λ¦ λλ€. Reduxλ νΉν μ΄κΈ°μ μμ©κ΅¬ μ½λ(boilerplate code)κ° λ§μ μ μμ§λ§, κ°λ ₯ν λꡬμ μ μ μλ μν κ΄λ¦¬ ν¨ν΄μ μ 곡ν©λλ€.
- Zustand: λ κ°λ¨νκ³ κ°λ²Όμ΄ μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬μ λλ€. μ§κ΄μ μΈ APIμ μ€μ μ λμ΄ νΉν μκ·λͺ¨ λλ μ€κ° κ·λͺ¨ νλ‘μ νΈμμ λ°°μ°κ³ μ¬μ©νκΈ° μ½μ΅λλ€. μ’ μ’ κ°κ²°ν¨ λλ¬Έμ μ νΈλ©λλ€.
- MobX: λ€λ₯Έ μ κ·Ό λ°©μμ μ·¨νλ λΌμ΄λΈλ¬λ¦¬λ‘, κ΄μ°° κ°λ₯ν(observable) μνμ μλμΌλ‘ νμλλ κ³μ°μ μ€μ μ λ‘λλ€. MobXλ λ λ°μμ μΈ νλ‘κ·Έλλ° μ€νμΌμ μ¬μ©νμ¬ μΌλΆ κ°λ°μμκ²λ μν μ λ°μ΄νΈλ₯Ό λ μ§κ΄μ μΌλ‘ λ§λλλ€. λ€λ₯Έ μ κ·Ό λ°©μκ³Ό κ΄λ ¨λ μΌλΆ μμ©κ΅¬ μ½λλ₯Ό μΆμνν©λλ€.
μ¬λ°λ₯Έ λΌμ΄λΈλ¬λ¦¬ μ ννκΈ°: μ νμ νλ‘μ νΈμ νΉμ μꡬ μ¬νμ λ°λΌ λ€λ¦ λλ€. Reduxλ μ격ν μν κ΄λ¦¬κ° μ€μν λκ·λͺ¨μ 볡μ‘ν μ ν리μΌμ΄μ μ μ ν©ν©λλ€. Zustandλ λ¨μμ±κ³Ό κΈ°λ₯μ κ· νμ μ 곡νμ¬ λ§μ νλ‘μ νΈμ μ’μ μ νμ λλ€. MobXλ λ°μμ±κ³Ό μμ± μ©μ΄μ±μ΄ ν΅μ¬μΈ μ ν리μΌμ΄μ μμ μ’ μ’ μ νΈλ©λλ€.
μμ (Redux):
μ½λ μμ (κ°κ²°ν¨μ μν΄ λ¨μνλ Redux μ€λν«):
import { createStore } from 'redux';
// Reducer
const counterReducer = (state = { count: 0 }, action) => {
switch (action.type) {
case 'INCREMENT':
return { count: state.count + 1 };
case 'DECREMENT':
return { count: state.count - 1 };
default:
return state;
}
};
// Create store
const store = createStore(counterReducer);
// Access and Update state via dispatch
store.dispatch({ type: 'INCREMENT' });
console.log(store.getState()); // {count: 1}
μ΄κ²μ Reduxμ λ¨μνλ μμμ λλ€. μ€μ μ¬μ©μμλ λ―Έλ€μ¨μ΄, λ 볡μ‘ν μ‘μ , κ·Έλ¦¬κ³ `react-redux`μ κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν μ»΄ν¬λνΈ ν΅ν©μ΄ ν¬ν¨λ©λλ€.
μμ (Zustand):
import { create } from 'zustand';
const useCounterStore = create((set) => ({
count: 0,
increment: () => set((state) => ({ count: state.count + 1 })),
decrement: () => set((state) => ({ count: state.count - 1 }))
}));
function Counter() {
const { count, increment, decrement } = useCounterStore();
return (
<div>
<p>Count: {count}</p>
<button onClick={increment}>Increment</button>
<button onClick={decrement}>Decrement</button>
</div>
);
}
export default Counter;
μ΄ μμλ Zustandμ λ¨μν¨μ μ§μ 보μ¬μ€λλ€.
4. μ€μ μ§μ€μ μν κ΄λ¦¬ μλΉμ€ μ¬μ©νκΈ° (μΈλΆ μλΉμ€μ©)
μΈλΆ μλΉμ€(API λ±)μμ λΉλ‘―λ μνλ₯Ό λ€λ£° λ, μ€μ μλΉμ€λ₯Ό μ¬μ©νμ¬ μ΄ λ°μ΄ν°λ₯Ό κ°μ Έμ€κ³ , μ μ₯νκ³ , μ»΄ν¬λνΈ κ°μ λ°°ν¬ν μ μμ΅λλ€. μ΄ μ κ·Ό λ°©μμ λΉλκΈ° μμ μ μ²λ¦¬νκ³ , μ€λ₯λ₯Ό μ²λ¦¬νλ©°, λ°μ΄ν°λ₯Ό μΊμ±νλ λ° λ§€μ° μ€μν©λλ€. λΌμ΄λΈλ¬λ¦¬λ λ§μΆ€ν μ루μ μΌλ‘ μ΄λ₯Ό κ΄λ¦¬ν μ μμΌλ©°, μ’ μ’ μμμ μΈκΈν μν κ΄λ¦¬ μ κ·Ό λ°©μ μ€ νλμ κ²°ν©λ©λλ€.
μ£Όμ κ³ λ € μ¬ν:
- λ°μ΄ν° κ°μ Έμ€κΈ°: `fetch` λλ `axios`μ κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό κ²μν©λλ€.
- μΊμ±: λΆνμν API νΈμΆμ νΌνκ³ μ±λ₯μ ν₯μμν€κΈ° μν΄ μΊμ± λ©μ»€λμ¦μ ꡬνν©λλ€. λΈλΌμ°μ μΊμ±μ΄λ μΊμ λ μ΄μ΄(μ: Redis)λ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μ μ₯νλ μ λ΅μ κ³ λ €νμΈμ.
- μ€λ₯ μ²λ¦¬: λ€νΈμν¬ μ€λ₯μ API μ€ν¨λ₯Ό μ°μνκ² κ΄λ¦¬νκΈ° μν΄ κ²¬κ³ ν μ€λ₯ μ²λ¦¬ κΈ°λ₯μ ꡬνν©λλ€.
- μ κ·ν: μ€λ³΅μ μ€μ΄κ³ μ λ°μ΄νΈ ν¨μ¨μ±μ ν₯μμν€κΈ° μν΄ λ°μ΄ν° μ κ·νλ₯Ό κ³ λ €ν©λλ€.
- λ‘λ© μν: API μλ΅μ κΈ°λ€λ¦¬λ λμ μ¬μ©μμκ² λ‘λ© μνλ₯Ό νμν©λλ€.
5. μ»΄ν¬λνΈ ν΅μ λΌμ΄λΈλ¬λ¦¬
λ μ κ΅ν μ ν리μΌμ΄μ μ΄λ μ»΄ν¬λνΈ κ°μ κ΄μ¬μ¬ λΆλ¦¬λ₯Ό κ°μ νκ³ μΆλ€λ©΄, μ¬μ©μ μ μ μ΄λ²€νΈμ ν΅μ νμ΄νλΌμΈμ μμ±ν μ μμ§λ§, μ΄λ μΌλ°μ μΌλ‘ κ³ κΈ μ κ·Ό λ°©μμ λλ€.
ꡬν μ°Έκ³ μ¬ν: ꡬνμ μ’ μ’ μ»΄ν¬λνΈκ° ꡬλ νλ μ¬μ©μ μ μ μ΄λ²€νΈλ₯Ό μμ±νλ ν¨ν΄μ ν¬ν¨νλ©°, μ΄λ²€νΈκ° λ°μνλ©΄ ꡬλ λ μ»΄ν¬λνΈκ° λ λλ§λ©λλ€. κ·Έλ¬λ μ΄λ¬ν μ λ΅μ μ’ μ’ λ³΅μ‘νκ³ λκ·λͺ¨ μ ν리μΌμ΄μ μμ μ μ§ κ΄λ¦¬νκΈ° μ΄λ €μ, μμμ μ μλ 첫 λ²μ§Έ μ΅μ λ€μ΄ ν¨μ¬ λ μ μ ν©λλ€.
μ¬λ°λ₯Έ μ κ·Ό λ°©μ μ ννκΈ°
μ΄λ€ μν λκΈ°ν κΈ°μ μ μ¬μ©ν μ§ μ ννλ κ²μ μ ν리μΌμ΄μ μ ν¬κΈ°μ 볡μ‘μ±, μν λ³κ²½ λΉλ, νμν μ μ΄ μμ€, νμ λ€μν κΈ°μ μ λν μλ ¨λ λ± μ¬λ¬ μμΈμ λ°λΌ λ¬λΌμ§λλ€.
- λ¨μν μν: λͺ κ°μ μ»΄ν¬λνΈ κ°μ μλμ μνλ₯Ό 곡μ νλ κ²½μ°, μν λμ΄μ¬λ¦¬κΈ°λ‘ μΆ©λΆν κ²½μ°κ° λ§μ΅λλ€.
- μ μ μ ν리μΌμ΄μ μν: propsλ₯Ό μλμΌλ‘ μ λ¬νμ§ μκ³ μ¬λ¬ μ»΄ν¬λνΈμμ μ κ·Όν΄μΌ νλ μ μ μ ν리μΌμ΄μ μνλ₯Ό κ΄λ¦¬νλ €λ©΄ React 컨ν μ€νΈ APIλ₯Ό μ¬μ©νμΈμ.
- 볡μ‘ν μ ν리μΌμ΄μ : Redux, Zustand λλ MobXμ κ°μ μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬λ κ΄λ²μν μν μꡬ μ¬νκ³Ό μμΈ‘ κ°λ₯ν μν κ΄λ¦¬κ° νμν λκ·λͺ¨μ 볡μ‘ν μ ν리μΌμ΄μ μ κ°μ₯ μ ν©ν©λλ€.
- μΈλΆ λ°μ΄ν° μμ€: API λλ κΈ°ν μΈλΆ λ°μ΄ν° μμ€μμ μ€λ μνλ₯Ό κ΄λ¦¬νλ €λ©΄ μν κ΄λ¦¬ κΈ°μ (컨ν μ€νΈ, μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬)κ³Ό μ€μ μ§μ€μ μλΉμ€λ₯Ό μ‘°ν©νμ¬ μ¬μ©νμΈμ.
μν κ΄λ¦¬λ₯Ό μν λͺ¨λ² μ¬λ‘
μν λκΈ°νλ₯Ό μν΄ μ νν λ°©λ²μ κ΄κ³μμ΄, μ μ μ§ κ΄λ¦¬λκ³ νμ₯ κ°λ₯νλ©° μ±λ₯μ΄ λ°μ΄λ React μ ν리μΌμ΄μ μ λ§λ€κΈ° μν΄μλ λ€μ λͺ¨λ² μ¬λ‘κ° νμμ μ λλ€:
- μνλ₯Ό μ΅μνμΌλ‘ μ μ§νκΈ°: UIλ₯Ό λ λλ§νλ λ° νμν νμ λ°μ΄ν°λ§ μ μ₯νμΈμ. νμ λ°μ΄ν°(λ€λ₯Έ μνμμ κ³μ°ν μ μλ λ°μ΄ν°)λ νμν λ κ³μ°ν΄μΌ ν©λλ€.
- λΆλ³μ±: μνλ₯Ό μ λ°μ΄νΈν λλ νμ λ°μ΄ν°λ₯Ό λΆλ³(immutable)μΌλ‘ μ·¨κΈνμΈμ. μ΄λ κΈ°μ‘΄ κ°μ²΄λ₯Ό μ§μ μμ νλ λμ μλ‘μ΄ μν κ°μ²΄λ₯Ό μμ±νλ κ²μ μλ―Έν©λλ€. μ΄λ μμΈ‘ κ°λ₯ν λ³κ²½μ 보μ₯νκ³ λλ²κΉ μ μ©μ΄νκ² ν©λλ€. μ€νλ λ μ°μ°μ(...)μ `Object.assign()`μ μλ‘μ΄ κ°μ²΄ μΈμ€ν΄μ€λ₯Ό λ§λλ λ° μ μ©ν©λλ€.
- μμΈ‘ κ°λ₯ν μν μ λ°μ΄νΈ: 볡μ‘ν μν λ³κ²½μ λ€λ£° λλ λΆλ³ μ λ°μ΄νΈ ν¨ν΄μ μ¬μ©νκ³ λ³΅μ‘ν μ λ°μ΄νΈλ₯Ό λ μκ³ κ΄λ¦¬νκΈ° μ¬μ΄ μ‘μ μΌλ‘ λλλ κ²μ κ³ λ €νμΈμ.
- λͺ ννκ³ μΌκ΄λ μν ꡬ쑰: μνμ λν΄ μ μ μλκ³ μΌκ΄λ ꡬ쑰λ₯Ό μ€κ³νμΈμ. μ΄λ μ½λλ₯Ό λ μ½κ² μ΄ν΄νκ³ μ μ§ κ΄λ¦¬ν μ μλλ‘ ν©λλ€.
- PropTypes λλ TypeScript μ¬μ©: `PropTypes`(JavaScript νλ‘μ νΈμ©) λλ `TypeScript`(JavaScript λ° TypeScript νλ‘μ νΈ λͺ¨λμ©)λ₯Ό μ¬μ©νμ¬ propsμ μνμ μ νμ κ²μ¦νμΈμ. μ΄λ μ€λ₯λ₯Ό μ‘°κΈ°μ λ°κ²¬νκ³ μ½λ μ μ§ κ΄λ¦¬μ±μ ν₯μμν€λ λ° λμμ΄ λ©λλ€.
- μ»΄ν¬λνΈ κ²©λ¦¬: μν λ³κ²½μ λ²μλ₯Ό μ ννκΈ° μν΄ μ»΄ν¬λνΈ κ²©λ¦¬λ₯Ό λͺ©νλ‘ νμΈμ. λͺ νν κ²½κ³λ₯Ό κ°μ§ μ»΄ν¬λνΈλ₯Ό μ€κ³ν¨μΌλ‘μ¨ μλνμ§ μμ λΆμμ©μ μνμ μ€μΌ μ μμ΅λλ€.
- λ¬Έμν: μ»΄ν¬λνΈ μ¬μ©, 곡μ μν, μ»΄ν¬λνΈ κ° λ°μ΄ν° νλ¦μ ν¬ν¨ν μν κ΄λ¦¬ μ λ΅μ λ¬ΈμννμΈμ. μ΄λ λ€λ₯Έ κ°λ°μ(κ·Έλ¦¬κ³ λ―Έλμ λΉμ μμ !)κ° μ ν리μΌμ΄μ μ΄ μ΄λ»κ² μλνλμ§ μ΄ν΄νλ λ° λμμ΄ λ κ²μ λλ€.
- ν μ€ν : μν κ΄λ¦¬ λ‘μ§μ λν λ¨μ ν μ€νΈλ₯Ό μμ±νμ¬ μ ν리μΌμ΄μ μ΄ μμλλ‘ μλνλμ§ νμΈνμΈμ. μ λ’°μ±μ λμ΄κΈ° μν΄ κΈμ μ μΈ ν μ€νΈ μΌμ΄μ€μ λΆμ μ μΈ ν μ€νΈ μΌμ΄μ€λ₯Ό λͺ¨λ ν μ€νΈνμΈμ.
μ±λ₯ κ³ λ € μ¬ν
μν κ΄λ¦¬λ React μ ν리μΌμ΄μ μ μ±λ₯μ μλΉν μν₯μ λ―ΈμΉ μ μμ΅λλ€. λ€μμ μ±λ₯ κ΄λ ¨ κ³ λ € μ¬νμ λλ€:
- 리λ λλ§ μ΅μν: Reactμ μ‘°μ μκ³ λ¦¬μ¦μ ν¨μ¨μ±μ μ΅μ νλμ΄ μμ΅λλ€. κ·Έλ¬λ λΆνμν 리λ λλ§μ μ¬μ ν μ±λ₯μ μν₯μ μ€ μ μμ΅λλ€. λ©λͺ¨μ΄μ μ΄μ κΈ°μ (μ: `React.memo`, `useMemo`, `useCallback`)μ μ¬μ©νμ¬ propsλ 컨ν μ€νΈ κ°μ΄ λ³κ²½λμ§ μμμ λ μ»΄ν¬λνΈκ° 리λ λλ§λλ κ²μ λ°©μ§νμΈμ.
- λ°μ΄ν° ꡬ쑰 μ΅μ ν: μνλ₯Ό μ μ₯νκ³ μ‘°μνλ λ° μ¬μ©λλ λ°μ΄ν° ꡬ쑰λ₯Ό μ΅μ ννμΈμ. μ΄λ Reactκ° μν μ λ°μ΄νΈλ₯Ό μΌλ§λ ν¨μ¨μ μΌλ‘ μ²λ¦¬ν μ μλμ§μ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
- κΉμ μ λ°μ΄νΈ νΌνκΈ°: ν¬κ³ μ€μ²©λ μν κ°μ²΄λ₯Ό μ λ°μ΄νΈν λλ μνμ νμν λΆλΆλ§ μ λ°μ΄νΈνλ κΈ°μ μ μ¬μ©νλ κ²μ κ³ λ €νμΈμ. μλ₯Ό λ€μ΄, μ€νλ λ μ°μ°μλ₯Ό μ¬μ©νμ¬ μ€μ²©λ μμ±μ μ λ°μ΄νΈν μ μμ΅λλ€.
- μ½λ λΆν μ¬μ©: μ ν리μΌμ΄μ μ΄ ν° κ²½μ°, μ½λ λΆν μ μ¬μ©νμ¬ μ ν리μΌμ΄μ μ νΉμ λΆλΆμ νμν μ½λλ§ λ‘λνλ κ²μ κ³ λ €νμΈμ. μ΄λ μ΄κΈ° λ‘λ μκ°μ κ°μ ν κ²μ λλ€.
- νλ‘νμΌλ§: React κ°λ°μ λꡬλ λ€λ₯Έ νλ‘νμΌλ§ λꡬλ₯Ό μ¬μ©νμ¬ μν μ λ°μ΄νΈμ κ΄λ ¨λ μ±λ₯ λ³λͺ© νμμ μλ³νμΈμ.
μ€μ μ¬λ‘ λ° κΈλ‘λ² μ ν리μΌμ΄μ
μν κ΄λ¦¬λ μ μμκ±°λ νλ«νΌ, μμ λ―Έλμ΄ νλ«νΌ, λ°μ΄ν° λμ보λλ₯Ό ν¬ν¨ν λͺ¨λ μ νμ μ ν리μΌμ΄μ μμ μ€μν©λλ€. λ§μ κ΅μ κΈ°μ λ€μ΄ μ΄ κ²μλ¬Όμμ λ Όμλ κΈ°μ μ μ¬μ©νμ¬ λ°μμ±μ΄ λ°μ΄λκ³ νμ₯ κ°λ₯νλ©° μ μ§ κ΄λ¦¬κ° μ©μ΄ν μ¬μ©μ μΈν°νμ΄μ€λ₯Ό λ§λλλ€.
- μ μμκ±°λ νλ«νΌ: Amazon(λ―Έκ΅), Alibaba(μ€κ΅), Flipkart(μΈλ)μ κ°μ μ μμκ±°λ μΉμ¬μ΄νΈλ μ₯λ°κ΅¬λ(μν, μλ, κ°κ²©), μ¬μ©μ μΈμ¦(λ‘κ·ΈμΈ/λ‘κ·Έμμ μν), μν νν°λ§/μ λ ¬, μ¬μ©μ νλ‘ν κ΄λ¦¬λ₯Ό μν΄ μν κ΄λ¦¬λ₯Ό μ¬μ©ν©λλ€. μνλ μν λͺ©λ‘ νμ΄μ§λΆν° κ²°μ νλ‘μΈμ€μ μ΄λ₯΄κΈ°κΉμ§ νλ«νΌμ λ€μν λΆλΆμμ μΌκ΄λμ΄μΌ ν©λλ€.
- μμ λ―Έλμ΄ νλ«νΌ: Facebook(κΈλ‘λ²), Twitter(κΈλ‘λ²), Instagram(κΈλ‘λ²)κ³Ό κ°μ μμ λ―Έλμ΄ μ¬μ΄νΈλ μν κ΄λ¦¬μ ν¬κ² μμ‘΄ν©λλ€. μ΄λ¬ν νλ«νΌμ μ¬μ©μ νλ‘ν, κ²μλ¬Ό, λκΈ, μλ¦Ό λ° μνΈμμ©μ κ΄λ¦¬ν©λλ€. ν¨μ¨μ μΈ μν κ΄λ¦¬λ μ»΄ν¬λνΈ κ°μ μ λ°μ΄νΈκ° μΌκ΄λκ³ λ§μ λΆνμμλ μ¬μ©μ κ²½νμ΄ μννκ² μ μ§λλλ‘ λ³΄μ₯ν©λλ€.
- λ°μ΄ν° λμ보λ: λ°μ΄ν° λμ보λλ λ°μ΄ν° νμ, μ¬μ©μ μνΈμμ©(νν°λ§, μ λ ¬, μ ν), μ¬μ©μ νλμ λν μ¬μ©μ μΈν°νμ΄μ€μ λ°μμ±μ κ΄λ¦¬νκΈ° μν΄ μν κ΄λ¦¬λ₯Ό μ¬μ©ν©λλ€. μ΄λ¬ν λμ보λλ μ’ μ’ λ€μν μμ€μ λ°μ΄ν°λ₯Ό ν΅ν©νλ―λ‘ μΌκ΄λ μν κ΄λ¦¬μ νμμ±μ΄ λ§€μ° μ€μν΄μ§λλ€. Tableau(κΈλ‘λ²) λ° Microsoft Power BI(κΈλ‘λ²)μ κ°μ νμ¬κ° μ΄λ¬ν μ νμ μ ν리μΌμ΄μ μ μμ λλ€.
μ΄λ¬ν μ ν리μΌμ΄μ λ€μ Reactμμ ν¨κ³Όμ μΈ μν κ΄λ¦¬κ° κ³ νμ§ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό ꡬμΆνλ λ° νμμ μΈ κ΄λ²μν μμμ 보μ¬μ€λλ€.
κ²°λ‘
μνλ₯Ό ν¨κ³Όμ μΌλ‘ κ΄λ¦¬νλ κ²μ React κ°λ°μ μ€μν λΆλΆμ λλ€. μλ μν μ‘°μ κ³Ό μ»΄ν¬λνΈ κ° μν λκΈ°ν κΈ°μ μ λ°μμ±μ΄ λ°μ΄λκ³ ν¨μ¨μ μ΄λ©° μ μ§ κ΄λ¦¬κ° μ©μ΄ν μΉ μ ν리μΌμ΄μ μ λ§λλ λ° κ·Όλ³Έμ μ λλ€. μ΄ κ°μ΄λμμ λ Όμλ λ€μν μ κ·Ό λ°©μκ³Ό λͺ¨λ² μ¬λ‘λ₯Ό μ΄ν΄ν¨μΌλ‘μ¨ κ°λ°μλ κ²¬κ³ νκ³ νμ₯ κ°λ₯ν React μ ν리μΌμ΄μ μ ꡬμΆν μ μμ΅λλ€. μνλ₯Ό λμ΄μ¬λ¦¬λ , React 컨ν μ€νΈ APIλ₯Ό μ¬μ©νλ , μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬λ₯Ό νμ©νλ , λλ κΈ°μ μ κ²°ν©νλ , μ¬λ°λ₯Έ μν κ΄λ¦¬ μ κ·Ό λ°©μμ μ ννλ κ²μ μ ν리μΌμ΄μ μ μ±λ₯, μ μ§ κ΄λ¦¬μ±, νμ₯μ±μ ν° μν₯μ λ―ΈμΉ κ²μ λλ€. λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄κ³ , μ±λ₯μ μ°μ μνλ©°, νλ‘μ νΈμ μꡬ μ¬νμ κ°μ₯ μ ν©ν κΈ°μ μ μ ννμ¬ Reactμ μ μ¬λ ₯μ μ΅λν λ°ννμΈμ.