| title | μλ‘μ΄ React μ± λ§λ€κΈ° |
|---|
Reactλ‘ μλ‘μ΄ μ±μ΄λ μΉμ¬μ΄νΈλ₯Ό ꡬμΆνλ €λ©΄ νλ μμν¬λΆν° μμνλ κ²μ΄ μ’μ΅λλ€.
μ±μ κΈ°μ‘΄ νλ μμν¬μμ μ μ 곡λμ§ μλ μ μ½ μ‘°κ±΄μ΄ μκ±°λ, μ체 νλ μμν¬λ₯Ό λΉλνλ κ²μ μ νΈνκ±°λ, React μ±μ κΈ°λ³Έ μ¬νλ§ λ°°μ°λ €λ κ²½μ° React μ±μ μ²μλΆν° λΉλν μ μμ΅λλ€.
μ΄λ¬ν κΆμ₯ νλ μμν¬λ νλ‘λμ μμ μ±μ λ°°ν¬νκ³ νμ₯νλ λ° νμν λͺ¨λ κΈ°λ₯μ μ§μν©λλ€. κ·Έλ€μ μ΅μ React κΈ°λ₯μ ν΅ν©νκ³ Reactμ μν€ν μ²λ₯Ό νμ©ν©λλ€.
νμ€ν νλ μμν¬μλ μλ²κ° νμνμ§ μμ΅λλ€ {/react-frameworks-do-not-require-a-server/}
μ΄ νμ΄μ§μ λͺ¨λ νλ μμν¬λ ν΄λΌμ΄μΈνΈ μΈ‘ λ λλ§(CSR), λ¨μΌ νμ΄μ§ μ±(SPA), μ μ μ¬μ΄νΈ μμ±(SSG)μ μ§μν©λλ€. μ΄λ¬ν μ±μ μλ² μμ΄ CDN λλ μ μ νΈμ€ν μλΉμ€μ λ°°ν¬ν μ μμ΅λλ€. λν μ΄λ¬ν νλ μμν¬λ₯Ό μ¬μ©νλ©΄ μ¬μ© μ¬λ‘μ μ ν©ν κ²½μ° κ²½λ‘λ³λ‘ μλ² μΈ‘ λ λλ§μ μΆκ°ν μ μμ΅λλ€.
μ΄λ κ² νλ©΄ ν΄λΌμ΄μΈνΈ μ μ© μ±μΌλ‘ μμν μ μμΌλ©°, λμ€μ μꡬ μ¬νμ΄ λ³κ²½λλ κ²½μ° μ±μ λ€μ μμ±νμ§ μκ³ λ κ°λ³ κ²½λ‘μμ μλ² κΈ°λ₯μ μ¬μ©νλλ‘ μ νν μ μμ΅λλ€. λ λλ§ μ λ΅μ ꡬμ±νλ λ°©λ²μ λν νλ μμν¬ μ€λͺ μλ₯Ό μ°Έμ‘°νμΈμ.
Next.jsμ μ± λΌμ°ν°λ Reactμ μν€ν μ²λ₯Ό μ΅λν νμ©νμ¬ ν μ€ν React μ±μ νμ±ννλ React νλ μμν¬μ λλ€.
npx create-next-app@latestNext.jsλ Vercelμμ μ μ§ κ΄λ¦¬ν©λλ€. Next.js μ±μ λΉλν΄μ Node.jsμ μλ²λ¦¬μ€ νΈμ€ν νΉμ μ체 μλ²μ λ°°ν¬ν μ μμ΅λλ€. Next.jsλ λν μλ²κ° νμμλ μ μ λ΄λ³΄λ΄κΈ°λ μ§μν©λλ€. Vercelμ μΆκ°μ μΌλ‘ μ΅νΈμΈ μ λ£ ν΄λΌμ°λ μλΉμ€λ μ§μν©λλ€.
React Routerλ Reactμμ κ°μ₯ μΈκΈ°μΈλ λΌμ°ν λΌμ΄λΈλ¬λ¦¬μ΄λ©° Viteμ ν¨κ» μ¬μ©νλ©΄ νμ€ν React νλ μμν¬λ₯Ό λ§λ€ μ μμ΅λλ€. νμ€ Web APIλ₯Ό κ°μ‘°νκ³ λ€μν μλ°μ€ν¬λ¦½νΈ λ°νμκ³Ό νλ«νΌμ μν μ€λΉλ λ°°ν¬ ν νλ¦Ώμ΄ μμ΅λλ€.
μλ‘μ΄ React Router νλ μμν¬λ₯Ό μμ±νλ €λ©΄ λ€μ λͺ λ Ήμ μ¬μ©νμΈμ.
npx create-react-router@latestReact Routerλ Shopifyμμ μ μ§ κ΄λ¦¬ν©λλ€.
Expoλ λ€μ΄ν°λΈ UIλ₯Ό μ¬μ©νμ¬ μλλ‘μ΄λ, iOS, μΉμ μν λ²μ©μ±μ λ§λ€ μ μλ React νλ μμν¬μ λλ€. λ€μ΄ν°λΈ λΆλΆμ μ½κ² μ¬μ©ν μ μκ² ν΄μ£Όλ React Native SDKλ₯Ό μ 곡ν©λλ€. μλ‘μ΄ Expo νλ‘μ νΈλ₯Ό μμ±νλ €λ©΄ λ€μ λͺ λ Ήμ μ¬μ©νμΈμ.
npx create-expo-app@latestExpoλ₯Ό μ²μ μ¬μ©νλ κ²½μ°, Expo μμ΅μλ₯Ό μ°Έμ‘°νμΈμ.
Expoλ Expo (the company)μμ μ μ§ κ΄λ¦¬ν©λλ€. Expoλ‘ μ±μ λΉλνλ κ²μ 무λ£μ΄κ³ ꡬκΈμ΄λ μ ν μ€ν μ΄μ μ νμμ΄ μ μΆν μ μμ΅λλ€. Expoλ μΆκ°μ μΌλ‘ μ΅νΈμΈ μ λ£ ν΄λΌμ°λ μλΉμ€λ₯Ό μ 곡ν©λλ€.
νμ€ν React λΉμ μ ν₯ν΄ λμκ°κ³ μλ λ λ€λ₯Έ λ μ€λ₯΄λ νλ μμν¬κ° μμ΅λλ€.
- TanStack Start (Beta): TanStack Startλ TanStack Routerλ₯Ό κΈ°λ°μΌλ‘ νλ νμ€ν React νλ μμν¬μ λλ€. Nitroλ Viteμ κ°μ΄ μ 체 λ¬Έμ SSR, μ€νΈλ¦¬λ°, μλ² ν¨μ, λ²λ€λ§κ³Ό λ§μ μ μ©ν λꡬλ₯Ό μ 곡ν©λλ€.
- RedwoodJS: Redwoodλ μ½κ² νμ€ν μΉ μ ν리μΌμ΄μ μ λ§λ€ μ μλλ‘ μ¬μ νμ¬λ ν¨ν€μ§μ ꡬμ±μ κ°μ§ νμ€ν React νλ μμν¬μ λλ€.
React νμ νμ€ν μν€ν μ² λΉμ μ ꡬμ±νλ κΈ°λ₯μ 무μμΈκ°μ? {/which-features-make-up-the-react-teams-full-stack-architecture-vision/}
Next.jsμ App Router λ²λ€λ¬λ 곡μ React Server Components λͺ μΈλ₯Ό λͺ¨λ ꡬνν©λλ€. μ΄λ₯Ό ν΅ν΄ λΉλ μκ°, μλ² μ μ© λ° λνν κ΅¬μ± μμλ₯Ό λ¨μΌ React νΈλ¦¬μ νΌν©ν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, μλ² μ μ© React μ»΄ν¬λνΈλ₯Ό λ°μ΄ν°λ² μ΄μ€λ νμΌμ μ½λ λΉλκΈ° ν¨μλ‘ μμ±ν μ μμ΅λλ€. κ·Έλ° λ€μ λ°μ΄ν°λ₯Ό λνν μ»΄ν¬λνΈλ‘ μ λ¬ν μ μμ΅λλ€.
// μ΄ μ»΄ν¬λνΈλ *μ€μ§* μλ²μμλ§(νΉμ λΉλλλ λμλ§) μ€νλ©λλ€.
async function Talks({ confId }) {
// 1. μλ²μμλΌλ©΄ λ°μ΄ν° λ μ΄μ΄μ λνν μ μμ΅λλ€. API μλν¬μΈνΈλ νμνμ§ μμ΅λλ€.
const talks = await db.Talks.findAll({ confId });
// 2. λ λλ§ λ‘μ§μ΄ μΆκ°λλλΌκ³ λ μλ°μ€ν¬λ¦½νΈ λ²λ€ ν¬κΈ°λ₯Ό ν¬κ² λ§λ€μ§ μμ΅λλ€.
const videos = talks.map(talk => talk.video);
// 3. λΈλΌμ°μ μμ μ«νλ μ»΄ν¬λνΈμ λ°μ΄ν°λ₯Ό μ λ¬ν©λλ€.
return <SearchableVideoList videos={videos} />;
}Next.jsμ App Routerλ Suspenseμ λ°μ΄ν° μ‘°νλ₯Ό ν΅ν©ν©λλ€. React treeμμ μλ‘λ€λ₯Έ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό μ§μ μ μΌλ‘ λ‘λ© μν(μ: μ€μΌλ ν€ νλ μ΄μ€νλ)λ‘ μ§μ ν μ μκ² ν΄μ€λλ€.
<Suspense fallback={<TalksLoading />}>
<Talks confId={conf.id} />
</Suspense>μλ² μ»΄ν¬λνΈμ Suspenseλ Next.js κΈ°λ₯μ΄ μλ React κΈ°λ₯μ λλ€. κ·Έλ¬λ νλ μμν¬ μμ€μμ μ΄λ₯Ό μ±ννλ €λ©΄ μ°Έμ¬μ μ¬μνμ§ μμ ꡬν μμ μ΄ νμν©λλ€. νμ¬ Next.js App Routerλ κ°μ₯ μλ²½ν ꡬνμ λλ€. React νμ μ°¨μΈλ νλ μμν¬μμ μ΄λ¬ν κΈ°λ₯μ λ μ½κ² ꡬνν μ μλλ‘ λ²λ€λ¬ κ°λ°μμ νλ ₯νκ³ μμ΅λλ€.
μ±μ κΈ°μ‘΄ νλ μμν¬μμ μ μ 곡λμ§ μλ μ μ½ μ‘°κ±΄μ΄ μκ±°λ, μ체 νλ μμν¬λ₯Ό ꡬμΆνλ κ²μ μ νΈνκ±°λ, React μ±μ κΈ°λ³Έ μ¬νμ λ°°μ°λ €λ κ²½μ° React νλ‘μ νΈλ₯Ό μ²μλΆν° μμνλ λ° μ¬μ©ν μ μλ λ€λ₯Έ μ΅μ μ΄ μμ΅λλ€.
μ²μλΆν° μμνλ©΄ λ λ§μ μ μ°μ±μ μ»μ μ μμ§λ§ λΌμ°ν , λ°μ΄ν° κ°μ Έμ€κΈ° λ° κΈ°ν μΌλ°μ μΈ μ¬μ© ν¨ν΄μ μ¬μ©ν λꡬλ₯Ό μ νν΄μΌ ν©λλ€. μ΄λ―Έ μ‘΄μ¬νλ νλ μμν¬λ₯Ό μ¬μ©νλ λμ μμ λ§μ νλ μμν¬λ₯Ό ꡬμΆνλ κ²κ³Ό λΉμ·ν©λλ€. μ ν¬κ° κΆμ₯νλ νλ μμν¬μλ μ΄λ¬ν λ¬Έμ μ λν κΈ°λ³Έ μ 곡 μ루μ μ΄ μμ΅λλ€.
μμ λ§μ μ루μ μ ꡬμΆνλ €λ©΄, Vite, Parcel λλ RSbuildμ κ°μ λΉλ λκ΅¬λ‘ μμν μ μλλ‘ νλ μ²μλΆν° React μ± λ§λ€κΈ° κ°μ΄λλ₯Ό μ°Έμ‘°νμΈμ.
λ§μ½ μ΄ νμ΄μ§μ ν¬ν¨λλλ° κ΄μ¬μλ νλ μμν¬ μμ±μλΌλ©΄, μ ν¬μκ² μλ €μ£ΌμΈμ.