μ§μ° λ‘λ©, μ½λ λΆν , λμ κ°μ Έμ€κΈ°λ₯Ό ν΅ν΄ React μ ν리μΌμ΄μ μ μ±λ₯μ μ΅μ ννλ λ°©λ²μ μμ보μΈμ. μ΄κΈ° λ‘λ© μκ°μ κ°μ νκ³ μ μΈκ³ μ¬μ©μλ₯Ό μν μ¬μ©μ κ²½νμ ν₯μμν€μΈμ.
React μ§μ° λ‘λ©: μ΅μ νλ μ±λ₯μ μν μ½λ λΆν λ° λμ κ°μ Έμ€κΈ°
μ€λλ λΉ λ₯΄κ² λ³ννλ λμ§νΈ μΈμμμ μΉμ¬μ΄νΈ μ±λ₯μ κ°μ₯ μ€μν©λλ€. μ¬μ©μλ€μ κ±°μ μ¦κ°μ μΈ λ‘λ© μκ°μ κΈ°λνλ©°, λ‘λ©μ΄ λλ¦° μ ν리μΌμ΄μ μ μ¬μ©μμ λΆλ§κ³Ό μ΄νλ‘ μ΄μ΄μ§ μ μμ΅λλ€. μ¬μ©μ μΈν°νμ΄μ€ ꡬμΆμ μν μΈκΈ° μλ μλ°μ€ν¬λ¦½νΈ λΌμ΄λΈλ¬λ¦¬μΈ Reactλ μ±λ₯ μ΅μ νλ₯Ό μν κ°λ ₯ν κΈ°μ μ μ 곡νλ©°, μ§μ° λ‘λ©(lazy loading)μ μ΄ λ¬΄κΈ°κ³ μ ν΅μ¬ λꡬμ λλ€. μ΄ μ’ ν© κ°μ΄λμμλ Reactμμ μ§μ° λ‘λ©, μ½λ λΆν (code splitting), λμ κ°μ Έμ€κΈ°(dynamic imports)λ₯Ό νμ©νμ¬ μ μΈκ³ μ¬μ©μλ₯Ό μν λ λΉ λ₯΄κ³ ν¨μ¨μ μΈ μ ν리μΌμ΄μ μ λ§λλ λ°©λ²μ νꡬν©λλ€.
κΈ°λ³Έ κ°λ μ΄ν΄νκΈ°
μ§μ° λ‘λ©μ΄λ 무μμΈκ°?
μ§μ° λ‘λ©μ 리μμ€κ° μ€μ λ‘ νμν λκΉμ§ μ΄κΈ°νλ λ‘λ©μ μ§μ°μν€λ κΈ°μ μ λλ€. React μ ν리μΌμ΄μ μ λ§₯λ½μμ μ΄λ μ»΄ν¬λνΈ, λͺ¨λ λλ μ ν리μΌμ΄μ μ μ 체 μΉμ μ μ¬μ©μμκ² νμλκΈ° μ§μ κΉμ§ λ‘λ©μ 미루λ κ²μ μλ―Έν©λλ€. μ΄λ μ¦μ νμνμ§ μμ 리μμ€κΉμ§ λͺ¨λ 미리 λ‘λνλ μ¦μ λ‘λ©(eager loading)κ³Ό λμ‘°λ©λλ€.
μ½λ λΆν μ΄λ 무μμΈκ°?
μ½λ λΆν μ μ ν리μΌμ΄μ μ μ½λλ₯Ό λ μκ³ κ΄λ¦¬νκΈ° μ¬μ΄ λ²λ€λ‘ λλλ λ°©μμ λλ€. μ΄λ₯Ό ν΅ν΄ λΈλΌμ°μ λ νμ¬ λ·°λ κΈ°λ₯μ νμν μ½λλ§ λ€μ΄λ‘λνμ¬ μ΄κΈ° λ‘λ© μκ°μ μ€μ΄κ³ μ λ°μ μΈ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€. νλμ κ±°λν μλ°μ€ν¬λ¦½νΈ νμΌμ μ λ¬νλ λμ , μ½λ λΆν μ μ¬μ©νλ©΄ λ μκ³ λͺ©μ μ λ§λ λ²λ€μ νμμ λ°λΌ μ λ¬ν μ μμ΅λλ€.
λμ κ°μ Έμ€κΈ°λ 무μμΈκ°?
λμ κ°μ Έμ€κΈ°λ λ°νμμ λͺ¨λμ λΉλκΈ°μ μΌλ‘ λ‘λν μ μκ² ν΄μ£Όλ μλ°μ€ν¬λ¦½νΈ κΈ°λ₯(ES λͺ¨λ νμ€μ μΌλΆ)μ
λλ€. νμΌ μλ¨μ μ μΈλμ΄ λ―Έλ¦¬ λ‘λλλ μ μ κ°μ Έμ€κΈ°(static imports)μ λ¬λ¦¬, λμ κ°μ Έμ€κΈ°λ import() ν¨μλ₯Ό μ¬μ©νμ¬ νμν λ λͺ¨λμ λ‘λν©λλ€. μ΄λ λͺ¨λμ΄ μΈμ μ΄λ»κ² λ‘λλ μ§ μ λ°νκ² μ μ΄ν μ μκ² ν΄μ£Όλ―λ‘ μ§μ° λ‘λ©κ³Ό μ½λ λΆν μ λ§€μ° μ€μν©λλ€.
μ§μ° λ‘λ©μ΄ μ€μν μ΄μ λ 무μμΈκ°?
μ§μ° λ‘λ©μ μ΄μ μ νΉν ν¬κ³ 볡μ‘ν React μ ν리μΌμ΄μ μμ μλΉν©λλ€:
- μ΄κΈ° λ‘λ© μκ° κ°μ : μ€μνμ§ μμ 리μμ€μ λ‘λ©μ μ§μ°μν΄μΌλ‘μ¨ μ ν리μΌμ΄μ μ΄ μνΈμμ© κ°λ₯ν΄μ§λ λ° κ±Έλ¦¬λ μκ°μ ν¬κ² μ€μΌ μ μμ΅λλ€. μ΄λ λ λμ 첫μΈμκ³Ό λ λ§€λ ₯μ μΈ μ¬μ©μ κ²½νμΌλ‘ μ΄μ΄μ§λλ€.
- λ€νΈμν¬ λμν μλΉ κ°μ: μ§μ° λ‘λ©μ μ΄κΈ°μ λ€μ΄λ‘λν΄μΌ νλ λ°μ΄ν°μ μμ μ΅μννμ¬, νΉν λͺ¨λ°μΌ κΈ°κΈ°λ μΈν°λ· μ°κ²°μ΄ λλ¦° μ¬μ©μλ€μ λμνμ μ μ½ν΄ μ€λλ€. μ΄λ λ€νΈμν¬ μλκ° λ§€μ° λ€μν μ μΈκ³ μ¬μ©μλ₯Ό λμμΌλ‘ νλ μ ν리μΌμ΄μ μ νΉν μ€μν©λλ€.
- μ¬μ©μ κ²½ν ν₯μ: λ λΉ λ₯Έ λ‘λ© μκ°μ λ λΆλλ½κ³ λ°μμ±μ΄ μ’μ μ¬μ©μ κ²½νμΌλ‘ μ§μ μ΄μ΄μ§λλ€. μ¬μ©μλ€μ λΉ λ₯΄κ² λ‘λλκ³ μ¦κ°μ μΈ νΌλλ°±μ μ 곡νλ μΉμ¬μ΄νΈλ μ ν리μΌμ΄μ μ λ μ΄ννλ κ²½ν₯μ΄ μμ΅λλ€.
- λ λμ 리μμ€ νμ©: μ§μ° λ‘λ©μ 리μμ€κ° νμν λλ§ λ‘λλλλ‘ λ³΄μ₯νμ¬ λΆνμν λ©λͺ¨λ¦¬ λ° CPU μλΉλ₯Ό λ°©μ§ν©λλ€.
Reactμμ μ§μ° λ‘λ© κ΅¬ννκΈ°
Reactλ React.lazyμ Suspenseλ₯Ό μ¬μ©νμ¬ μ»΄ν¬λνΈλ₯Ό μ§μ° λ‘λ©νλ λ΄μ₯ λ©μ»€λμ¦μ μ 곡ν©λλ€. μ΄λ₯Ό ν΅ν΄ React μ ν리μΌμ΄μ
μμ μ§μ° λ‘λ©μ λΉκ΅μ κ°λ¨νκ² κ΅¬νν μ μμ΅λλ€.
React.lazyμ Suspense μ¬μ©νκΈ°
React.lazyλ λμ κ°μ Έμ€κΈ°λ₯Ό μΌλ° μ»΄ν¬λνΈμ²λΌ λ λλ§ν μ μκ² ν΄μ£Όλ ν¨μμ
λλ€. μ΄ ν¨μλ λμ import()λ₯Ό νΈμΆνλ ν¨μλ₯Ό μΈμλ‘ λ°μ΅λλ€. μ΄ import() νΈμΆμ React μ»΄ν¬λνΈλ‘ ν΄μλμ΄μΌ ν©λλ€. Suspenseλ μ΄λ€ μ‘°κ±΄μ΄ μΆ©μ‘±λ λκΉμ§(μ΄ κ²½μ°, μ§μ° λ‘λ©λ μ»΄ν¬λνΈκ° λ‘λλ λκΉμ§) μ»΄ν¬λνΈ νΈλ¦¬μ λ λλ§μ 'μΌμ μ€λ¨'ν μ μκ² ν΄μ£Όλ React μ»΄ν¬λνΈμ
λλ€. μ»΄ν¬λνΈκ° λ‘λ©λλ λμ λ체 UIλ₯Ό νμν©λλ€.
κΈ°λ³Έμ μΈ μμλ λ€μκ³Ό κ°μ΅λλ€:
import React, { Suspense } from 'react';
const MyComponent = React.lazy(() => import('./MyComponent'));
function MyPage() {
return (
<Suspense fallback={<div>Loading...</div>}>
<MyComponent />
</Suspense>
);
}
export default MyPage;
μ΄ μμμμ MyComponentλ MyPage μ»΄ν¬λνΈ λ΄μμ λ λλ§λ λλ§ λ‘λλ©λλ€. MyComponentκ° λ‘λ©λλ λμμλ Suspense μ»΄ν¬λνΈμ fallback propμ΄ νμλ©λλ€(μ΄ κ²½μ°, κ°λ¨ν "Loading..." λ©μμ§). ./MyComponent κ²½λ‘λ νμ¬ λͺ¨λμ κΈ°μ€μΌλ‘ MyComponent.js (λλ .jsx, .ts, .tsx) νμΌμ 물리μ μμΉλ‘ ν΄μλ©λλ€.
μ§μ° λ‘λ©μ μ€λ₯ μ²λ¦¬
μ§μ° λ‘λ© κ³Όμ μμ λ°μν μ μλ μ μ¬μ μΈ μ€λ₯λ₯Ό μ²λ¦¬νλ κ²μ λ§€μ° μ€μν©λλ€. μλ₯Ό λ€μ΄, λ€νΈμν¬ μ€λ₯λ νμΌ λλ½μΌλ‘ μΈν΄ λͺ¨λ λ‘λμ μ€ν¨ν μ μμ΅λλ€. ErrorBoundary μ»΄ν¬λνΈλ₯Ό μ¬μ©νμ¬ μ΄λ¬ν μ€λ₯λ₯Ό μ²λ¦¬ν μ μμ΅λλ€. μ΄λ μ§μ° μ»΄ν¬λνΈλ₯Ό λ‘λ©νλ λμ λ°μνλ λͺ¨λ μ€λ₯λ₯Ό μ μμ μΌλ‘ μ²λ¦¬ν΄ μ€ κ²μ
λλ€.
import React, { Suspense, lazy } from 'react';
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(error) {
// λ€μ λ λλ§μμ λ체 UIκ° νμλλλ‘ μνλ₯Ό μ
λ°μ΄νΈν©λλ€.
return { hasError: true };
}
componentDidCatch(error, errorInfo) {
// μ€λ₯λ₯Ό μ€λ₯ λ³΄κ³ μλΉμ€μ κΈ°λ‘ν μλ μμ΅λλ€.
console.error(error, errorInfo);
}
render() {
if (this.state.hasError) {
// μ¬μ©μ μ μ λ체 UIλ₯Ό λ λλ§ν μ μμ΅λλ€.
return <h1>λ¬Έμ κ° λ°μνμ΅λλ€.</h1>;
}
return this.props.children;
}
}
const MyComponent = lazy(() => import('./MyComponent'));
function MyPage() {
return (
<ErrorBoundary>
<Suspense fallback={<div>Loading...</div>}>
<MyComponent />
</Suspense>
</ErrorBoundary>
);
}
export default MyPage;
κ³ κΈ μ½λ λΆν κΈ°λ²
React.lazyμ Suspenseλ μ»΄ν¬λνΈλ₯Ό μ§μ° λ‘λ©νλ κ°λ¨ν λ°©λ²μ μ 곡νμ§λ§, λ κ³ κΈ μ½λ λΆν κΈ°λ²μ ꡬννμ¬ μ ν리μΌμ΄μ
μ μ±λ₯μ λμ± μ΅μ νν μ μμ΅λλ€.
λΌμ°νΈ κΈ°λ° μ½λ λΆν
λΌμ°νΈ κΈ°λ° μ½λ λΆν μ μ ν리μΌμ΄μ λ΄μ μ¬λ¬ λΌμ°νΈλ νμ΄μ§λ₯Ό κΈ°μ€μΌλ‘ μ½λλ₯Ό λΆν νλ κ²μ ν¬ν¨ν©λλ€. μ΄λ₯Ό ν΅ν΄ νμ¬ λΌμ°νΈμ νμν μ½λλ§ λ‘λλλλ‘ λ³΄μ₯νμ¬ μ΄κΈ° λ‘λ© μκ°μ μ΅μννκ³ λ΄λΉκ²μ΄μ μ±λ₯μ ν₯μμν΅λλ€.
react-router-domκ³Ό κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό React.lazy λ° Suspenseμ ν¨κ» μ¬μ©νμ¬ λΌμ°νΈ κΈ°λ° μ½λ λΆν μ λ¬μ±ν μ μμ΅λλ€.
import React, { Suspense, lazy } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
const Home = lazy(() => import('./Home'));
const About = lazy(() => import('./About'));
const Contact = lazy(() => import('./Contact'));
function App() {
return (
<Router>
<Suspense fallback={<div>Loading...</div>}>
<Switch>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
<Route path="/contact" component={Contact} />
</Switch>
</Suspense>
</Router>
);
}
export default App;
μ΄ μμμμ Home, About, Contact μ»΄ν¬λνΈλ μ§μ° λ‘λ©λ©λλ€. κ° λΌμ°νΈλ μ¬μ©μκ° ν΄λΉ λΌμ°νΈλ‘ μ΄λν λλ§ ν΄λΉ μ»΄ν¬λνΈλ₯Ό λ‘λν©λλ€.
μ»΄ν¬λνΈ κΈ°λ° μ½λ λΆν
μ»΄ν¬λνΈ κΈ°λ° μ½λ λΆν μ κ°λ³ μ»΄ν¬λνΈλ₯Ό κΈ°μ€μΌλ‘ μ ν리μΌμ΄μ μ μ½λλ₯Ό λΆν νλ κ²μ ν¬ν¨ν©λλ€. μ΄λ₯Ό ν΅ν΄ νμ¬ λ³΄μ΄κ±°λ νμν μ»΄ν¬λνΈλ§ λ‘λνμ¬ μ±λ₯μ λμ± μ΅μ νν μ μμ΅λλ€. μ΄ κΈ°λ²μ μλΉν μμ μ½λλ₯Ό ν¬ν¨νλ ν¬κ³ 볡μ‘ν μ»΄ν¬λνΈμ νΉν μ μ©ν©λλ€.
μ΄μ μμμμ 보μ¬μ€ κ²μ²λΌ React.lazyμ Suspenseλ₯Ό μ¬μ©νμ¬ μ»΄ν¬λνΈ κΈ°λ° μ½λ λΆν μ ꡬνν μ μμ΅λλ€.
λ²€λ λΆν
λ²€λ λΆν (Vendor splitting)μ μ ν리μΌμ΄μ μ μλνν° μμ‘΄μ±(μ: λΌμ΄λΈλ¬λ¦¬ λ° νλ μμν¬)μ λ³λμ λ²λ€λ‘ λΆλ¦¬νλ κ²μ ν¬ν¨ν©λλ€. μ΄λ₯Ό ν΅ν΄ λΈλΌμ°μ λ μ΄λ¬ν μμ‘΄μ±μ μ ν리μΌμ΄μ μ½λμ λ³λλ‘ μΊμν μ μμ΅λλ€. μλνν° μμ‘΄μ±μ μΌλ°μ μΌλ‘ μ ν리μΌμ΄μ μ½λλ³΄λ€ λ μμ£Ό μ λ°μ΄νΈλλ―λ‘, μ΄λ μΊμ± ν¨μ¨μ ν¬κ² ν₯μμν€κ³ νμ λ°©λ¬Έ μ λ€μ΄λ‘λν΄μΌ νλ λ°μ΄ν° μμ μ€μΌ μ μμ΅λλ€.
Webpack, Parcel, Rollupκ³Ό κ°μ λλΆλΆμ μ΅μ λ²λ€λ¬λ λ²€λ λΆν μ μν λ΄μ₯ μ§μμ μ 곡ν©λλ€. μ€μ μΈλΆ μ 보λ μ νν λ²λ€λ¬μ λ°λΌ λ€λ¦ λλ€. μΌλ°μ μΌλ‘ λ²€λ λͺ¨λμ μλ³νλ κ·μΉμ μ μνκ³ λ²λ€λ¬μκ² ν΄λΉ λͺ¨λμ λν λ³λμ λ²λ€μ μμ±νλλ‘ μ§μνλ κ³Όμ μ΄ ν¬ν¨λ©λλ€.
μ§μ° λ‘λ©μ μν λͺ¨λ² μ¬λ‘
React μ ν리μΌμ΄μ μμ μ§μ° λ‘λ©μ ν¨κ³Όμ μΌλ‘ ꡬννλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νμΈμ:
- μ§μ° λ‘λ© λμ μλ³: μ ν리μΌμ΄μ μ½λλ₯Ό λΆμνμ¬ μ§μ° λ‘λ©μ μ ν©ν μ»΄ν¬λνΈμ λͺ¨λμ μλ³νμΈμ. μ΄κΈ°μ μ¦μ 보μ΄κ±°λ νμνμ§ μμ μ»΄ν¬λνΈμ μ§μ€νμΈμ.
- μλ―Έ μλ λ체 UI μ¬μ©: μ§μ° λ‘λ©λλ μ»΄ν¬λνΈμ λν΄ μ μ΅νκ³ μκ°μ μΌλ‘ λ§€λ ₯μ μΈ λ체 UIλ₯Ό μ 곡νμΈμ. μ΄λ μ»΄ν¬λνΈκ° λ‘λ©λλ λμ μ¬μ©μ κ²½νμ κ°μ νλ λ° λμμ΄ λ©λλ€. μΌλ°μ μΈ λ‘λ© μ€νΌλλ νλ μ΄μ€νλλ₯Ό μ¬μ©νλ λμ , λ λ§₯λ½μ λ§λ λ‘λ© νμκΈ°λ₯Ό μ 곡νλ €κ³ λ Έλ ₯νμΈμ.
- λ²λ€ ν¬κΈ° μ΅μ ν: μ½λ μΆμ, νΈλ¦¬ μμ΄νΉ, μ΄λ―Έμ§ μ΅μ νμ κ°μ κΈ°μ μ μ¬μ©νμ¬ μ½λ λ²λ€μ ν¬κΈ°λ₯Ό μ΅μννμΈμ. λ μμ λ²λ€μ λ 빨리 λ‘λλμ΄ μ λ°μ μΈ μ±λ₯μ ν₯μμν΅λλ€.
- μ±λ₯ λͺ¨λν°λ§: μ ν리μΌμ΄μ μ μ±λ₯μ μ κΈ°μ μΌλ‘ λͺ¨λν°λ§νμ¬ μ μ¬μ μΈ λ³λͺ© νμκ³Ό μ΅μ ν μμμ μλ³νμΈμ. λΈλΌμ°μ κ°λ°μ λꡬλ μ±λ₯ λͺ¨λν°λ§ μλΉμ€λ₯Ό μ¬μ©νμ¬ λ‘λ μκ°, μνΈμμ© κ°λ₯ μκ°(time to interactive), λ©λͺ¨λ¦¬ μ¬μ©λκ³Ό κ°μ μ§νλ₯Ό μΆμ νμΈμ.
- μ² μ ν ν μ€νΈ: μ§μ° λ‘λ©λ μ»΄ν¬λνΈκ° μ¬λ°λ₯΄κ² λ‘λλκ³ μμλλ‘ μλνλμ§ μ² μ νκ² ν μ€νΈνμΈμ. μ€λ₯ μ²λ¦¬ λ° λ체 UI λμμ νΉν μ£Όμλ₯Ό κΈ°μΈμ΄μΈμ.
μ½λ λΆν μ μν λꡬ λ° λΌμ΄λΈλ¬λ¦¬
React μ ν리μΌμ΄μ μμ μ½λ λΆν κ³Όμ μ λ¨μννλ λ° λμμ΄ λλ μ¬λ¬ λꡬμ λΌμ΄λΈλ¬λ¦¬κ° μμ΅λλ€:
- Webpack: λμ κ°μ Έμ€κΈ°, λ²€λ λΆν , μ²ν¬ μ΅μ νλ₯Ό ν¬ν¨νμ¬ μ½λ λΆν μ κ΄λ²μνκ² μ§μνλ κ°λ ₯ν λͺ¨λ λ²λ€λ¬μ λλ€. Webpackμ κ΅¬μ± κ°λ₯μ±μ΄ λ§€μ° λμ μ ν리μΌμ΄μ μ νΉμ μꡬμ λ§κ² λ§μΆ€ μ€μ ν μ μμ΅λλ€.
- Parcel: μ½λ λΆν μ μ½κ² μμν μ μκ² ν΄μ£Όλ μ λ‘ κ΅¬μ±(zero-configuration) λ²λ€λ¬μ λλ€. Parcelμ λμ κ°μ Έμ€κΈ°λ₯Ό μλμΌλ‘ κ°μ§νκ³ μ½λλ₯Ό λ μμ λ²λ€λ‘ λΆν ν©λλ€.
- Rollup: νΉν λΌμ΄λΈλ¬λ¦¬μ νλ μμν¬λ₯Ό ꡬμΆνλ λ° μ ν©ν λͺ¨λ λ²λ€λ¬μ λλ€. Rollupμ νΈλ¦¬ μμ΄νΉ μκ³ λ¦¬μ¦μ μ¬μ©νμ¬ μ¬μ©νμ§ μλ μ½λλ₯Ό μ κ±°νλ―λ‘ λ²λ€ ν¬κΈ°κ° λ μμμ§λλ€.
- React Loadable: (μ°Έκ³ : κ³Όκ±°μ μΈκΈ°κ° μμμ§λ§, νμ¬λ React.lazyμ Suspenseλ‘ λ체λμμ΅λλ€) μ»΄ν¬λνΈλ₯Ό μ§μ° λ‘λ©νλ κ³Όμ μ λ¨μννλ κ³ μ°¨ μ»΄ν¬λνΈμ λλ€. React Loadableμ μ¬μ λ‘λ©, μ€λ₯ μ²λ¦¬, μλ² μ¬μ΄λ λ λλ§ μ§μκ³Ό κ°μ κΈ°λ₯μ μ 곡ν©λλ€.
μ±λ₯ μ΅μ νλ₯Ό μν κΈλ‘λ² κ³ λ € μ¬ν
μ μΈκ³ μ¬μ©μλ₯Ό μν΄ React μ ν리μΌμ΄μ μ μ΅μ νν λλ λ€νΈμν¬ μ§μ° μκ°, μ§λ¦¬μ μμΉ, κΈ°κΈ° μ±λ₯κ³Ό κ°μ μμλ₯Ό κ³ λ €νλ κ²μ΄ μ€μν©λλ€.
- μ½ν μΈ μ μ‘ λ€νΈμν¬(CDN): CDNμ μ¬μ©νμ¬ μ μΈκ³μ μμΉν μ¬λ¬ μλ²μ μ ν리μΌμ΄μ μ μμ°μ λ°°ν¬νμΈμ. μ΄λ λ€νΈμν¬ μ§μ° μκ°μ μ€μ΄κ³ λ€λ₯Έ μ§λ¦¬μ μ§μμ μ¬μ©μλ€μ λ‘λ μκ°μ κ°μ ν©λλ€. μΈκΈ° μλ CDN μ 곡μ 체λ‘λ Cloudflare, Amazon CloudFront, Akamaiκ° μμ΅λλ€.
- μ΄λ―Έμ§ μ΅μ ν: λ€μν νλ©΄ ν¬κΈ°μ ν΄μλμ λ§κ² μ΄λ―Έμ§λ₯Ό μ΅μ ννμΈμ. λ°μν μ΄λ―Έμ§μ μ΄λ―Έμ§ μμΆ κΈ°μ μ μ¬μ©νμ¬ μ΄λ―Έμ§ νμΌ ν¬κΈ°λ₯Ό μ€μ΄κ³ λ‘λ μκ°μ κ°μ νμΈμ. ImageOptimμ΄λ TinyPNGμ κ°μ λκ΅¬κ° μ΄λ―Έμ§ μ΅μ νμ λμμ΄ λ μ μμ΅λλ€.
- μ§μν(Localization): μ§μνκ° μ±λ₯μ λ―ΈμΉλ μν₯μ κ³ λ €νμΈμ. λ€λ₯Έ μΈμ΄ 리μμ€λ₯Ό λ‘λνλ©΄ μ΄κΈ° λ‘λ μκ°μ΄ λμ΄λ μ μμ΅λλ€. μ§μν νμΌμ μ§μ° λ‘λ©μ ꡬννμ¬ μ±λ₯μ λ―ΈμΉλ μν₯μ μ΅μννμΈμ.
- λͺ¨λ°μΌ μ΅μ ν: λͺ¨λ°μΌ κΈ°κΈ°μ λ§κ² μ ν리μΌμ΄μ μ μ΅μ ννμΈμ. μ¬κΈ°μλ λ°μν λμμΈ κΈ°μ μ¬μ©, μμ νλ©΄μ λ§μΆ μ΄λ―Έμ§ μ΅μ ν, μλ°μ€ν¬λ¦½νΈ μ¬μ© μ΅μνκ° ν¬ν¨λ©λλ€.
μ μΈκ³μ μ¬λ‘
λ§μ κΈλ‘λ² κΈ°μ λ€μ΄ React μ ν리μΌμ΄μ μ μ±λ₯μ ν₯μμν€κΈ° μν΄ μ§μ° λ‘λ© λ° μ½λ λΆν κΈ°μ μ μ±κ³΅μ μΌλ‘ μ¬μ©νκ³ μμ΅λλ€.
- Netflix: λ·νλ¦μ€λ μ½λ λΆν μ νμ©νμ¬ νμ¬ λ·°μ νμν μ½λλ§ μ λ¬ν¨μΌλ‘μ¨ μ μΈκ³ μ¬μ©μλ€μκ² λ λΉ λ₯Έ λ‘λ μκ°κ³Ό λ λΆλλ¬μ΄ μ€νΈλ¦¬λ° κ²½νμ μ 곡ν©λλ€.
- Airbnb: μμ΄λΉμ€λΉλ μνΈμμ©ν μ§λλ 볡μ‘ν κ²μ νν°μ κ°μ΄ μ€μνμ§ μμ μ»΄ν¬λνΈμ λ‘λ©μ μ§μ°μν€κΈ° μν΄ μ§μ° λ‘λ©μ μ¬μ©νμ¬ μΉμ¬μ΄νΈμ μ΄κΈ° λ‘λ μκ°μ κ°μ ν©λλ€.
- Spotify: μ€ν¬ν°νμ΄λ μΉ νλ μ΄μ΄μ μ±λ₯μ μ΅μ ννκΈ° μν΄ μ½λ λΆν μ μ¬μ©νμ¬ μ¬μ©μλ€μ΄ μ’μνλ μμ μ λΉ λ₯΄κ² λ€μ μ μλλ‘ λ³΄μ₯ν©λλ€.
- Alibaba: μΈκ³ μ΅λ μ μμκ±°λ νλ«νΌ μ€ νλμΈ μ리λ°λ°λ μ μΈκ³ μλ°±λ§ λͺ μ μ¬μ©μμκ² μνν μΌν κ²½νμ μ 곡νκΈ° μν΄ μ½λ λΆν κ³Ό μ§μ° λ‘λ©μ ν¬κ² μμ‘΄ν©λλ€. μ΄λ€μ μ¬λ¬ μ§μμ κ±ΈμΉ λ€μν λ€νΈμν¬ μλμ κΈ°κΈ° μ±λ₯μ κ³ λ €ν΄μΌ ν©λλ€.
κ²°λ‘
μ§μ° λ‘λ©, μ½λ λΆν , λμ κ°μ Έμ€κΈ°λ React μ ν리μΌμ΄μ μ μ±λ₯μ μ΅μ ννλ λ° νμμ μΈ κΈ°μ μ λλ€. μ΄λ¬ν κΈ°μ μ ꡬνν¨μΌλ‘μ¨ μ΄κΈ° λ‘λ μκ°μ ν¬κ² μ€μ΄κ³ μ¬μ©μ κ²½νμ κ°μ νλ©° μ μΈκ³ μ¬μ©μλ₯Ό μν λ λΉ λ₯΄κ³ ν¨μ¨μ μΈ μ ν리μΌμ΄μ μ λ§λ€ μ μμ΅λλ€. μΉ μ ν리μΌμ΄μ μ΄ μ μ λ 볡μ‘ν΄μ§μ λ°λΌ, μ΄λ¬ν μ΅μ ν μ λ΅μ λ§μ€ν°νλ κ²μ λ€μν κΈ°κΈ°μ λ€νΈμν¬ μ‘°κ±΄μμ μννκ³ λ§€λ ₯μ μΈ μ¬μ©μ κ²½νμ μ 곡νλ λ° λ§€μ° μ€μν©λλ€.
μ ν리μΌμ΄μ μ μ±λ₯μ μ§μμ μΌλ‘ λͺ¨λν°λ§νκ³ νμμ λ°λΌ μ΅μ ν μ λ΅μ μ‘°μ νλ κ²μ μμ§ λ§μΈμ. μΉ κ°λ° νκ²½μ λμμμ΄ μ§ννκ³ μμΌλ©°, μ΅μ λͺ¨λ² μ¬λ‘λ₯Ό λ°λΌκ°λ κ²μ΄ μ€λλ μ¬μ©μμ μꡬλ₯Ό μΆ©μ‘±μν€λ κ³ μ±λ₯ React μ ν리μΌμ΄μ μ ꡬμΆνλ ν΅μ¬μ λλ€.