Skip to content

Latest commit

Β 

History

History
118 lines (72 loc) Β· 8.68 KB

File metadata and controls

118 lines (72 loc) Β· 8.68 KB
title μƒˆλ‘œμš΄ React μ•± λ§Œλ“€κΈ°

React둜 μƒˆλ‘œμš΄ μ•±μ΄λ‚˜ μ›Ήμ‚¬μ΄νŠΈλ₯Ό κ΅¬μΆ•ν•˜λ €λ©΄ ν”„λ ˆμž„μ›Œν¬λΆ€ν„° μ‹œμž‘ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

앱에 κΈ°μ‘΄ ν”„λ ˆμž„μ›Œν¬μ—μ„œ 잘 μ œκ³΅λ˜μ§€ μ•ŠλŠ” μ œμ•½ 쑰건이 μžˆκ±°λ‚˜, 자체 ν”„λ ˆμž„μ›Œν¬λ₯Ό λΉŒλ“œν•˜λŠ” 것을 μ„ ν˜Έν•˜κ±°λ‚˜, React μ•±μ˜ κΈ°λ³Έ μ‚¬ν•­λ§Œ λ°°μš°λ €λŠ” 경우 React 앱을 μ²˜μŒλΆ€ν„° λΉŒλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν’€μŠ€νƒ ν”„λ ˆμž„μ›Œν¬ {/full-stack-frameworks/}

μ΄λŸ¬ν•œ ꢌμž₯ ν”„λ ˆμž„μ›Œν¬λŠ” ν”„λ‘œλ•μ…˜μ—μ„œ 앱을 λ°°ν¬ν•˜κ³  ν™•μž₯ν•˜λŠ” 데 ν•„μš”ν•œ λͺ¨λ“  κΈ°λŠ₯을 μ§€μ›ν•©λ‹ˆλ‹€. 그듀은 μ΅œμ‹  React κΈ°λŠ₯을 ν†΅ν•©ν•˜κ³  React의 μ•„ν‚€ν…μ²˜λ₯Ό ν™œμš©ν•©λ‹ˆλ‹€.

ν’€μŠ€νƒ ν”„λ ˆμž„μ›Œν¬μ—λŠ” μ„œλ²„κ°€ ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ {/react-frameworks-do-not-require-a-server/}

이 νŽ˜μ΄μ§€μ˜ λͺ¨λ“  ν”„λ ˆμž„μ›Œν¬λŠ” ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ λ Œλ”λ§(CSR), 단일 νŽ˜μ΄μ§€ μ•±(SPA), 정적 μ‚¬μ΄νŠΈ 생성(SSG)을 μ§€μ›ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 앱은 μ„œλ²„ 없이 CDN λ˜λŠ” 정적 ν˜ΈμŠ€νŒ… μ„œλΉ„μŠ€μ— 배포할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ μ΄λŸ¬ν•œ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜λ©΄ μ‚¬μš© 사둀에 μ ν•©ν•œ 경우 κ²½λ‘œλ³„λ‘œ μ„œλ²„ μΈ‘ λ Œλ”λ§μ„ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ΄λ ‡κ²Œ ν•˜λ©΄ ν΄λΌμ΄μ–ΈνŠΈ μ „μš© μ•±μœΌλ‘œ μ‹œμž‘ν•  수 있으며, λ‚˜μ€‘μ— μš”κ΅¬ 사항이 λ³€κ²½λ˜λŠ” 경우 앱을 λ‹€μ‹œ μž‘μ„±ν•˜μ§€ μ•Šκ³ λ„ κ°œλ³„ κ²½λ‘œμ—μ„œ μ„œλ²„ κΈ°λŠ₯을 μ‚¬μš©ν•˜λ„λ‘ 선택할 수 μžˆμŠ΅λ‹ˆλ‹€. λ Œλ”λ§ μ „λž΅μ„ κ΅¬μ„±ν•˜λŠ” 방법에 λŒ€ν•œ ν”„λ ˆμž„μ›Œν¬ μ„€λͺ…μ„œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

Next.js (μ•± λΌμš°ν„°) {/nextjs-app-router/}

Next.js의 μ•± λΌμš°ν„°λŠ” React의 μ•„ν‚€ν…μ²˜λ₯Ό μ΅œλŒ€ν•œ ν™œμš©ν•˜μ—¬ ν’€ μŠ€νƒ React 앱을 ν™œμ„±ν™”ν•˜λŠ” React ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€.

