2013년 5월 29일 지금으로부터 약 12년전 페이스북(Meta) 및 공동체가 개발한 싱글 페이지 애플리케이션인 React가 탄생하게 됩니다. React는 "싱글 페이지 애플리케이션(SPA, Single Page Application)"과 동적 웹 애플리케이션"개발에 사용할 수 있고 컴포넌트 기반 아키텍쳐 와 가상 DOM(Virtual DOM)을 제공합니다.
1. React의 주요 특징
- 컴포넌트 기반 아키텍쳐
- React UI를 컴포넌트(Component) 단위로 나누어 개발
- 각 컴포넌트는 독립적이며 재사용이 가능
- 가상 DOM(Virtual DOM)
- React는 실제 DOM 대신 가상적인 DOM을 사용해 성능을 최적화
- 상태가 변경되는 즉시 가상DOM을 먼저 업데이트 후, 변경된 부분만 실제 DOM에 반영
- 선언적 UI(Declarative UI)
- React는 "어떻해(How)" 보다 "무엇(What?)"을 중시
- 개발자는 UI가 어떠한 방식으로 구현할 것인지 선언, React가 자동적으로 UI를 업데이트
- 단방향 데이터 흐름(Unidirectional Data Flow)
- 데이터는 부모 컴포넌트에서 자식 컴포넌트로 단방향으로 전달
- 이를 통해 데이터 흐름이 명확하고 디버깅이 쉬움
- JSX(JavaScript XML)
- HTML과 유사한 JSX 문법을 사용해 UI를 정의
- JSX는 JavaScript의 확장 문법으로, HTML과 Javascript를 결합하는 방식
2. React의 장점
- 컴포넌트 재사용성: 컴포넌트 기반 구조로 코드 재사용에 좋음
- 성능: 가상 DOM을 사용한 Fast-Rendering(빠른 렌더링)이 가능
- 커뮤니티: 널리 사용되는 라이브러리와 커뮤니티 자료가 풍부
- 유연성: 다른 라이브러리나 프레임워크와 쉽게 통합
- 개발자 도구: React Developer Tools와 같은 강력한 도구
3.React의 단점
- 긴 로딩 시간 소요: 다른 라이브러리에 비해 로딩시간이 길다는 단점
- 초기 학습 곡선: JSX, 상태 관리, 컴포넌트 생명주기 등 복잡한 이해도
- 보일러플레이트 코드: 간단한 기능을 구현하기 위한 비교적 많은 코드가 필요
- 라이브러리: 프레임워크가 아니기에, 라우팅, 상태 관리 등 추가적인 라이브러리 설치가 필요하며 그에 따른 코드의 무게 증가 우려
4. React의 기본 개념
- 컴포넌트(Component)
- React 애플리케이션의 기본 구성 단위로 함수형 컴포넌트와 클래스형 컴포넌트로 나뉨
// 함수형 컴포넌트
function Hello(props) {
return <h1>Hello, {props.name}</h1>;
}
// 클래스형 컴포넌트
class Hello extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
- Props와 State
- Props: 부모 컴포넌트에서 자식 컴포넌트로 전달되는 데이터(읽기 전용).
- State: 컴포넌트 내부에 관리되는 데이터(변경 가능)
function Counter() {
const [count, setCount] = useState(0); // State 선언
return {
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>증가</button>
</div>
}
}
- 이벤트 처리
- React는 카멜 케이스(camelCase)로 이벤트를 처리
function handleClick() {
alert("Button clicked!");
}
<button onClick={handleClick}>Click Button</button>
- 라이프사이클 메서드(클래스형 컴포넌트)
- 컴포넌트 생명주기(마운트, 업데이트, 언마운트)를 관리
class MyComponent extends React.Component {
componentDidMount() {
console.log("Component mounted");
}
componentWillUnmount() {
console.log("Component will unmount");
}
render() {
return <div>Hello, World</div>
}
}
- React Hooks(함수형 컴포넌트)
- React 16.8 버전부터 도입된 기능, 함수형 컴포넌트에서 상태와 생명주기를 관리
import React, { useState, useEffect } from 'react';
function Counter() {
const [count, setCount] = useState[0];
useEffect(() => {
console.log('Component updated');
}, [count]);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>증가</button>
</div>
);
}
5. React의 생태계
React에는 다양한 라이브러리와 도구를 제공합니다.
- 상태 관리: Redux, MobX, Recoil
- 라우터: React Router
- 빌드 도구: Webpack, Babel
- 테스팅: Jest, React Testing Library
- 서버 사이드 렌더링: Nest.js
6. React 세팅하기
React 프로젝트를 세팅하기위해 Node.js와 npm이 설치되어 있어야 합니다.
- 새 프로젝트 생성하기
- create-react-app을 사용해 새 프로젝트를 생성합니다.
npx create-react-app my-app
cd my-app
npm start && yarn start
- React 파일 구조
- src/App.js: React의 메인 컴포넌트 파일
- src/index.js: 애플리케이션 진입점
- public/index.html: HTML 템플릿
// App.js
import "./App.css";
function Profile() {
return (
<div className="App">
<img src="https://i.imgur.com/MK3eW3As.jpg" about="Katherine Johnson" />
</div>
);
}
export default function App() {
return (
<section>
<h1>Amazing scientist</h1>
<div class="profile">
<Profile />
<Profile />
<Profile />
</div>
</section>
);
}
├─node_modules
├─public
├─ src
└─ App.css
└─ App.js
└─ App.test.js
└─ index.css
└─ index.js
└─ logo.svg
└─ reportWebBitals.js
└─ setupTests.js
├─ .gitignore
├─package-lock.json
├─package.json
├─README.md
├─yarn.lock
간단 요약
- React는 컴포넌트 기반으로한 UI 라이브러리로, Virtual-DOM(가상 DOM)과 JSX를 사용해 빠르고 효율적인 애플리케이션을 구축
- 함수형 컴포넌트(Function Component)와 Hooks를 통한 간결하고 강력한 코드 작성가능
- React는 현대 웹 개발에 가장 인기 있는 라이브러리로 풍부한 생태계를 지님
LIST
'Front-End > ReactJS' 카테고리의 다른 글
[ReactJS] 6장 폼 (0) | 2025.02.25 |
---|---|
[ReactJS] 5장 리스트와 키 (0) | 2025.02.23 |
[React] 4강 조건부 렌더링 (0) | 2025.02.22 |
[React] 3장 이벤트 처리 (0) | 2025.02.22 |
[ReactJS] 2장 컴포넌트와 UI 구성요소 (0) | 2025.02.16 |