1 분 소요

React?

  • Meta(구 Facebook)가 개발한 오픈소스 JavaScript UI 라이브러리
  • 2013년 오픈소스로 공개
  • 사용자 인터페이스(UI)를 컴포넌트 단위로 구성하는 방식
  • 현재 프론트엔드 생태계에서 가장 널리 사용되는 라이브러리


주요 특징

컴포넌트 기반 (Component-Based)

  • UI를 독립적이고 재사용 가능한 컴포넌트로 분리
  • 각 컴포넌트는 자체 상태(State)와 로직을 가짐
  • 작은 컴포넌트를 조합해 복잡한 UI를 구성

선언형 (Declarative)

  • “어떻게 그릴지”가 아닌 “무엇을 그릴지”를 선언
  • 상태가 변경되면 React가 자동으로 UI를 다시 렌더링
// 명령형(Imperative) - DOM을 직접 조작
const button = document.getElementById('btn');
button.textContent = '클릭됨';
button.style.color = 'red';

// 선언형(Declarative) - 상태에 따라 UI를 선언
function Button({ clicked }) {
  return <button style=>
    {clicked ? '클릭됨' : '클릭하세요'}
  </button>;
}

가상 DOM (Virtual DOM)

  • 실제 DOM 변경 전에 가상 DOM에서 비교(Diffing)
  • 변경된 부분만 실제 DOM에 반영 → 불필요한 렌더링 최소화
  • 직접 DOM을 조작하는 것보다 효율적

단방향 데이터 흐름 (One-Way Data Flow)

  • 데이터는 부모 → 자식 방향으로만 흐름
  • 상태 변화를 추적하기 쉬워 디버깅이 용이


핵심 개념

개념 설명
컴포넌트 UI의 재사용 가능한 최소 단위
JSX JavaScript 안에 HTML을 쓸 수 있는 문법
Props 부모가 자식 컴포넌트에게 전달하는 데이터
State 컴포넌트 내부에서 관리하는 동적 데이터
Hooks 함수형 컴포넌트에서 상태/생명주기를 다루는 함수


장점

  • 풍부한 생태계: npm 패키지, 라이브러리, 커뮤니티 방대
  • 재사용성 높은 컴포넌트: 한 번 만들면 여러 곳에서 사용
  • 빠른 렌더링: 가상 DOM으로 최소한의 DOM 업데이트
  • React Native: 모바일 앱(iOS/Android)도 동일 문법으로 개발 가능
  • Next.js: 서버사이드 렌더링(SSR), 정적 사이트 생성(SSG) 지원


단점

  • 라이브러리: 풀 프레임워크가 아니라 라우터, 상태관리 등 직접 선택 필요
  • 빠른 업데이트: 생태계 변화 속도가 빨라 지속적인 학습 필요
  • JSX 학습 곡선: HTML과 유사하지만 다른 점들이 존재


React vs Vue vs Angular

  React Vue Angular
타입 라이브러리 프레임워크 프레임워크
언어 JavaScript/TypeScript JavaScript/TypeScript TypeScript
학습 곡선 중간 낮음 높음
커뮤니티 매우 큼
주요 사용처 Meta, Netflix, Airbnb Alibaba, Xiaomi Google, Microsoft


환경 구성

필수 도구

  • Node.js v18 이상 (LTS 권장)
  • npm 또는 pnpm
  • VS Code + React 관련 확장

프로젝트 생성 도구

도구 특징
Vite 빠른 개발 서버, 현재 표준
Create React App 공식 도구 (현재는 사실상 deprecated)
Next.js SSR/SSG가 필요한 프로덕션 앱


관련 링크