npx create-next-app@latest

Next.jsλŠ” Vercelμ—μ„œ μœ μ§€ κ΄€λ¦¬ν•©λ‹ˆλ‹€. Next.js 앱을 λΉŒλ“œν•΄μ„œ Node.js, 도컀 μ»¨ν…Œμ΄λ„ˆ, μ„œλ²„λ¦¬μŠ€ ν˜ΈμŠ€νŒ…, ν˜Ήμ€ 자체 μ„œλ²„μ— 배포할 수 μžˆμŠ΅λ‹ˆλ‹€. Next.jsλŠ” λ˜ν•œ μ„œλ²„κ°€ ν•„μš”μ—†λŠ” 정적 내보내기도 μ§€μ›ν•©λ‹ˆλ‹€.

React Router (v7) {/react-router-v7/}

React RouterλŠ” Reactμ—μ„œ κ°€μž₯ 인기 μžˆλŠ” λΌμš°νŒ… 라이브러리이며 Vite와 ν•¨κ»˜ μ‚¬μš©ν•˜λ©΄ ν’€μŠ€νƒ React ν”„λ ˆμž„μ›Œν¬λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. ν‘œμ€€ Web APIλ₯Ό κ°•μ‘°ν•˜κ³  λ‹€μ–‘ν•œ μžλ°”μŠ€ν¬λ¦½νŠΈ λŸ°νƒ€μž„κ³Ό ν”Œλž«νΌμ„ μœ„ν•œ μ€€λΉ„λœ 배포 ν…œν”Œλ¦Ώμ΄ μžˆμŠ΅λ‹ˆλ‹€.

μƒˆλ‘œμš΄ React Router ν”„λ ˆμž„μ›Œν¬λ₯Ό μƒμ„±ν•˜λ €λ©΄ λ‹€μŒ λͺ…령을 μ‚¬μš©ν•˜μ„Έμš”.

npx create-react-router@latest

React RouterλŠ” Shopifyμ—μ„œ μœ μ§€ κ΄€λ¦¬ν•©λ‹ˆλ‹€.

Expo (λ„€μ΄ν‹°λΈŒ μ•±μš©) {/expo/}

ExpoλŠ” λ„€μ΄ν‹°λΈŒ UIλ₯Ό μ‚¬μš©ν•˜μ—¬ μ•ˆλ“œλ‘œμ΄λ“œ, iOS, 웹을 μœ„ν•œ λ²”μš©μ•±μ„ λ§Œλ“€ 수 μžˆλŠ” React ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€. λ„€μ΄ν‹°λΈŒ 뢀뢄을 μ‰½κ²Œ μ‚¬μš©ν•  수 있게 ν•΄μ£ΌλŠ” React Native SDKλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. μƒˆλ‘œμš΄ Expo ν”„λ‘œμ νŠΈλ₯Ό μƒμ„±ν•˜λ €λ©΄ λ‹€μŒ λͺ…령을 μ‚¬μš©ν•˜μ„Έμš”.

npx create-expo-app@latest

Expoλ₯Ό 처음 μ‚¬μš©ν•˜λŠ” 경우, Expo μžμŠ΅μ„œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

ExpoλŠ” Expo (the company)μ—μ„œ μœ μ§€ κ΄€λ¦¬ν•©λ‹ˆλ‹€. Expo둜 앱을 λΉŒλ“œν•˜λŠ” 것은 무료이고 κ΅¬κΈ€μ΄λ‚˜ μ• ν”Œ μŠ€ν† μ–΄μ— μ œν•œμ—†μ΄ μ œμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€. ExpoλŠ” μΆ”κ°€μ μœΌλ‘œ 옡트인 유료 ν΄λΌμš°λ“œ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

λ‹€λ₯Έ ν”„λ ˆμž„μ›Œν¬ {/other-frameworks/}

ν’€μŠ€νƒ React 비전을 ν–₯ν•΄ λ‚˜μ•„κ°€κ³  μžˆλŠ” 또 λ‹€λ₯Έ λ– μ˜€λ₯΄λŠ” ν”„λ ˆμž„μ›Œν¬κ°€ μžˆμŠ΅λ‹ˆλ‹€.

