리엑트는 점진적으로 적용할 수 있도록 설계됐습니다. 필요한 만큼 적당히 리엑트를 사용할 수 있습니다. 리엑트의 맛만 보고 싶거나, HTML에 상호작용을 추가하고 싶거나, 리앱트 기반의 복잡한 앱을 시작하고 싶다면, 이 섹션은 당신의 시작에 도움이 될 겁니다.
이 챕터에서
- HTML에 React를 추가하는 방법을 배웁니다.
- 독립적인 React 프로젝트를 시작하는 방법을 배웁니다.
- 에디터를 설정하는 방법을 배웁니다.
- 리엑트 개발자 도구를 설치하는 방법을 배웁니다.
새로운 프로젝트를 시작한다면, Toolcahin이나 Framework을 추천합니다. 이 도구들은 개발하기 용이한 환경을 제공하지만 로컬에 Node.js 설치가 필요합니다.
React 라이브러리를 사용하면 UI 코드를 component라는 조각으로 분해하여 조합할 수 있습니다. React는 라우팅이나 데이터 관리에 관여하지 않습니다. 이는 리엑트 프로젝트를 시작하는 방법이 여러가지라는 것을 의미합니다.
만약 React를 배우고 있다면, Create React App을 추천합니다. React를 사용해 보고 클라이언트 사이드 싱글 페이지 애플리케이션 구축하는 가장 유명한 방법입니다. React로 만들어졌지만 라우팅 혹은 데이터 패칭에 자유롭습니다.
첫번째로, Node.js를 설피하세요. 그런 다음 터미널을 열고 다음 명령어를 실행시켜 프로젝트를 생성하세요.
npx create-react-app my-app
이제 다음 명령어로 앱을 실행시킬 수 있습니다.
cd my-app
npm start
더 많은 정보를 원한다면, 공식 문서를 참고하세요.
Create React Apps는 백엔드 로직 혹은 데이터 베이스를 다루지 않으며, 모든 백엔드와 함께 사용할 수 있습니다. 프로젝트를 빌드하면, 정적 HTML, CSS, 그리고 JS가 들어있는 폴더가 생성됩니다. Create React App은 서버를 이용할 수 없기 떄문에, 최상의 성능을 제공하지 못합니다. 라우팅과 서버 사이드 로직과 같은 내장 기능과 더욱 빠른 로딩을 원한다면 Create React Apps 대신에 다른 Framework 사용을 추천합니다.
프로덕션이 준비된 프로젝트를 시작하고 싶다면, Next.js는 시작하는 것이 좋습니다. Next.js는 React 기반의 정적 혹은 서버에서 랜더되는 애플리케이션을 만든는 인기있고 가벼운 Framework입니다. 라우팅, 스타일링, 그리고 서버 사이드 렌더링과 같은 기능이 미리 패키징 되어있어 프로젝트를 빠르게 시작하고 실행할 수 있습니다.
Next.js Foundations React와 Next.js로 빌드하는 방법을 훌륭하게 설명해줍니다.
자시만의 툴체인을 만들고 설정하는 것을 선호할 수 있습니다. 툴 체인은 구성은 일반적으로 다음과 같습니다.
나만의 Javascript 툴 체인을 처음부터 설정하고 싶다먄, Create React Appd의 일부 기능을 다시 만드는 문서를 참고하세요. Framwork는 일반적으로 라우팅과 데이터 패칭 방법 또한 제공합니다. 거대한 프로젝트의 경우, Nx 혹은 Turborepo로 하나의 레파지토리에 다수의 패키지를 관리하고 싶을 수 있습니다.
웹 사이트를 전부 React로 구축할 필요는 없습니다. HTML에 React를 추가하는 것은 설치가 필요 없고, 1분정도 걸리며, 인터랙티브 컴포넌트를 바로 작성할 수 있습니다.
React는 처음부터 점직적인 적용을 위해 설계됐습니다. 대부분의 웹 사이트들은 전체가 React로 구축되지 않았습니다(그럴 필요가 없습니다). 이 가이드는 기존의 HTMl에 "상호 작용를 끼얹기(sprinkles of interactivity)"를 추가하는지 보여줍니다.
자신의 웹사이트 혹은 빈 HTML 파일에 시도해 보세요. 인터넷 연결과 Notepad나 VSCode 같은 텍스트 에디터만 있으면 됩니다.
첫번째로, 수정하고자 하는 HTML 페이지를 여세요. React로 출력할 지점을 표시하기 위해 빈 <div>
태그를 추가하세요. 이 <div>
의 속성 값으로 유니크한 아이드를 부여하세요. 예를 들어:
<!-- ... existing HTML ... -->
<div id="like-button-root"></div>
<!-- ... existing HTML ... -->
이 <div>
는 React 트리가 시작될 위치이므로 "루트(root)"라 불립니다. 루트 HTML 태그는 <body>
태그 내부 어디에든 위치할 수 있습니다. React가 React Component로 내부 내용을 바꿀 예정이므로 내부는 비워두세요.
루트 HTML 태그는 한 페이지에 원하는 만큼 넣을 수 있습니다.
HTML 페이지 내부의 </body>
가 닫히는 바로 직후에 다음 파일들을 위해 3개의 <script>
태그를 추가합니다.
like-button.js
는 다음 스탭에서 컴포넌트를 작성할 곳 입니다.HTML은 이제 다음과 같이 끝납니다.
<!-- end of the page -->
<script src="https://unpkg.com/react@18/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js" crossorigin></script>
<script src="like-button.js"></script>
</body>
</html>
주의사항
실제 웹 사이트를 배포하기 전에
development.js
를production.min.js
변경해야 합니다! React의 개발환경 빌드는 더욱 구체적인 에러 메시지를 제공하지만, 웹 사이트를 매우 느리게 만듭니다.
HTML 페이지 옆에 like-button.js
파일을 생성하고, 밑에 코드 조각을 추가한 다음 저장세요. 이 코드는 LikeButton
React 컴포넌트를 정의합니다.
"use strict";
function LikeButton() {
const [liked, setLiked] = React.useState(false);
if (liked) {
return "You liked this!";
}
return React.createElement(
"button",
{
onClick: () => setLiked(true),
},
"Like"
);
}
마지막으로 like-button.js
하단에 세 줄을 추가합니다. 이 세줄의 코드는 첫번째 스탭에서 추가했던 <div>
를 찾고, React root를 생성하여, "Like" 버튼 React 컴포넌트를 내부에 출력합니다.
const rootNode = document.getElementById("like-button-root");
const root = ReactDOM.createRoot(rootNode);
root.render(React.createElement(LikeButton));
축하합니다! 방금 첫 React 컴포넌트를 웹 사이트에 랜더했습니다!
React 컴포넌트를 같은 HTML 페이지의 여러 장소에 출력하고 싶을 수 있습니다. 페이지의 React 기반 영역이 서로 분리돼 있을 경우 매우 유용합니다. 복수개의 루트 태그를 HTML에 넣고 각각의 내부에 React 컴포넌트를 ReactDOM.createRoot()
로 랜더하면 됩니다. 예를 들어:
index.html
에 추가적인 컨테이너로 <div id="another-root"></div>
를 추가합니다.like-button.js
마지막에 3줄을 너 추가합니다.const anotherRootNode = document.getElementById("another-root");
const anotherRoot = ReactDOM.createRoot(anotherRootNode);
anotherRoot.render(React.createElement(LikeButton));
많은 곳에 같은 컴포넌트를 랜더할 필요가 있다면, 각 루트에 id
대신에 class
를 사용해 CSS를 할당할 수 있으며, 모든 루트를 한번에 찾을 수 있습니다. 여기 세개의 "Like" 버튼을 출력하고 각각에 데이터를 넘겨주는 예시가 있습니다.
Minify를 하지 않으면 Javascript는 유저의 페이지 로드 타임을 현저하게 느리게 만듭니다. 프로덕션을 위해 웹 사이트를 배포하기 전에, script를 작게 만들 필요가 있습니다.
production.min.js
끝난는 것을 확인했다면 웹 사이트가 프로던셕에 나갈 준비는 끝났습니다.<script src="https://unpkg.com/react@18/umd/react.production.min.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js" crossorigin></script>
위의 예시들은 브라우저에서 제한적으로 제공하는 기능에 의존합니다. 이것이 like-button.js
이 React에 무엇이 출력될지 요청하는 과정에서 Javascript 함수 호출을 사용한 이유입니다.
return React.createElement("button", { onClick: () => setLiked(true) }, "Like");
그러나, React는 HTML과 유사한 Javascript 문법인 [JSX]를 사용하는 옵션 또한 제공합니다.
return <button onClick={() => setLiked(true)}>Like</button>;
위 두개의 코드 조각은 서로 같슴니다. JSX는 Javascript에서 마크업을 묘사하는데 인기있는 문법입니다. 많은 사람들이 React 혹은 다른 라이브러리들을 사용하여 UI 코드를 작성할 떄 친숙하고 유용하다고 느낍니다.
이 온라인 컨버터를 사용하면 HTML 마크업을 JSX 변환할 수 있습니다.
JSX 사용해보기 가장 빠른 방법은 Babel 컴파일러를 <script>
태그로 페이지에 추가하는 겁니다. like-button.js
이전에 삽입하고, type="text/babel"
속성을 like-button.js
의 <script>
태그에 추가합니다.
<script src="https://unpkg.com/react@18/umd/react.production.min.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js" crossorigin></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script src="like-button.js" type="text/babel"></script>
</body>
이제 like-button.js
를 열고 다음 코드를
return React.createElement(
"button",
{
onClick: () => setLiked(true),
},
"Like"
);
같은 기능의 JSX 코드로 변경합니다.
return <button onClick={() => setLiked(true)}>Like</button>;
처음에는 JS와 마크업을 섞는 것이 다소 이상하게 느껴질 수 있지만, 점점 익숙해질 겁니다. 여기 다운받아 가지고 놀 수 있는 JSX로 된 예시 HTML파일이 있습니다.
주의사항
Babel
<script>
컴파일러는 학습하거나 간단한 데모를 만들기에는 좋습니다. 그러나, 웹 사이트를 느리게 만들고 프로덕션과는 맞지 않습니다. 출시할 준비가 되었다면, 이 단계에서 추가한 Babel<script>
태그와type="text/babel"
속성을 지워야 합니다. 대신에, 다음 섹션에서 JSX 혹은 JS 기반의 모든<script>
를 변경하는 JSX 전처리기 설정합니다.
프로젝트에 JSX를 추가할 때 번들러와 복잡한 개발 서버와 같은 도구들은 필요하지 않습니다. JSX 전처리기 추가는 CSS 전처리기를 추가하는 것과 비슷합니다.
터미널에서 프로젝트 폴더로 돌아가서, 다음 두가지 명령어를 붙여넣습니다. (Node.js가 설치돼있는지 홗인하세요!)
npm init -y
(만약 실패한다면, 여기 수정하는 방법이 있습니다)npm install babel-cli@6 babel-preset-react-app@3
JSX 전처리기를 설치할 떄는 npm만 있으면 됩니다. 다른건 필요 없습니다. Reactd와 애플리케이션 코드 변함없이 <script>
를 유지할 수 있습니다.
축하합니다! 방금 프로젝트에 프로젝트 준비를 위한 JSX 설정을 추가했습니다.
JSX를 포함한 파일을 저장할 때 마다 변환이 재실행 되어 JSX 파일을 브라우저가 이해할 수 있는 평벙함 Javascript로 새롭게 바꿀 수 있도록 JSX를 전처리할 수 있습니다. 설정하는 방법은 다음과 같습니다.
src
폴더를 만듭니다.npx babel --watch src --out-dir . --presets react-app/prod
(완료될 때 까지 기다리지 마세요! 이 명령어는 src
내부의 JSX를 자동으로 감시하고 수정하기 시작합니다.)like-button.js
(이렇게 작성돼야 합니다!)를 새 src 폴더로 이동합니다.Watcher는 브라우저에 적합한 일반 Javascript로 전처리된 like-button.js
를 만들겁니다.
주의사항
"You have mistakenly installed the
babel
package"과 같은 에러 메시지가 보인다면, 이전 스탭을 완료하지 않았을 겁니다. 동일한 폴더에서 수행후, 다시 시도하시기 바랍니다.
사용한 툴의 이름은 Babel이며, 이 문서에서 더 자세히 배울 수 있습니다. JSX를 추가하면, 오래된 브라우저에서도 JavaScript 최신 문법 기능을 걱정 없이 사용할 수 있습니다.