posts

๐Ÿ“ฆ React Native(Expo) ์ „ํ™˜ ์‹œ ํ•„์ˆ˜/์ถ”์ฒœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ •๋ฆฌ

Oct 1, 2025 updated Oct 1, 2025 architectureexporeact-nativetypescript

1. ๊ธฐ๋ณธ ์ธํ”„๋ผ

  • expo: RN ์•ฑ ๋Ÿฐํƒ€์ž„/๋นŒ๋“œ ํ™˜๊ฒฝ
  • react / react-native: Expo SDK์— ๋งž์ถ˜ ๋ฒ„์ „
  • typescript: ์–ธ์–ด ์ง€์›
  • zustand: ์ƒํƒœ ๊ด€๋ฆฌ (์›น์—์„œ ์‚ฌ์šฉํ•˜๋˜ ๊ฒƒ ์œ ์ง€)
  • @tanstack/react-query: ์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌ (์›น์—์„œ ์‚ฌ์šฉํ•˜๋˜ ๊ฒƒ ์œ ์ง€)

2. ์Šคํƒ€์ผ๋ง & ๋””์ž์ธ ์‹œ์Šคํ…œ

  • @shopify/restyle โ†’ ํƒ€์ž… ์•ˆ์ „ ํ† ํฐ/Variant ๊ธฐ๋ฐ˜ ์Šคํƒ€์ผ๋ง
  • (๋Œ€์•ˆ) gluestack-ui โ†’ ์ ‘๊ทผ์„ฑ ๋‚ด์žฅ UI ํ‚ท (Aria ๊ธฐ๋ฐ˜)
  • react-native-svg โ†’ ์•„์ด์ฝ˜/์ฐจํŠธ ๊ทธ๋ฆฌ๊ธฐ ํ•„์ˆ˜
  • react-native-vector-icons ๋˜๋Š” lucide-react-native โ†’ ์•„์ด์ฝ˜ ์„ธํŠธ

