React Native는 JavaScript로 iOS와 Android 앱을 동시에 만들 수 있는 크로스플랫폼 프레임워크입니다.

면접에서 "React Native를 왜 선택했나요?"라는 질문을 받으면, 단순히 "크로스플랫폼이니까"가 아니라 어떤 트레이드오프를 이해하고 선택했는지 를 설명할 수 있어야 합니다.


React Native란?

React Native는 Meta(구 Facebook)가 만든 오픈소스 프레임워크입니다. React의 컴포넌트 기반 패러다임을 그대로 사용하면서, 웹 브라우저가 아닌 네이티브 플랫폼 위에서 실행 됩니다.

핵심 포인트:

  • JavaScript로 작성 하지만, 결과물은 네이티브 UI 컴포넌트
  • <div> 대신 <View>, <span> 대신 <Text> 사용
  • 하나의 코드베이스로 iOS/Android 동시 대응

Expo vs React Native CLI

프로젝트를 시작할 때 가장 먼저 마주치는 선택지입니다.

Expo

BASH
# Expo로 프로젝트 생성
npx create-expo-app MyApp
cd MyApp
npx expo start
  • 설정이 간단하고 빠르게 시작 가능
  • Expo Go 앱으로 실제 디바이스에서 바로 테스트
  • 네이티브 모듈 접근에 제한이 있었지만, EAS Build 도입 이후 대부분 해결
  • 2024년 이후로는 공식 문서에서도 Expo를 기본 권장

React Native CLI

BASH
# CLI로 프로젝트 생성
npx react-native init MyApp
cd MyApp

# iOS 실행 (macOS 필요)
npx react-native run-ios

# Android 실행
npx react-native run-android
  • Xcode, Android Studio 등 네이티브 개발 환경 직접 설정 필요
  • 네이티브 코드를 직접 수정해야 하는 경우에 적합
  • 설정이 복잡하지만 자유도가 높음

어떤 걸 선택해야 하나?

기준ExpoCLI
시작 속도빠름느림
네이티브 모듈EAS로 대부분 커버완전 자유
초보자 추천OX
기업 프로젝트충분히 가능복잡한 네이티브 연동 시

공부하다 보니 처음에는 무조건 Expo로 시작하는 게 좋았습니다. 나중에 네이티브 모듈이 필요해지면 npx expo prebuild로 네이티브 프로젝트를 꺼낼 수 있거든요.


개발 환경 설정

공통 필수 도구

BASH
# Node.js 설치 (LTS 버전 권장)
brew install node

# Watchman 설치 (파일 변경 감지)
brew install watchman

iOS 개발 (macOS 전용)

BASH
# Xcode 설치 (App Store)
# Command Line Tools 설정
xcode-select --install

# CocoaPods 설치
sudo gem install cocoapods

# iOS 시뮬레이터 실행
npx react-native run-ios

Android 개발

  1. Android Studio 설치
  2. SDK Manager에서 필요한 SDK 설치
  3. 환경 변수 설정
BASH
# ~/.zshrc 또는 ~/.bashrc에 추가
export ANDROID_HOME=$HOME/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/platform-tools

첫 번째 앱 만들기

TSX
// App.tsx — 기본 앱 구조
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';

export default function App() {
  return (
    // View는 웹의 div와 비슷한 컨테이너
    <View style={styles.container}>
      {/* Text 없이 직접 문자열을 쓸 수 없음 */}
      <Text style={styles.title}>안녕하세요!</Text>
      <Text style={styles.subtitle}>첫 React Native 앱입니다.</Text>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center', // 세로 중앙 정렬
    alignItems: 'center',     // 가로 중앙 정렬
    backgroundColor: '#f5f5f5',
  },
  title: {
    fontSize: 24,
    fontWeight: 'bold',
    marginBottom: 8,
  },
  subtitle: {
    fontSize: 16,
    color: '#666',
  },
});

웹 React와 다른 점

웹 ReactReact Native
<div><View>
<span>, <p><Text>
<img><Image>
<input><TextInput>
<button><TouchableOpacity>, <Pressable>
CSS 파일StyleSheet.create()
onClickonPress

면접에서 이 포인트를 자주 물어보더라고요. "React Native에서 <div>를 쓸 수 있나요?" — 답은 No입니다. 모든 UI는 네이티브 컴포넌트로 매핑되기 때문에 전용 컴포넌트를 사용해야 합니다.


프로젝트 구조

PLAINTEXT
MyApp/
├── App.tsx              # 앱 진입점
├── package.json         # 의존성 관리
├── tsconfig.json        # TypeScript 설정
├── babel.config.js      # Babel 설정
├── metro.config.js      # Metro 번들러 설정
├── ios/                 # iOS 네이티브 코드 (CLI)
├── android/             # Android 네이티브 코드 (CLI)
└── src/                 # 소스 코드 (직접 구성)
    ├── components/
    ├── screens/
    ├── navigation/
    └── utils/

Hot Reloading과 Fast Refresh

React Native의 개발 경험을 좋게 만드는 핵심 기능입니다.

  • Fast Refresh: 코드를 저장하면 앱이 자동으로 업데이트
  • 컴포넌트 상태를 유지한 채 UI만 갱신
  • 문법 에러가 있으면 에러 화면을 보여주고, 수정하면 자동 복구
TSX
// 코드를 수정하고 저장하면 바로 반영됨
<Text style={styles.title}>수정된 텍스트!</Text>

디버깅 도구

React Native Debugger

BASH
# 개발 메뉴 열기
# iOS 시뮬레이터: Cmd + D
# Android 에뮬레이터: Cmd + M

# Chrome DevTools로 디버깅
# 개발 메뉴 → "Debug with Chrome"

Flipper (Meta 공식 디버거)

  • 네트워크 요청 모니터링
  • React DevTools 통합
  • 레이아웃 인스펙터
  • 로그 뷰어

콘솔 로그

TSX
// 기본 로그
console.log('데이터:', data);
console.warn('경고 메시지');
console.error('에러 발생');

// Metro 터미널에서 확인 가능

면접에서 자주 나오는 질문

"React Native는 어떻게 동작하나요?"

핵심 키워드는 Bridge(기존)와 New Architecture(최신)입니다.

  • 기존: JavaScript ↔ Bridge ↔ Native (JSON 직렬화)
  • 최신: JavaScript ↔ JSI ↔ Native (직접 참조)

"하이브리드 앱과 뭐가 다른가요?"

  • ** 하이브리드 앱** (Cordova, Ionic): WebView 안에서 웹앱 실행
  • React Native: 네이티브 UI 컴포넌트를 직접 렌더링
  • 성능 차이가 큼 — RN은 네이티브에 가까운 성능

정리

  • React Native는 Expo로 시작 하는 것이 가장 빠르고 안전합니다
  • 웹 React를 알면 문법은 비슷하지만, 컴포넌트와 스타일링 방식이 다릅니다
  • 네이티브 앱과 하이브리드 앱의 차이를 명확히 이해해두면 면접에서 강점이 됩니다
  • 개발 환경이 복잡하게 느껴지더라도, 한번 세팅해두면 Fast Refresh 덕분에 개발 속도가 빠릅니다
댓글 로딩 중...