<<<<<<< HEAD

  • TanStack Start (Beta): TanStack StartλŠ” TanStack Routerλ₯Ό 기반으둜 ν•˜λŠ” ν’€μŠ€νƒ React ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€. Nitroλ‚˜ Vite와 같이 전체 λ¬Έμ„œ SSR, 슀트리밍, μ„œλ²„ ν•¨μˆ˜, λ²ˆλ“€λ§κ³Ό λ§Žμ€ μœ μš©ν•œ 도ꡬλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
  • RedwoodJS: RedwoodλŠ” μ‰½κ²Œ ν’€μŠ€νƒ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€ 수 μžˆλ„λ‘ μ‚¬μ „νƒ‘μž¬λœ νŒ¨ν‚€μ§€μ™€ ꡬ성을 κ°€μ§„ ν’€μŠ€νƒ React ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€. =======
  • TanStack Start (Beta): TanStack Start is a full-stack React framework powered by TanStack Router. It provides a full-document SSR, streaming, server functions, bundling, and more using tools like Nitro and Vite.
  • RedwoodSDK: Redwood is a full stack React framework with lots of pre-installed packages and configuration that makes it easy to build full-stack web applications.

d271a7ac11d2bf0d6e95ebdfacaf1038421f9be0

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 νŒ€μ€ μ°¨μ„ΈλŒ€ ν”„λ ˆμž„μ›Œν¬μ—μ„œ μ΄λŸ¬ν•œ κΈ°λŠ₯을 더 μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆλ„λ‘ λ²ˆλ“€λŸ¬ κ°œλ°œμžμ™€ ν˜‘λ ₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ²˜μŒλΆ€ν„° μ‹œμž‘ν•˜κΈ° {/start-from-scratch/}

앱에 κΈ°μ‘΄ ν”„λ ˆμž„μ›Œν¬μ—μ„œ 잘 μ œκ³΅λ˜μ§€ μ•ŠλŠ” μ œμ•½ 쑰건이 μžˆκ±°λ‚˜, 자체 ν”„λ ˆμž„μ›Œν¬λ₯Ό κ΅¬μΆ•ν•˜λŠ” 것을 μ„ ν˜Έν•˜κ±°λ‚˜, React μ•±μ˜ κΈ°λ³Έ 사항을 λ°°μš°λ €λŠ” 경우 React ν”„λ‘œμ νŠΈλ₯Ό μ²˜μŒλΆ€ν„° μ‹œμž‘ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆλŠ” λ‹€λ₯Έ μ˜΅μ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€.

μ²˜μŒλΆ€ν„° μ‹œμž‘ν•˜λ©΄ 더 λ§Žμ€ μœ μ—°μ„±μ„ 얻을 수 μžˆμ§€λ§Œ λΌμš°νŒ…, 데이터 κ°€μ Έμ˜€κΈ° 및 기타 일반적인 μ‚¬μš© νŒ¨ν„΄μ— μ‚¬μš©ν•  도ꡬλ₯Ό 선택해야 ν•©λ‹ˆλ‹€. 이미 μ‘΄μž¬ν•˜λŠ” ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜λŠ” λŒ€μ‹  μžμ‹ λ§Œμ˜ ν”„λ ˆμž„μ›Œν¬λ₯Ό κ΅¬μΆ•ν•˜λŠ” 것과 λΉ„μŠ·ν•©λ‹ˆλ‹€. 저희가 ꢌμž₯ν•˜λŠ” ν”„λ ˆμž„μ›Œν¬μ—λŠ” μ΄λŸ¬ν•œ λ¬Έμ œμ— λŒ€ν•œ κΈ°λ³Έ 제곡 μ†”λ£¨μ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€.

μžμ‹ λ§Œμ˜ μ†”λ£¨μ…˜μ„ κ΅¬μΆ•ν•˜λ €λ©΄, Vite, Parcel λ˜λŠ” RSbuild와 같은 λΉŒλ“œ λ„κ΅¬λ‘œ μ‹œμž‘ν•  수 μžˆλ„λ‘ ν•˜λŠ” μ²˜μŒλΆ€ν„° React μ•± λ§Œλ“€κΈ° κ°€μ΄λ“œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.


λ§Œμ•½ 이 νŽ˜μ΄μ§€μ— ν¬ν•¨λ˜λŠ”λ° κ΄€μ‹¬μžˆλŠ” ν”„λ ˆμž„μ›Œν¬ μž‘μ„±μžλΌλ©΄, μ €ν¬μ—κ²Œ μ•Œλ €μ£Όμ„Έμš”.