[React Native] 첫 프로젝트

2022. 7. 17. 17:11·React Native/공통
반응형

0. 들어가며

들어가기에 앞서 개발환경 구성은 앞선 React Native 개발환경 구성 부분을 확인하시길 바랍니다. 

 

1. 프로젝트 생성

React Native CLI를 사용해서 React Native 프로젝트를 생성한다. 

react-native init FirstApp

명령어를 사용하면 자동으로 최신 리액트 네이티브 버전으로 프로젝트가 생성된다. 

하지만, 이번 버전을 사용하거나, 특정 프로젝트와 동일한 버전으로 프로젝트를 생성하고 싶은 경우에는 

react-native init -version 0.59.10 FirstApp

-version 옵션을 사용하면 지정할 수 있다. 

 

프로젝트 구성이 다 된 경우에 IOS의 경우

yarn ios 
// or
react-native run-ios

명령어를 통해서 프로젝트를 실행할 수 있으며, Android의 경우에는 

yarn android 
// or
react-native android

명령어를 통해서 실행이 가능하다. 

 

2. 폴더 및 파일 

React Native CLI를 통해서 프로젝트를 생성할 경우 많은 폴더 및 파일이 생성되는 핵심 몇가지만 알아보자면

  • index.js : 리액트 네이티브 프로젝트 시작 파일이다. 이 파일을 기준으로 자바스크립트 코드가 번들링 된다. 
  • App.js : 화면에 나타나는 내용이 들어 있는 파일이다. 
  • /android : 안드로이드 프로젝트가 들어가 있는 폴더이다. 
  • /android/app/build.gradle : 안드로이드 앱을 빌드, 배포할 때 사용하는 파일이다. 
  • /android/app/src/main/java/com/firstapp/MainActivity.java, MainApplication.java : 안드로이드 앱의 메인 파일이다. 
  • /android/app/src/res/ : 안드로이드 앱의 아이콘 또는 시작화면 등 리소스를 관리하는 폴더이다. 
  • /ios : IOS 프로젝트가 담겨 있는 폴더이다. 
  • /ios/FirstApp/AppDelefate.h, AppDelegate.m : IOS 앱의 메인 파일이다. 
  • /ios/FristApp/Info.plist : IOS 프로젝트 설정 파일이다.

리액트 네이티브로 프로젝트를 진행할 때, 자주 수정하게 될 파일 및 폴더들이다. 

거의 대부분 자바스크립트 파일을 만들고 수정하겠지만, 앱을 빌드 및 배포할 때 또는 네이티브 기능을 가진 라이브러리와 연동할 때는 네이티브 파일과 폴더를 다루게 될 것이다. 

 

3. 리액트 네이티브 컴포넌트 

// index.js
/**
 * @format
 */

import {AppRegistry} from 'react-native';
import App from './App';
import {name as appName} from './app.json';

AppRegistry.registerComponent(appName, () => App);

index.js를 열면 AppRegistry.registerComponent를 통해서 사용할 모듈을 지정하게 된다. 

 

첫 번째 매개변수는 모듈의 이름을 지정하는 것인데, 이것은 프로젝트를 생성할 때 자동으로 생성되서

연결된다. 

두 번째 매개변수는 처음으로 렌더링될 컴포넌트를 지정한다. 

 

App.js를 열어보면 많은 코드가 나와있는데, 

import React from 'react';

 React Native는 React로부터 파생되었기 때문에 React를 불러와야 한다. 

 

import {
  SafeAreaView,
  ScrollView,
  StatusBar,
  StyleSheet,
  Text,
  useColorScheme,
  View,
} from 'react-native';

React는 HTML 태그를 통해서 화면에 나타내지만, React Native는 HTML을 통해서 화면에 표시할 수 없다. 

대신 특별한 태그만 사용이 가능하다. 

 

1. SafeAreaView

SafeAreaView는 아이폰에 있는 노치 디자인에서 상단에 상태 바와 하단의 홈 버튼의 영역을 제외한 영역에 콘텐츠를 표시할 때 사용하는 컴포넌트이다. 

 

일반적인 전체 화면에 콘텐츠를 나타내고 싶다면 View 컴포넌트를 사용하면 된다. 

 

2. StyleSheet

StyleSheet는 React Native의 컴포넌트에 스타일을 적용할 때 사용한다. 

스타일을 적용하는 하나의 방법으로 인라인 스타일이라는 방법도 있다. 

 

3. ScrollView

ScrollView는 화면 스크롤이 가능한 컴포넌트다.

리액트 네이티브에서 화면 스크롤이 가능한 컴포넌트로 FlatList, ScrollView, SectionList 등을 제공하고 있다. 

 

4. View & Text

React Native에서는 View를 사용해서 전체적인 레이아웃을 잡는다. 그리고 글자를 표시할 때는

반드시 Text 컴포넌트를 사용해야 한다. 사용하지 않으면 에러가 발생한다. 

 

