React란 무엇인가요?
클릭 횟수를 세는 버튼이 있는 페이지는 매번 클릭할 때마다 그 숫자를 동기화 상태로 유지해야 합니다. 순수 JavaScript에서는 버튼의 텍스트 노드를 가져와서 클릭 리스너를 추가한 다음, 누군가 클릭할 때마다 그 숫자를 직접 업데이트합니다. 검색 필터, 장바구니 합계, 열고 닫는 모달을 추가하면, 이제 코드 전체에 수동 업데이트가 흩어져 있고, 페이지의 다른 곳에서 데이터가 바뀔 때마다 버그가 숨어들 수 있는 자리가 생깁니다.
React는 컴포넌트로 사용자 인터페이스를 만드는 JavaScript 라이브러리이며, 이런 수동 관리 작업을 대신 처리합니다. 이 장에서는 그것이 실제로 무엇을 의미하는지 살펴봅니다. React 뒤의 핵심 개념, React가 어디서 실행되는지, 그리고 React를 배우기 시작할 때 나오는 라이브러리와 프레임워크의 차이에 어떻게 부합하는지를 다룹니다.
컴포넌트와 핵심 개념
같은 클릭 카운터를 React 컴포넌트로 작성한 것이 여기 있습니다:
import { useState } from 'react'
function Counter() {
const [count, setCount] = useState(0)
return (
<button onClick={() => setCount(count + 1)}>
Clicked {count} times
</button>
)
}이 예제에는 아직 배우지 않은 몇 가지가 들어 있습니다. return 안의 마크업은 JSX, useState는 훅, onClick은 이벤트 핸들러입니다. Components와 JSX 장에서 그 마크업을 다루고, State 장에서 useState를 전부 다루고, Events 장에서 onClick을 다루므로 지금은 문법을 믿고 개념의 흐름만 따라가세요.
count는 state입니다. Counter가 반환하는 JSX는 그 state에 대해 버튼이 어떻게 보여야 하는지를 설명합니다. 버튼을 클릭하면 setCount를 호출해서 count를 업데이트하고, React가 버튼을 다시 렌더링해서 일치시킵니다. 버튼의 텍스트에 직접 손을 대지 않습니다. 새로운 값에 대해 다시 설명하면 React가 페이지에서 무엇이 바뀌었는지 알아냅니다.
이것이 모든 React 컴포넌트 아래에 있는 핵심 개념입니다. 여러분의 데이터(보통 state라고 부르는)의 함수로 UI를 설명하면, React가 DOM을 업데이트해서 그에 맞춰줍니다. **컴포넌트**는 UI의 일부를 반환하는 함수이고, 앱은 컴포넌트들의 트리로 조합되어, 모두 위의 카운터처럼 같은 방식으로 작동합니다.
React가 실행되는 곳
React는 주로 브라우저에서 실행되어 컴포넌트를 DOM에 렌더링합니다. 이 핸드북은 이 환경에서 처음부터 끝까지 머물러 있습니다.
React의 컴포넌트 모델은 특정적으로 DOM에 묶여 있지 않습니다. 다른 렌더러들이 같은 모델을 다른 대상에 연결합니다. 가장 잘 알려진 예는 React Native로, React의 컴포넌트와 state 모델을 웹 페이지 대신 네이티브 모바일 인터페이스를 만드는 데 사용합니다. 여기서 언급되는 이유는 그 이름이 나중에 놀라움이 되지 않도록 하기 위함입니다. 이를 가르치는 것은 이 핸드북의 범위를 벗어납니다.
라이브러리인가요, 프레임워크인가요?
React는 UI를 렌더링합니다. 라우팅을 제공하지 않고, 데이터 로드 방식을 정하지 않으며, 서버 렌더링을 처리하지 않습니다. 이런 것들은 여러분이 직접 선택하고, 보통 다른 도구를 함께 가져와서 처리합니다. React가 라이브러리가 아닌 프레임워크로 분류되는 실질적 이유가 바로 이것입니다. 한 가지 일을 잘 하고 나머지는 여러분에게 맡기는 방식으로, 프레임워크처럼 전체 앱을 소유하지 않습니다.
프레임워크의 종류에서 이 차이를 전부 다루고, React가 Next.js 같은 것 옆에 어디에 있는지 포함합니다.
다음: 역사와 버전 - React가 여기까지 온 방법과 각 릴리스에서 무엇이 바뀌었는지를 다룹니다.