3. ์ ‘๊ทผ์„ฑ & ์ปดํฌ๋„ŒํŠธ ๋กœ์ง

  • @react-native-aria/* โ†’ ์ ‘๊ทผ์„ฑ/ํฌ์ปค์Šค/ํ‚ค๋ณด๋“œ ์ƒํ˜ธ์ž‘์šฉ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ
    • button, checkbox, slider, etc. ํ•„์š”์— ๋งž๊ฒŒ ์„ ํƒ

4. ์• ๋‹ˆ๋ฉ”์ด์…˜ & ์ œ์Šค์ฒ˜

  • react-native-reanimated โ†’ ํ•ต์‹ฌ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์—”์ง„
  • react-native-gesture-handler โ†’ ์ œ์Šค์ฒ˜ ์ฒ˜๋ฆฌ
  • moti โ†’ Reanimated ๊ธฐ๋ฐ˜ ์„ ์–ธ์  ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ ˆ์ด์–ด
  • @gorhom/bottom-sheet โ†’ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€ ๋ฐ”ํ…€์‹œํŠธ
  • @gorhom/portal โ†’ ํฌํ„ธ ๊ธฐ๋ฐ˜ ๋ชจ๋‹ฌ/ํŒ์—… ๊ด€๋ฆฌ

5. ๋„คํŠธ์›Œํ‚น & ๋ฐ์ดํ„ฐ

  • axios (์›น๊ณผ ๋™์ผ) โ†’ HTTP ํด๋ผ์ด์–ธํŠธ
  • jwt-decode โ†’ JWT ํŒŒ์‹ฑ
  • expo-secure-store โ†’ ํ† ํฐ/๋ฏผ๊ฐ์ •๋ณด ๋ณด์•ˆ ์ €์žฅ
  • expo-file-system โ†’ ํŒŒ์ผ ์—…/๋‹ค์šด๋กœ๋“œ ํ•„์š” ์‹œ
  • qs โ†’ ์ฟผ๋ฆฌ์ŠคํŠธ๋ง ์ฒ˜๋ฆฌ

6. ๋ฆฌ์ŠคํŠธ & ์„ฑ๋Šฅ

  • @shopify/flash-list โ†’ ๊ณ ์„ฑ๋Šฅ FlatList ๋Œ€์ฒด
  • (๊ฒฝ๋Ÿ‰์ด๋ฉด RN ๊ธฐ๋ณธ FlatList๋กœ๋„ ์ถฉ๋ถ„)

7. ํผ/์ž…๋ ฅ

  • react-hook-form (์ด๋ฏธ ์‚ฌ์šฉ ์ค‘)
  • RN์— ๋งž๋Š” Input ์ปดํฌ๋„ŒํŠธ + Controller ํ™œ์šฉ

8. ๋‚ ์งœ/์‹œ๊ฐ„

  • dayjs (์›น๊ณผ ๋™์ผ)
  • @react-native-community/datetimepicker โ†’ ๋„ค์ดํ‹ฐ๋ธŒ ๋‚ ์งœ ์„ ํƒ๊ธฐ
  • react-native-calendars (ํ•„์š” ์‹œ ๋‹ฌ๋ ฅํ˜• UI)

9. ์• ๋‹ˆ๋ฉ”์ด์…˜/๋ฏธ๋””์–ด

  • lottie-react-native โ†’ Lottie ์• ๋‹ˆ๋ฉ”์ด์…˜ (์›น์˜ lottie-web ๋Œ€์ฒด)

10. ์œ ํ‹ธ

  • immer โ†’ ๋ถˆ๋ณ€์„ฑ ๊ด€๋ฆฌ (์›น๊ณผ ๋™์ผ)
  • uuid โ†’ UUID ์ƒ์„ฑ (์›น๊ณผ ๋™์ผ)
  • clsx โ†’ ์กฐ๊ฑด๋ถ€ className ์œ ํ‹ธ (RN์—์„œ๋Š” ๋‹จ์ˆœ ์กฐ๊ฑด๋ถ€ props๋กœ๋„ ๋Œ€์ฒด ๊ฐ€๋Šฅ)

๐Ÿš€ ์ตœ์ข… ๊ถŒ์žฅ ์„ธํŠธ (์š”์•ฝ)

  • ์Šคํƒ€์ผ/์‹œ์Šคํ…œ: @shopify/restyle (+ Native base ์ปดํฌ๋„ŒํŠธ)
  • ์ ‘๊ทผ์„ฑ: @react-native-aria/*
  • ์ œ์Šค์ฒ˜/์• ๋‹ˆ๋ฉ”์ด์…˜: react-native-reanimated, react-native-gesture-handler, moti, @gorhom/bottom-sheet
  • ๋ฐ์ดํ„ฐ/์ƒํƒœ: axios, @tanstack/react-query, zustand, expo-secure-store
  • ํผ/์ž…๋ ฅ: react-hook-form, @react-native-community/datetimepicker
  • ๋ฆฌ์ŠคํŠธ/์„ฑ๋Šฅ: @shopify/flash-list
  • ์• ๋‹ˆ๋ฉ”์ด์…˜/๋ฏธ๋””์–ด: lottie-react-native
  • ์œ ํ‹ธ: dayjs, immer, uuid, clsx

โŒ ์›น์—์„œ ์“ฐ๋˜ ๊ฒƒ ์ค‘ ์ œ๊ฑฐ/๊ต์ฒดํ•ด์•ผ ํ•  ๊ฒƒ

  • @stackflow/* โ†’ RN์—์„œ๋Š” React Navigation
  • gsap, @react-spring/web, @use-gesture/react โ†’ Reanimated + Gesture-handler + Moti
  • react-loading-skeleton โ†’ moti/skeleton ๋˜๋Š” react-native-skeleton-content
  • react-multi-date-picker โ†’ @react-native-community/datetimepicker
  • swiper โ†’ react-native-swiper ๋˜๋Š” react-native-swiper-flatlist
  • lottie-web โ†’ lottie-react-native
  • oidc-client-ts โ†’ expo-auth-session ๋˜๋Š” react-native-app-auth
  • env-cmd, vite, sass, stylelint ๋“ฑ ๋นŒ๋“œ/์›น ๋„๊ตฌ โ†’ Expo/Metro ํ™˜๊ฒฝ์— ๋งž์ถฐ ์ œ๊ฑฐ