5. StatusBar

StatusBar 는 화면에 표시되는 컴포넌트는 아니고, 상단에 있는 상태 바를 숨기거나 색깔을 변경할 때

사용한다. 

 

4. 추가 라이브러리

리액트 네이티브를 개발할 때 필수는 아니지만 도움이 되는 몇 가지 라이브러리를 알아보자

1. 타입스크립트

React Native는 당연히 자바스크립트로 개발을 한다. 하지만 런타임 중 변수의 타입이 결정되면 변수의 타입 때문에 발생하는 버그와 에러도 자바스크립트로 해결해야한다. 

이를 더 쉽게 해결해주기 위해서 타입스크립트를 사용하면 도움이 된다. 

npm install typescript @types/react @types/react-native --save-dev
  • typescript : 타입스크립트 라이브러리
  • @types/react : 리액트의 타입이 정의된 파일 
  • @types/react-native : 리액트 네이티브의 타입이 정의된 파일 

추가로 타입스크립트를 설정하기 위해서, " tsconfig.json "  파일을 만들고 

{
    "compilerOptions": {
    	"allowJs": true,
        "allowSyntheticDefaultImports": true,
        "esModuleInsterop": true,
        "isolatedModules": true,
        "jsx": "react",
        "lib": ["es6"],
        "moduleResolution": "node",
        "noEmit": true,
        "strict": true,
        "target": "esnext"
    },
    "esclude": ["node_modules", "babel.config.js", "metro.config.js", "jest.config.js"]
}

내용을 추가해주면 된다. 

 

사실 이런 과정이 귀찮다면 React Native CLI 명령어를 사용해서, 타입스크립트용 프로젝트를 만들 수 있다. 

react-native init FirstApp --template react-native-template-typescript

 

2. Styled Components

React Native의 스타일을 적용하는 방법으로 인라인 방식과 StyleSheet이 있다고 했지만,

가장 유명한 Styled Components를 사용하는 방법도 있다. 

npm install --save styled-components
npm install --save-dev @types/styled-components @types/styled-components-react-native
  • styled-components : Styled Components 라이브러리
  • @types/styled-components : 타입스크립트를 위해서 Styled Components 타입 정의 파일

3. babel-plugin-root-import

React Native는 컴포넌트를 추가할 때, 상대 경로를 이용한다. ( import Button from '../../../Button ) 

상대 경로를 이용하면 경로가 길어지고 알기 어려워지는 문제점이 있다. 

 

babel-plugin-root-import 와 타입스크립트 설정을 사용하면, 필요한 컴포넌트를 추가할 때,

상대 경로가 아닌 절대 경로를 사용할 수 있다. 

npm install --save-dev babel-plugin-root-import

 

라이브러리를 먼저 설치하고 babel.config.js 파일을 수정한다. 

module.exports = {
  presets: ['module:metro-react-native-babel-preset'],
  plguins: [
    [
      'babel-plugin-root-import',
      {
        rootPathPrefix: '~',
        rootPathSuffix: 'src',
      },
    ],
  ],
};

 

그리고 타입스크립트 설정에도 절대 경로를 적용하기 위해서 tsconfig.json을 열어 수정한다.

// prettier-ignore
{
  "compilerOptions": {
    // ...
    
    "baseUrl": "./src",                               
    "paths": {
      "~/*" : ["*"]
    },    
    
    // ...
  },
  "exclude": [
    "node_modules", "babel.config.js", "metro.config.js", "jest.config.js"
  ]
}

이제 모든 경로를 ~를 기준으로 변경하면 자동으로 src 폴더와 매핑이 된다. 

반응형
저작자표시 비영리 변경금지 (새창열림)

'React Native > 공통' 카테고리의 다른 글

iOS 실시간 위치 정보 가져오기 - 확장판  (1) 2024.12.21
react native flex:1 의 오류  (1) 2024.11.16
iOS 실시간 위치 정보 가지고 오기  (1) 2024.08.24
React Native 파이어베이스 배포하기  (1) 2024.08.10
[React Native] 빌드하기  (0) 2023.08.28
'React Native/공통' 카테고리의 다른 글
  • react native flex:1 의 오류
  • iOS 실시간 위치 정보 가지고 오기
  • React Native 파이어베이스 배포하기
  • [React Native] 빌드하기
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    typescript
    ChatGPT
    바질 키우기
    네이버 부스트캠프
    프로그래머스
    리얼학습일기
    자바스크립트
    Node.js
    ReactNative
    영어회화
    타일러영어
    Babel
    javascript
    next.js
    리액트
    덤프
    CCNA
    webpack
    다이소
    네트워크
    식물
    리얼클래스
    react
    알고리즘
    영어독학
    redux
    Docker
    CSS
    바질
    타입스크립트
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[React Native] 첫 프로젝트
상단으로

티스토리툴바