웹 개발을 공부하다 보면 React(리액트)라는 이름을 정말 자주 듣게 됩니다. 페이스북, 인스타그램, 넷플릭스, 에어비앤비 같은 유명 서비스들이 모두 React를 사용하고 있다는데, 도대체 React가 뭐길래 이렇게 많은 기업에서 사용할까요? 오늘은 React의 핵심 개념부터 실제 개발 시작 방법까지, 처음 접하는 분들도 쉽게 따라할 수 있도록 자세히 알아보겠습니다.
1. React(리액트), 도대체 무엇인가요?
React는 웹과 네이티브 사용자 인터페이스를 만들기 위한 라이브러리입니다. 2013년 5월 메타(Meta, 구 Facebook)에서 개발한 오픈소스 자바스크립트 UI 라이브러리로, 현재 전 세계에서 가장 많이 사용되는 프론트엔드 기술입니다.
React 공식 사이트: https://react.dev/
한글 문서: https://react-ko.dev/
React의 탄생 배경
메타는 왜 React를 만들었을까요? 페이스북 서비스는 사용자와의 상호작용이 엄청나게 많습니다. 좋아요, 댓글, 공유 등 실시간으로 데이터가 생성되고 변경되죠. 이런 동적인 웹 애플리케이션을 안정적으로 관리하기 위해 2011년부터 내부적으로 개발을 시작했고, 2013년에 오픈소스로 공개했습니다.
처음에는 페이스북 내부에서만 사용하다가 효과가 좋아서 인스타그램에도 적용했고, 결국 전 세계 개발자들이 사용할 수 있도록 공개한 것입니다.
프레임워크 vs 라이브러리
여기서 중요한 점은 React가 ‘프레임워크’가 아닌 ‘라이브러리’라는 것입니다.
- 프레임워크: 정해진 틀 안에서 개발해야 함 (예: Angular)
- 라이브러리: 필요한 기능만 골라서 사용 가능 (예: React)
마치 레고 블록처럼 원하는 조각들을 골라 조립하는 방식이라고 생각하면 이해하기 쉽습니다. 이 때문에 React는 다른 도구들과 함께 사용하기가 훨씬 유연합니다.
2. React가 이렇게 인기 있는 이유 – 숫자로 보는 React의 위상
2025년 현재 기준으로 React는 전 세계 웹 프레임워크 사용량 1위를 차지하고 있습니다. State of JS 2023 조사에 따르면 전 세계 웹 개발자의 약 40.58%가 React를 사용하고 있으며, GitHub Star 수와 npm 패키지 다운로드 수 모두 압도적인 1위를 기록하고 있습니다.
실제 채용 시장에서의 위상
전 세계 65만 개 프론트엔드 채용 공고를 분석한 결과, React 관련 채용 공고는 약 35만 5천 개로 다른 기술들을 압도합니다. 이는 Vue.js의 약 5배, Angular의 약 3배에 달하는 수치입니다.
국내 주요 기업들의 React 사용 현황:
- 쿠팡, 카카오페이, 11번가, 토스
- 네이버, 당근마켓, 직방
- 토스에서는 React Native를 활용해 빠른 성능과 아름다운 사용성을 제공하고 있습니다.
프론트엔드 개발자로 취업을 준비한다면 React는 선택이 아닌 필수라고 할 수 있습니다.
3. React의 핵심 특징 – 왜 개발자들이 열광할까?
3-1. 컴포넌트 기반 아키텍처 (Component-Based Architecture)
React의 가장 큰 특징은 바로 컴포넌트(Component) 기반 개발입니다. 컴포넌트란 UI를 구성하는 독립적인 조각이라고 생각하면 됩니다.
예를 들어 쇼핑몰 웹사이트를 만든다고 해볼까요?
// 간단한 상품 카드 컴포넌트 예시
function ProductCard({ name, price, image }) {
return (
<div className="product-card">
<img src={image} alt={name} />
<h3>{name}</h3>
<p>{price}원</p>
<button>장바구니 담기</button>
</div>
);
}
이렇게 만든 ProductCard
컴포넌트를 여러 페이지에서 반복해서 사용할 수 있습니다. 마치 도장을 찍듯이 말이죠.
컴포넌트의 3가지 큰 장점:
- 재사용성: 한 번 만든 컴포넌트를 여러 곳에서 사용 가능
- 유지보수 용이: 각 컴포넌트가 독립적이라 수정이 쉬움
- 협업 효율: 팀원들이 각자 다른 컴포넌트를 담당하여 동시 개발 가능
3-2. 가상 DOM (Virtual DOM)으로 뛰어난 성능
가상 DOM(Virtual DOM)은 UI의 이상적인 표현을 메모리에 유지하고, ReactDOM 같은 라이브러리를 통해 실제 DOM과 동기화하는 프로그래밍 개념입니다.
실제 DOM의 문제점
웹페이지에서 데이터가 변경되면 화면을 다시 그려야 합니다. 전통적인 방식은 변경될 때마다 전체 페이지를 다시 렌더링하는데, 이 과정이 생각보다 무겁고 느립니다. 특히 SNS처럼 실시간으로 계속 변하는 페이지에서는 큰 문제가 됩니다.
React의 해결책: Virtual DOM
React는 항상 두 개의 가상돔 객체를 가지고 있습니다. 렌더링 이전 화면 구조를 나타내는 가상돔과 렌더링 이후에 보이게 될 화면 구조를 나타내는 가상돔입니다.
Virtual DOM 작동 과정:
- 비교(Diffing): 이전 가상 DOM과 새로운 가상 DOM을 비교해서 어떤 부분이 바뀌었는지 찾아냅니다.
- 재조정(Reconciliation): 변경된 부분만 실제 DOM에 적용합니다.
- 일괄 업데이트(Batch Update): 여러 변경사항을 모아서 한 번에 화면에 반영합니다.
실생활 비유: 문서 작업을 할 때 저장 버튼을 한 번에 누르는 것과 글자 하나 쓸 때마다 저장하는 것의 차이라고 생각하면 됩니다. React는 변경사항을 모아서 한 번에 저장하는 방식입니다.
3-3. JSX – 자바스크립트와 HTML의 완벽한 조화
React를 처음 보면 가장 신기한 부분이 바로 JSX(JavaScript XML) 문법입니다. 자바스크립트 코드 안에 HTML처럼 생긴 코드를 직접 작성할 수 있어요.
function Greeting() {
const name = "React";
const isLoggedIn = true;
return (
<div className="greeting">
<h1>안녕하세요, {name}!</h1>
{isLoggedIn ? (
<p>환영합니다! 🎉</p>
) : (
<p>로그인이 필요합니다.</p>
)}
</div>
);
}
위 코드를 보면 자바스크립트 함수 안에 HTML 태그가 들어있죠? 처음엔 낯설 수 있지만, 익숙해지면 정말 편리합니다. 중괄호 {}
를 사용하면 자바스크립트 표현식을 바로 넣을 수 있어 동적인 콘텐츠를 쉽게 만들 수 있습니다.
JSX의 주요 규칙:
- 최상위 요소는 반드시 하나여야 함 (Fragment
<>...</>
사용 가능) - 모든 태그는 닫혀있어야 함 (예:
<img />
,<input />
) - 클래스 속성은
className
으로 작성 - 인라인 스타일은 객체 형태로 작성:
style={{ color: 'red' }}
3-4. 단방향 데이터 흐름 (One-Way Data Flow)
React는 단방향 데이터 바인딩을 사용합니다. 데이터는 항상 부모 컴포넌트에서 자식 컴포넌트로만 흐릅니다.
// 부모 컴포넌트
function ParentComponent() {
const userName = "김코딩";
return <ChildComponent name={userName} />;
}
// 자식 컴포넌트
function ChildComponent({ name }) {
return <p>안녕하세요, {name}님!</p>;
}
이렇게 하면 데이터의 흐름을 추적하기 쉽고, 버그를 찾기도 훨씬 간편합니다. 데이터가 어디서 와서 어디로 가는지 명확하게 알 수 있거든요.
4. 최신 React 19 – 2025년, 무엇이 달라졌나?
React 19.2가 2025년 10월 1일에 npm에 공개되었습니다. 2024년 12월에 React 19가 정식 출시된 이후 지속적으로 업데이트되고 있는데요, 주요 변경사항을 살펴보겠습니다.
React 19 업그레이드 가이드: https://react.dev/blog/2024/12/05/react-19
React 19의 주요 신기능
1. Actions 기반 상태 관리
React 19부터는 form의 action 속성에 Actions를 지정하여 작업을 수행할 수 있습니다. 비동기 함수를 이용한 상태 관리가 훨씬 간편해졌습니다. 로그인 폼이나 댓글 작성 같은 기능을 만들 때 코드가 훨씬 간결해졌어요.
function CommentForm() {
async function submitComment(formData) {
const comment = formData.get('comment');
// 서버에 댓글 전송
await postComment(comment);
}
return (
<form action={submitComment}>
<textarea name="comment" />
<button type="submit">댓글 작성</button>
</form>
);
}
2. 새로운 훅(Hooks) 추가
- useActionState: 폼 액션의 결과와 대기 상태를 관리
- useFormStatus: 폼 제출 상태를 하위 컴포넌트에서 확인 가능
- useOptimistic: 낙관적 업데이트로 사용자 경험 개선 (서버 응답 전에 UI를 먼저 업데이트)
3. 서버 컴포넌트 공식 지원
React 19는 이전 버전 대비 더욱 강력한 서버 컴포넌트(Server Components)를 제공합니다. React Server Components(RSC)가 공식적으로 지원되면서, 서버에서 데이터를 미리 가져와 성능을 크게 향상시킬 수 있게 되었습니다.
4. 개선된 에러 처리
에러 로깅이 중복되지 않도록 개선되었고, captureOwnerStack()
API로 디버깅이 훨씬 쉬워졌습니다.
5. React로 무엇을 만들 수 있을까?
웹 애플리케이션
가장 기본적인 사용처입니다. 단순한 블로그부터 복잡한 대시보드까지 다양한 웹 서비스를 개발할 수 있습니다.
React를 사용하는 대표적인 글로벌 서비스:
페이스북, 인스타그램, 스카이프, 에어비앤비의 앱이 React로 만들어져 있습니다.
- 넷플릭스(Netflix): 영상 스트리밍 플랫폼
- 에어비앤비(Airbnb): 숙박 예약 서비스
- 우버(Uber): 차량 공유 서비스
- 디스코드(Discord): 커뮤니티 플랫폼
- Shopify: 전자상거래 플랫폼
- Slack: 협업 메신저
모바일 앱
React Native를 사용하면 React 지식만으로 iOS와 Android 앱을 동시에 개발할 수 있습니다. 한 번 배운 기술로 웹과 모바일 모두 대응할 수 있다는 점이 큰 장점입니다.
React Native 공식 사이트: https://reactnative.dev/
데스크톱 애플리케이션
Electron과 React를 결합하면 Windows, Mac, Linux용 데스크톱 앱도 만들 수 있습니다. VS Code, Slack 데스크톱 앱이 이 방식으로 만들어졌습니다.
6. React와 함께 사용하는 필수 도구들
React는 UI 라이브러리이기 때문에 실제 프로젝트에서는 다른 도구들과 함께 사용합니다.
6-1. Next.js – 풀스택 프레임워크
Next.js는 React 기반의 가장 인기 있는 프레임워크입니다. 서버 사이드 렌더링(SSR), 정적 사이트 생성(SSG), 라우팅 등 React만으로는 부족한 기능들을 제공합니다.
Next.js 공식 사이트: https://nextjs.org/
Next.js의 주요 기능:
- 파일 기반 라우팅 (File-based Routing)
- 서버 사이드 렌더링 (SSR)
- 이미지 최적화
- API Routes로 백엔드 구현 가능
6-2. TypeScript – 타입 안정성
TypeScript는 자바스크립트에 타입 시스템을 추가한 언어입니다. React와 함께 사용하면 코드의 오류를 미리 발견할 수 있어 대규모 프로젝트에서 필수로 사용됩니다.
// TypeScript + React 예시
interface UserProps {
name: string;
age: number;
isActive: boolean;
}
function UserProfile({ name, age, isActive }: UserProps) {
return (
<div>
<h2>{name}</h2>
<p>나이: {age}세</p>
<p>상태: {isActive ? '활성' : '비활성'}</p>
</div>
);
}
6-3. 상태 관리 라이브러리
복잡한 애플리케이션에서는 전역 상태 관리가 필요합니다.
- Redux: 가장 오래되고 검증된 상태 관리 라이브러리
- Zustand: 가볍고 사용하기 쉬운 최신 라이브러리 (추천!)
- Recoil: 메타에서 만든 React 전용 상태 관리 도구
- Jotai: 원자적 접근 방식의 경량 라이브러리
7. React 개발 시작하기 – 맛보기
이제 가장 중요한 부분입니다. 실제로 React를 어떻게 시작하고 개발하는지 단계별로 알려드리겠습니다.
7-1. 필요한 사전 준비물
1) Node.js 설치
React를 사용하려면 먼저 Node.js가 설치되어 있어야 합니다.
- Node.js 공식 사이트: https://nodejs.org/
- LTS(Long Term Support) 버전 다운로드 권장
- 설치 후 터미널에서 확인:
node -v
(버전이 표시되면 성공)
2) 코드 에디터 준비
- VS Code (Visual Studio Code) 추천: https://code.visualstudio.com/
- 필수 확장 프로그램:
- ES7+ React/Redux/React-Native snippets
- Prettier – Code formatter
- ESLint
3) 기본 지식
React를 배우기 전에 이것들은 먼저 알아두세요:
- HTML/CSS: 웹 페이지의 기본 구조와 스타일링
- JavaScript 기초: 특히 ES6+ 문법
- 화살표 함수:
const add = (a, b) => a + b
- 구조 분해 할당:
const { name, age } = user
- 템플릿 리터럴:
`안녕하세요, ${name}님`
- 배열 메서드:
map
,filter
,reduce
- 화살표 함수:
7-2. React 프로젝트 생성하기
방법 1: Vite 사용 (2025년 추천!)
Vite는 가장 빠른 개발 환경을 제공하는 최신 빌드 도구입니다.
# 프로젝트 생성
npm create vite@latest my-react-app -- --template react
# 프로젝트 폴더로 이동
cd my-react-app
# 필요한 패키지 설치
npm install
# 개발 서버 실행
npm run dev
브라우저에서 http://localhost:5173
으로 접속하면 React 앱이 실행됩니다!
방법 2: Create React App (전통적인 방법)
# 프로젝트 생성
npx create-react-app my-app
# 프로젝트 폴더로 이동
cd my-app
# 개발 서버 실행
npm start
7-3. 프로젝트 구조 이해하기
Vite로 생성한 프로젝트의 기본 구조:
my-react-app/
├── node_modules/ # 설치된 패키지들
├── public/ # 정적 파일 (이미지, 폰트 등)
├── src/ # 소스 코드 폴더
│ ├── App.jsx # 메인 컴포넌트
│ ├── main.jsx # 진입점
│ └── index.css # 스타일
├── index.html # HTML 템플릿
├── package.json # 프로젝트 설정
└── vite.config.js # Vite 설정
7-4. 첫 번째 컴포넌트 만들기
src/App.jsx
파일을 열어서 다음과 같이 수정해보세요:
import { useState } from 'react'
import './App.css'
function App() {
// 상태(state) 선언
const [count, setCount] = useState(0)
const [name, setName] = useState('')
// 클릭 이벤트 핸들러
const handleClick = () => {
setCount(count + 1)
}
return (
<div className="App">
<h1>나의 첫 React 앱 🚀</h1>
{/* 카운터 기능 */}
<div>
<p>버튼을 {count}번 클릭했습니다</p>
<button onClick={handleClick}>
클릭하세요!
</button>
</div>
{/* 입력 폼 */}
<div style={{ marginTop: '2rem' }}>
<input
type="text"
value={name}
onChange={(e) => setName(e.target.value)}
placeholder="이름을 입력하세요"
/>
{name && <p>안녕하세요, {name}님! 👋</p>}
</div>
</div>
)
}
export default App
파일을 저장하면 브라우저가 자동으로 새로고침되면서 변경사항이 반영됩니다!
7-5. 컴포넌트 분리하기 – 실전 패턴
실제 프로젝트에서는 기능별로 컴포넌트를 분리합니다.
1단계: src/components
폴더 생성
mkdir src/components
2단계: 버튼 컴포넌트 만들기
src/components/Button.jsx
파일 생성:
// Props를 받아서 재사용 가능한 버튼 컴포넌트
function Button({ text, onClick, color = 'blue' }) {
return (
<button
onClick={onClick}
style={{
backgroundColor: color,
color: 'white',
padding: '10px 20px',
border: 'none',
borderRadius: '5px',
cursor: 'pointer'
}}
>
{text}
</button>
)
}
export default Button
3단계: App.jsx에서 사용하기
import { useState } from 'react'
import Button from './components/Button'
function App() {
const [count, setCount] = useState(0)
return (
<div>
<h1>카운터: {count}</h1>
<Button
text="증가"
onClick={() => setCount(count + 1)}
color="green"
/>
<Button
text="감소"
onClick={() => setCount(count - 1)}
color="red"
/>
<Button
text="초기화"
onClick={() => setCount(0)}
/>
</div>
)
}
export default App
이렇게 하면 같은 버튼 컴포넌트를 여러 곳에서 다른 색상과 기능으로 재사용할 수 있습니다!
8. 실전 프로젝트로 배우기 – To-Do 리스트 만들기
React를 제대로 이해하려면 직접 만들어보는 게 최고입니다. 가장 기본적인 To-Do 리스트를 만들어보겠습니다.
완성 목표
- 할 일 추가하기
- 할 일 완료 체크하기
- 할 일 삭제하기
전체 코드
src/App.jsx
:
import { useState } from 'react'
import './App.css'
function App() {
// 상태 관리
const [todos, setTodos] = useState([])
const [inputValue, setInputValue] = useState('')
// 할 일 추가
const addTodo = () => {
if (inputValue.trim() === '') return
const newTodo = {
id: Date.now(),
text: inputValue,
completed: false
}
setTodos([...todos, newTodo])
setInputValue('') // 입력창 초기화
}
// 완료 상태 토글
const toggleTodo = (id) => {
setTodos(todos.map(todo =>
todo.id === id
? { ...todo, completed: !todo.completed }
: todo
))
}
// 할 일 삭제
const deleteTodo = (id) => {
setTodos(todos.filter(todo => todo.id !== id))
}
// Enter 키로 추가
const handleKeyPress = (e) => {
if (e.key === 'Enter') {
addTodo()
}
}
return (
<div className="todo-app">
<h1>📝 나의 할 일 목록</h1>
{/* 입력 영역 */}
<div className="input-section">
<input
type="text"
value={inputValue}
onChange={(e) => setInputValue(e.target.value)}
onKeyPress={handleKeyPress}
placeholder="할 일을 입력하세요..."
/>
<button onClick={addTodo}>추가</button>
</div>
{/* 통계 */}
<div className="stats">
<p>전체: {todos.length}개</p>
<p>완료: {todos.filter(t => t.completed).length}개</p>
</div>
{/* 할 일 목록 */}
<ul className="todo-list">
{todos.length === 0 ? (
<p className="empty">할 일이 없습니다 🎉</p>
) : (
todos.map(todo => (
<li key={todo.id} className={todo.completed ? 'completed' : ''}>
<input
type="checkbox"
checked={todo.completed}
onChange={() => toggleTodo(todo.id)}
/>
<span>{todo.text}</span>
<button
onClick={() => deleteTodo(todo.id)}
className="delete-btn"
>
삭제
</button>
</li>
))
)}
</ul>
</div>
)
}
export default App
스타일링 추가
src/App.css
:
.todo-app {
max-width: 600px;
margin: 50px auto;
padding: 20px;
background: white;
border-radius: 10px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
.input-section {
display: flex;
gap: 10px;
margin-bottom: 20px;
}
.input-section input {
flex: 1;
padding: 10px;
border: 2px solid #ddd;
border-radius: 5px;
font-size: 16px;
}
.input-section button {
padding: 10px 20px;
background: #4CAF50;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
font-weight: bold;
}
.stats {
display: flex;
gap: 20px;
margin-bottom: 20px;
padding: 10px;
background: #f5f5f5;
border-radius: 5px;
}
.todo-list {
list-style: none;
padding: 0;
}
.todo-list li {
display: flex;
align-items: center;
gap: 10px;
padding: 15px;
border-bottom: 1px solid #eee;
}
.todo-list li.completed span {
text-decoration: line-through;
color: #999;
}
.delete-btn {
margin-left: auto;
padding: 5px 10px;
background: #f44336;
color: white;
border: none;
border-radius: 3px;
cursor: pointer;
}
.empty {
text-align: center;
color: #999;
padding: 40px;
}
이제 브라우저에서 실행해보세요! 할 일을 추가하고, 체크하고, 삭제할 수 있는 완전히 동작하는 To-Do 앱이 완성되었습니다.
9. API 데이터 가져오기 – 실전 데이터 처리
실제 프로젝트에서는 서버에서 데이터를 가져와야 합니다. useEffect
훅을 사용해 API를 호출하는 방법을 알아보겠습니다.
간단한 사용자 목록 불러오기
import { useState, useEffect } from 'react'
function UserList() {
const [users, setUsers] = useState([])
const [loading, setLoading] = useState(true)
const [error, setError] = useState(null)
useEffect(() => {
// 컴포넌트가 마운트될 때 한 번 실행
fetch('https://jsonplaceholder.typicode.com/users')
.then(response => response.json())
.then(data => {
setUsers(data)
setLoading(false)
})
.catch(err => {
setError(err.message)
setLoading(false)
})
}, []) // 빈 배열 = 한 번만 실행
if (loading) return <p>로딩 중...</p>
if (error) return <p>에러 발생: {error}</p>
return (
<div>
<h2>사용자 목록</h2>
<ul>
{users.map(user => (
<li key={user.id}>
<strong>{user.name}</strong> - {user.email}
</li>
))}
</ul>
</div>
)
}
export default UserList
axios를 사용한 더 편한 방법
먼저 axios를 설치합니다:
npm install axios
그 다음 코드:
import { useState, useEffect } from 'react'
import axios from 'axios'
function PostList() {
const [posts, setPosts] = useState([])
const [loading, setLoading] = useState(true)
useEffect(() => {
const fetchPosts = async () => {
try {
const response = await axios.get(
'https://jsonplaceholder.typicode.com/posts'
)
setPosts(response.data.slice(0, 10)) // 처음 10개만
setLoading(false)
} catch (error) {
console.error('데이터 로딩 실패:', error)
setLoading(false)
}
}
fetchPosts()
}, [])
if (loading) {
return <div className="loading">로딩 중... ⏳</div>
}
return (
<div className="post-list">
<h2>게시글 목록</h2>
{posts.map(post => (
<div key={post.id} className="post-card">
<h3>{post.title}</h3>
<p>{post.body}</p>
</div>
))}
</div>
)
}
export default PostList
10. 추천하는 참고 자료
공식 문서 (가장 중요!)
React 공식 문서: https://react.dev/learn
- 초보자를 위한 튜토리얼부터 고급 개념까지 정말 잘 정리되어 있습니다
- 대화형 예제로 바로 실습 가능
한글 번역 문서: https://react-ko.dev/
- 영어가 부담스럽다면 한글 문서 활용
유튜브 강의
- 코딩앙마: React 기초부터 실전까지
- 노마드코더: React로 영화 웹 서비스 만들기
- 드림코딩: React 완전 정복
무료 온라인 강좌
- freeCodeCamp: https://www.freecodecamp.org/
- Codecademy: React 기초 과정
- Scrimba: 인터랙티브 React 강의
실습 플랫폼
- CodeSandbox: https://codesandbox.io/
- 브라우저에서 바로 React 코드 작성 및 테스트
- StackBlitz: https://stackblitz.com/
- VS Code 같은 환경을 브라우저에서 제공
11. React의 장점과 단점, 솔직하게
장점 ✅
방대한 커뮤니티와 생태계
전 세계 200만 명 이상의 개발자가 사용하고 있어, 어떤 문제든 검색하면 해결 방법을 찾을 수 있습니다. Stack Overflow, GitHub, Reddit에 수많은 자료가 있습니다.
재사용 가능한 컴포넌트
한 번 만든 컴포넌트를 여러 곳에서 사용할 수 있어 생산성이 높습니다. npm에는 수만 개의 React 컴포넌트 라이브러리가 있어 바로 가져다 쓸 수 있습니다.
뛰어난 성능
가상 DOM 덕분에 대규모 애플리케이션에서도 빠른 성능을 유지합니다.
React Native로 모바일까지
웹 개발 지식으로 모바일 앱도 만들 수 있습니다. 한 번 배우면 웹, iOS, Android 모두 개발 가능!
풍부한 취업 기회
프론트엔드 개발자 채용 공고의 절반 이상이 React 경험을 요구합니다. 국내외 대부분의 IT 기업이 React를 사용합니다.
Meta의 지속적인 지원
Meta(Facebook)가 적극적으로 개발하고 관리하고 있어 안정적입니다.
단점 ❌
초반 학습 곡선
JSX 문법과 컴포넌트 개념이 처음엔 낯설 수 있습니다. 특히 JavaScript에 익숙하지 않다면 더 어려울 수 있습니다.
빠른 생태계 변화
새로운 버전과 도구들이 계속 나오기 때문에 지속적인 학습이 필요합니다. 2년 전 강의를 보면 이미 방식이 바뀐 경우가 있습니다.
설정의 복잡함
React 자체는 UI 라이브러리라 라우팅, 상태 관리, API 통신 등을 위해 추가 라이브러리가 필요합니다. 초보자에게는 “뭘 선택해야 하지?”라는 고민이 생깁니다.
SEO 초기 대응
클라이언트 사이드 렌더링(CSR) 방식은 검색 엔진 최적화에 불리할 수 있습니다. (하지만 Next.js를 사용하면 해결됩니다!)
번들 크기
React 앱은 기본적으로 JavaScript 파일 크기가 크기 때문에 초기 로딩이 느릴 수 있습니다. (하지만 Code Splitting으로 최적화 가능)
12. 자주 묻는 질문 (FAQ)
Q1. React를 배우는 데 얼마나 걸리나요?
기본 개념을 익히는 데는 2-3주, 실전 프로젝트를 만들 수 있는 수준까지는 2-3개월 정도 걸립니다. 하루 2-3시간씩 꾸준히 학습한다고 가정했을 때입니다.
Q2. JavaScript를 잘 모르는데 React부터 배워도 되나요?
아니요! JavaScript 기초(특히 ES6+)를 먼저 익히는 게 중요합니다. 화살표 함수, 구조 분해 할당, map/filter 같은 배열 메서드는 필수입니다.
Q3. React vs Vue, 어떤 걸 배워야 하나요?
취업 시장에서는 React가 압도적으로 유리합니다. 하지만 Vue도 훌륭한 프레임워크입니다. 처음 시작한다면 React를 추천합니다.
Q4. 클래스형 컴포넌트도 배워야 하나요?
2025년 기준으로는 함수형 컴포넌트와 Hooks만 배워도 충분합니다. 새 프로젝트는 거의 함수형으로 만듭니다. 하지만 레거시 코드를 읽을 줄은 알아야 합니다.
Q5. React Native는 React와 많이 다른가요?
문법은 90% 이상 같지만, 웹 HTML 태그 대신 React Native 컴포넌트(<View>
, <Text>
등)를 사용합니다. React를 먼저 배우면 React Native는 쉽게 배울 수 있습니다.
React는 단순한 라이브러리를 넘어 전 세계 개발자들이 함께 만들어가는 거대한 생태계가 되었습니다. 처음엔 낯설고 어려울 수 있지만, 기본 개념만 이해하면 정말 강력한 도구가 되어줍니다.
웹 개발을 시작하거나 프론트엔드 개발자로 취업을 준비하신다면, React는 선택이 아닌 필수입니다. 처음에는 모든 것이 낯설겠지만, 하나씩 만들어가다 보면 어느새 멋진 웹 애플리케이션을 뚝딱 만들어내는 자신을 발견하게 되실 겁니다.
참고 자료:
- React 공식 문서: https://react.dev/
- React 한글 문서: https://react-ko.dev/
- Next.js: https://nextjs.org/
- React Native: https://reactnative.dev/
- MDN Web Docs: https://developer.mozilla.org/ko/