React란 무엇인가?
Kent C. Dodds의 아티클 What is React?을 번역한 글 입니다.
React는 UI를 만들고 사용자 상호작용을 관리하기 위한 자바스크립트 라이브러리입니다. React는 주로 브라우저에서 웹 애플리케이션을 구축하는 데 사용됩니다. 하지만 강력한 컴포넌트 모델로 네이티브 모바일 및 데스크톱 애플리케이션, 이미지, PDF, 터미널 애플리케이션 등을 만드는 데도 사용할 수 있습니다.
컴포넌트 기반 인터페이스 구성 모델에 대한 React의 성공으로 인해 다른 많은 UI 라이브러리와 프레임워크들도 이 접근 방식을 채택했는데요. 그러나 React는 수년 동안 UI를 구축하는 데 있어 압도적으로 지배적인 방식이었으며, 여러분이나 제가 웹에서 소프트웨어를 계속 개발하는 한 이 방식은 계속 유지될 것입니다.
조금 더 깊이 들어가서 React를 구성하는 요소들을 살펴봅시다.
React의 핵심 빌딩 블록
React로 구축된 UI의 기본 구성 요소는 Element입니다:
import { createElement } from 'react'
const element = createElement('button', { onClick: () => console.log('clicked!') }, 'Click me!')
React가 생성한 요소를 검사하면 다음과 같이 보입니다:
{
"$$typeof": Symbol(react.element),
"type": "button",
"key": null,
"ref": null,
"props": {
"onClick": () => console.log('clicked!'),
"children": "Click me!"
},
"_owner": null,
"_store": {}
}
저는 "UI 설명자"라고 부르는 이 객체는 렌더링되는 환경에 고유한 UI를 생성하는 데 사용됩니다. 우리의 경우, 브라우저용 UI를 생성하고 싶기 때문에 이 UI를 브라우저가 이해할 수 있는 DOM 노드로 변환하기 위해 React DOM 패키지를 사용합니다.
이렇게 React 엘리먼트와 DOM 엘리먼트를 분리하는 것은 브라우저 이외의 환경에서도 React 지식(혹은 코드)을 이식할 수 있게 해주는 요소 중 하나입니다.
JSX
createElement API를 직접 사용하는 것은 인체공학적이지 않기 때문에 React가 처음 발표되었을 때 자바스크립트에 특별한 경량 구문을 추가하여 element를 더 쉽게 만들 수 있도록 했습니다. 이 구문을 사용하면 동일한 버튼을 만들 수 있습니다.
const element = <button onClick={() => console.log('clicked!')}>Click me!</button>
이 문법은 브라우저가 기본적으로 실행하지 않는 추가 문법이므로 브라우저가 해석할 수 읽기(interpret) 전에 코드를 컴파일해야 합니다. 기술적으로는 브라우저에서 바로 이 작업을 수행할 수 있지만, 최적의 방법은 아닙니다.
어쨌든 대부분의 앱에서는 자바스크립트를 변환하는 도구를 사용하게 됩니다. 최소한 네트워크를 통해 전송하는 텍스트의 양을 줄이기 위한 축소기(minifier)나 브라우저에서 로드해야 하는 파일 수를 줄이기 위한 번들러가 필요할 것입니다. 또한, 특히 중요한 작업에서는 JSX를 기본적으로 지원하는 타입스크립트를 사용하고 싶을 것입니다.
이런 방식으로 UI를 작성하는 것은 즐거운 일입니다. 대부분의 개발자는 몇 시간만 공부하고 연습하면 JSX가 일반 자바스크립트로 변환되는 방식을 이해할 수 있으며, 기본적으로 자바스크립트이기 때문에 매우 효과적으로 작업할 수 있습니다.