๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ ์ผ์ง€ ๐Ÿ‘ฉ‍๐Ÿ’ป

[๋ฆฌ์•กํŠธ๋„ค์ดํ‹ฐ๋ธŒ] npx create-expo-app my-new-expo-app ์ด๋ ‡๊ฒŒ ํ”Œ์  ์ƒ์„ฑํ–ˆ์„ ๋•Œ App.js๊ฐ€ ์•ˆ๋ณด์ด๋Š” ์ด์œ 

by chuyj15 2025. 9. 11.
728x90
๋ฐ˜์‘ํ˜•
SMALL

Expo ์ตœ์‹  ํ”„๋กœ์ ํŠธ์— App.js๊ฐ€ ์—†๋Š” ์ด์œ 

React Native + Expo ๊ฐœ๋ฐœ์„ ์ฒ˜์Œ ์‹œ์ž‘ํ•  ๋•Œ ๋Œ€๋ถ€๋ถ„ App.js ํŒŒ์ผ์„ ์—ด์–ด์„œ ํ™”๋ฉด์„ ์ˆ˜์ •ํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ์ตœ๊ทผ Expo CLI(create-expo-app)๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด, ๋ฃจํŠธ์— App.js๊ฐ€ ๋ณด์ด์ง€ ์•Š์•„ ๋‹นํ™ฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์™œ App.js๊ฐ€ ์‚ฌ๋ผ์กŒ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๋Œ€์‹  ์–ด๋–ค ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


1. ์˜ˆ์ „ Expo ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

๊ธฐ์กด Expo(๊ตฌ๋ฒ„์ „) ํ…œํ”Œ๋ฆฟ์€ ๋ฃจํŠธ์— App.js ํŒŒ์ผ์ด ์žˆ์—ˆ๊ณ , ์—ฌ๊ธฐ์„œ ์•ฑ์˜ ์‹œ์ž‘์ ์„ ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

my-app/ โ”ฃ App.js โ”ฃ package.json โ”— node_modules/

๋ชจ๋“  ํ™”๋ฉด์€ App.js์—์„œ ๋„ค๋น„๊ฒŒ์ด์…˜์„ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.


2. ์ƒˆ๋กœ์šด Expo ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

Expo 49 ๋ฒ„์ „ ์ดํ›„๋ถ€ํ„ฐ๋Š” expo-router๊ฐ€ ๊ธฐ๋ณธ ํฌํ•จ๋œ ํ…œํ”Œ๋ฆฟ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
์ด์ œ๋Š” ๋ฃจํŠธ์— App.js๊ฐ€ ์—†๊ณ , app/ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ ๊ตฌ์กฐ:

my-new-expo-app/ โ”ฃ app/ โ”ƒ โ”ฃ (tabs)/ โ”ƒ โ”ƒ โ”ฃ _layout.tsx โ”ƒ โ”ƒ โ”ฃ explore.tsx โ”ƒ โ”ƒ โ”— index.tsx โ”ƒ โ”ฃ _layout.tsx โ”ƒ โ”— modal.tsx โ”ฃ assets/ โ”ฃ components/ โ”ฃ package.json โ”— ...

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€:

  • app/_layout.tsx → ์•ฑ ์ „์ฒด์˜ ๊ณตํ†ต ๋ ˆ์ด์•„์›ƒ
  • app/(tabs)/_layout.tsx → ํƒญ ๋„ค๋น„๊ฒŒ์ด์…˜ ์„ค์ • (BottomTabNavigator ์—ญํ• )
  • app/(tabs)/index.tsx → ํƒญ์˜ ์ฒซ ํ™”๋ฉด (์˜ˆ์ „ App.js์ฒ˜๋Ÿผ ์‹œ์ž‘ ํ™”๋ฉด ์—ญํ• )
  • app/(tabs)/explore.tsx → ๋‘ ๋ฒˆ์งธ ํƒญ ํ™”๋ฉด
  • app/modal.tsx → ๋ชจ๋‹ฌ ํ™”๋ฉด

์ฆ‰, ์ด์ œ๋Š” App.js ๋Œ€์‹  ํด๋”์™€ ํŒŒ์ผ ์ด๋ฆ„์ด ๊ณง ๋ผ์šฐํŒ… ๊ฒฝ๋กœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.


3. ์ฒซ ํ™”๋ฉด ์ˆ˜์ •ํ•˜๊ธฐ

์˜ˆ์ „์ฒ˜๋Ÿผ App.js๋ฅผ ์—ด ์ˆ˜๋Š” ์—†์ง€๋งŒ, ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋‚ด๋ ค๋ฉด app/(tabs)/index.tsx๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 
// app/(tabs)/index.tsx
import { View, Text } from "react-native";

export default function HomeScreen() {
  return (
    <View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
      <Text>Hello Expo Router!</Text>
    </View>
  );
}

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์•ฑ์„ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์ฒซ ํ™”๋ฉด์— Hello Expo Router!๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.


4. ์˜ˆ์ „ ์Šคํƒ€์ผ(App.js)๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด?

๋งŒ์•ฝ ๊ธฐ์กด ๊ตฌ์กฐ(App.js ํฌํ•จ) ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ์‹œ --template blank ์˜ต์…˜์„ ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 
npx create-expo-app my-old-style-app --template blank

์ด ๊ฒฝ์šฐ์—๋Š” ๋ฃจํŠธ์— App.js๊ฐ€ ์ƒ๊ธฐ๊ณ , ์ด์ „ ๋ฐฉ์‹ ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


5. ์ •๋ฆฌ

  • App.js๊ฐ€ ์—†๋Š” ๊ฑด ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹ˆ๋ผ Expo์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋ณธ ๊ตฌ์กฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ์ตœ์‹  Expo๋Š” expo-router๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • app/(tabs)/index.tsx๊ฐ€ ์‚ฌ์‹ค์ƒ ์˜ˆ์ „์˜ App.js ์—ญํ• ์„ ๋Œ€์‹ ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์ „ ์Šคํƒ€์ผ์„ ์›ํ•œ๋‹ค๋ฉด --template blank ์˜ต์…˜์œผ๋กœ ์ƒ์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์•ž์œผ๋กœ Expo๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด expo-router ๊ตฌ์กฐ๋ฅผ ์ตํ˜€๋‘๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
Next.js์ฒ˜๋Ÿผ ํด๋” = ๋ผ์šฐํŠธ ๊ตฌ์กฐ๋ผ์„œ, ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ํ›จ์”ฌ ๊ด€๋ฆฌํ•˜๊ธฐ ํŽธ๋ฆฌํ•ด์ง‘๋‹ˆ๋‹ค. 

728x90
๋ฐ˜์‘ํ˜•
LIST