[Expo] Expo 기본 프로젝트 구조 분석하기

2025. 12. 11. 14:30·Frontend/ReactNative

npx create-expo-app@latest 로 생성한 Expo의 기본 프로젝트는 아래와 같은 파일 구조로 이루어져 있습니다.

app

앱의 기본적인 구조를 정의합니다. _layout.tsx에서는 앱에 어떤 화면(페이지)들이 존재하는지 정의합니다. <Stack>이라는 이름의 컴포넌트를 사용하는데, 이는 여러 개의 화면들을 스택으로 쌓아 보여주는 것입니다. 맨 위에 오는 요소가 제일 먼저 보이는 화면이므로, 기본 템플릿에서는 (tabs) 경로의 화면이 맨 처음 보이게 됩니다. (tabs) 화면이 사라지면, modal.tsx에서 정의한 화면이 보일 것입니다.

<Stack>
  <Stack.Screen name="(tabs)" options={{ headerShown: false }} />
  <Stack.Screen name="modal" options={{ presentation: 'modal', title: 'Modal' }} />
</Stack>

(tabs)

(tabs) 하위 경로는 탭 화면을 구현한 파일들을 모아놓은 폴더입니다.

이렇게 괄호()로 묶인 이름의 폴더는 URL 경로에 포함되지 않기 때문에, 이들의 실제 경로는 이렇게 생각해야 합니다.

app/(tabs)/index.tsx    // => '/'
app/(tabs)/explore.tsx  // => '/explore'

(tabs)에 있는 _layout.tsx는 (tabs)화면 내에서의 레이아웃을 정의합니다. 기본 템플릿에서는 <Tabs> 컴포넌트로 탭 화면을 구현하고 있는데, 각각 index와 explore라는 이름의 .tsx파일을 가져옵니다.

<Tabs
  screenOptions={{
    tabBarActiveTintColor: Colors[colorScheme ?? 'light'].tint,
    headerShown: false,
    tabBarButton: HapticTab,
  }}>
  <Tabs.Screen
    name="index"
    options={{
      title: 'Home',
      tabBarIcon: ({ color }) => <IconSymbol size={28} name="house.fill" color={color} />,
    }}
  />
  <Tabs.Screen
    name="explore"
    options={{
      title: 'Explore',
      tabBarIcon: ({ color }) => <IconSymbol size={28} name="paperplane.fill" color={color} />,
    }}
  />
</Tabs>

assets

app 파일들에서 구현할 때 필요한 외부 자원을 저장합니다. 기본 템플릿에는 images 경로만 존재하는데, 여기에는 화면에 쓰이는 이미지 말고도 안드로이드/iOS 용 아이콘과 웹 실행을 위한 favicon 등이 저장되어 있습니다.

components

기본적인 React Native 컴포넌트들을 저장해 놓았습니다.

파일 기능 기본 템플릿에서 사용하고 있는지?
external-link 외부링크 텍스트 o
haptic-tab 눌렀을 때 진동효과를 주는 탭 버튼 x
hello-wave 애니메이션이 있는 🖐이모지 o
parallex-scroll-view 뒷 배경이 천천히 이동하는 스크롤 o
themed-text 사용자가 지정한 type에 따라 스타일이 달라지는 텍스트 o
themed-view 사용자가 지정한 type에 따라 스타일이 달라지는 뷰 o

ui

파일 기능 기본 템플릿에서 사용하고 있는지?
collapsible 아코디언 o
icon-symbol.ios svg 벡터 이미지 (iOS 용) o
icon-symbol svg 벡터 이미지 (안드로이드 용) o

constants

색상과 글꼴을 정하는 theme.tsx를 포함합니다.

hooks

환경이나 조건이 바뀜에 따라 동작을 취하는 React hook들을 제공합니다.

파일 기능
use-color-scheme 모바일 기기의 테마 정보(라이트/다크)를 그대로 가져옴
use-color-scheme.web 웹의 테마 정보(라이트/다크)를 그대로 가져옴
use-theme-color 현재 테마 정보(라이트/다크)에 맞는 색을 가져옴

scripts

기본 템플릿에는 reset-project.js파일 하나만 있는데, 이는 npm run reset-project로 실행하는 파일입니다. 실행 시 모든 파일을 app-example에 넣어버리고 비어있는 새 파일을 생성합니다.

728x90

'Frontend > ReactNative' 카테고리의 다른 글

[ReactNative] Component | 02. ScrollView - 스크롤 만들기  (0) 2025.12.16
[ReactNative] Component | 01. SafeAreaView - 상태표시줄에 겹치지 않게 하기  (0) 2025.12.15
[ReactNative] dp 단위에 대하여  (0) 2025.12.15
[Expo] Expo 프로젝트 시작하기  (0) 2025.12.10
[Expo] Expo에 대하여  (0) 2025.12.10
'Frontend/ReactNative' 카테고리의 다른 글
  • [ReactNative] Component | 01. SafeAreaView - 상태표시줄에 겹치지 않게 하기
  • [ReactNative] dp 단위에 대하여
  • [Expo] Expo 프로젝트 시작하기
  • [Expo] Expo에 대하여
Rayi
Rayi
  • Rayi
    아카이브
    Rayi
  • 전체
    오늘
    어제
    • 분류 전체보기 (276)
      • CS (40)
        • CV (2)
        • PS (34)
      • Reveiw (18)
        • Paper (18)
        • Github (0)
      • ML (8)
        • Pytorch (5)
      • Language (59)
        • Python (8)
        • JavaScript (32)
        • TypeScript (16)
        • C++ (3)
      • IDE (12)
      • Git (13)
      • Frontend (77)
        • React (8)
        • ReactNative (6)
        • SolidJS (20)
        • CSS (12)
      • Backend (44)
        • DB (18)
        • Node.js (11)
      • UI (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    backend
    SOLID
    ts
    js
    review
    GAN
    vscode
    deploy
    CV
    react
    Express
    ML
    postgresql
    CS
    ps
    Three
    frontend
    DB
    API
    expo
    mongo
    PRISMA
    PyTorch
    Git
    python
    figma
    modal
    nodejs
    CSS
    ReactNative
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Rayi
[Expo] Expo 기본 프로젝트 구조 분석하기
상단으로

티스토리툴바