리액트는 SPA(Single Page Application) 방식을 사용한다. 리액트의 페이지 렌더링에 사용되는 개념인 React-Router 라이브러리에 대해 알아보자. 

 

React-Router-Dom 이란?

React router dom은 React 앱에서 페이지 라우팅을 관리하는 데 사용되는 라이브러리로, 페이지 로딩 없이 페이지에 필요한 컴포넌트를 렌더링하여 화면에 보여준다. 라우팅이 실행 중인 앱 외부에서 처리되는 기존 라우팅 아키텍처와 달리 React Router DOM은 앱 및 플랫폼의 요구 사항에 따라 컴포넌트 기반 라우팅을 용이하게 해준다. 따라서 React Router DOM을 사용하면 웹 앱에서 동적 라우팅을 구현할 수 있다. 


실제로 React Router를 설정하는 과정은 아래와 같다. 

먼저 앱 어디서나 react router를 사용할 수 있도록 하기 위해 app.js 에서 구성요소들을 BrowserRouter로 감싸준다.

 

<BrowserRouter>:  어디서나 react router를 사용할 수 있도록 모든 컴포넌트를 래핑

- HTML5 History API(pushState, replaceState 및 popstate 이벤트)를 사용하여 UI를 URL과 동기화된 상태로 유지

 

<Routes>: 앱에서 생성될 모든 개별 경로에 대한 상위 컨테이너 역할

- Route로 생성된 자식 컴포넌트 중에서 매칭되는 첫번째 Route를 렌더링함

  *모든 컴포넌트 페이지에서 보여야 하는 페이지(ex. Navbar, Footer 등)는 Routes보다 상위에 적어주어야 한다

 

<Route>: 개별 컴포넌트의 경로를 생성

- path : 컴포넌트의 URL 경로 지정 

 *경로 이름이 백 슬래시(/) 인 컴포넌트는 앱이 처음 로드될 때마다 먼저 렌더링됨(홈 컴포넌트가 렌더링되는 첫 번째 구성 요소) 

- element : 렌더링되면 보여줄 컴포넌트


Link Component

Link는 React Router 라이브러리에서 제공하는 컴포넌트로, 웹 앱에서 페이지 간의 이동을 가능하게 하는 하이퍼링크 역할을 한다.

즉, Link는 HTML의 앵커 태그(<a />)와 유사하나, 브라우저 전환 시에 전체 페이지가 새로고침 되는 <a/> 태그와 달리 필요한 부분만 동적으로 바꿔주어 브라우저 내 페이지 전환을 부드럽게 처리한다.  

 

Link 컴포넌트의 사용 예시는 다음과 같다.

import { Link } from "react-router-dom";

function App() {
  return (
    <div className='navbar'>
      <nav>
        <ul className='nav-menu'>
          <li>
            <Link to="/">홈</Link>
          </li>
          <li>
            <Link to="/about">소개</Link>
          </li>
          <li>
            <Link to="/contact">문의하기</Link>
          </li>
        </ul>
      </nav>
    </div>
  );
}

export default App;

 

위 코드는 홈페이지 상단의 navbar 메뉴를 구현하기 위한 것이다. 

보통 홈페이지에서 메뉴 바에서 메뉴를 선택하면, 페이지 전체가 새로고침 되는 것보다 메뉴 바 아랫 부분만 바뀌는 것이 자연스럽다. 

Link 컴포넌트에서  'to=' 속성으로 이동하고자 할 경로를 지정하여 이러한 SPA (Single Page Application)에서의 페이지 간 전환을 매끄럽게 할 수 있다. 


*추가할 내용

- History API

- SPA 렌더링 방식

 

*reference

- [인프런] 따라하며 배우는 리액트 A-Z

 

'React' 카테고리의 다른 글

React란? - React의 개념과 주요 특징  (0) 2024.02.05

 

/* 현재 리액트를 공부하고 있는 중인데, 개념을 한번 짚고 넘어가는 과정이 필요하겠다고 생각이 들었다.

본 포스팅에서는 리액트란 무엇이고 어떠한 특징이 있는지 간단히 정리해 보고, 추후 각 특징들에 대해서도 자세히 다뤄보고 싶다. */

 

리액트란?

리액트는 페이스북(현 메타)에서 개발한 javascript 라이브러리로, 사용자 인터페이스(UI) 개발을 위한 목적으로 주요 사용된다. 동적인 웹페이지 개발에 용이하여 소셜미디어, 이커머스 플랫폼 개발 등에 주로 사용된다. 따라서 우리가 평소에 주로 사용하는 쇼핑몰 페이지, SNS페이지 등 인터렉션이 많은 웹앱의 프론트엔드 개발에 많이 쓰인다. 


리액트의 주요 특징

1. 컴포넌트 기반 아키텍쳐

컴포넌트란 리액트로 만들어진 앱을 이루는 최소 단위이다. 리액트는 화면 UI를 개별 컴포넌트로 나누어 개발하는 컴포넌트 기반 아키텍처를 가진다. 이를 통해 각 컴포넌트는 자체적으로 상태(state)를 가질 수 있고 재사용이 가능하다. 

 

2. 가상 DOM

일반적으로 웹페이지는 아래와 같이 critical rendering path 의 순서로 로딩된다.

여기서 문제점은 어떤 인터렉션에 의해 DOM에 변화가 생기면 그때마다 render tree 생성부터의 과정이 반복되므로 작업 과정이 불필요하게 많아지게 된다는 것이다. 

 

이에 나오게 된 개념이 가상 돔(Virtual Dom)으로, 가상돔은 실제 돔을 메모리에 복사해 준 것으로 볼 수 있다. 리액트는 Virtual DOM 을 사용하여 성능을 최적화하고, 변경된 부분만 DOM에 적용하므로 렌더링 성능이 향상된다. 가상 돔에 대한 내용은 추후 더 자세히 다뤄보도록 하자.  

리액트의 virtual dom 개념

 

 

3. JSX 문법 사용

JSX는 자바스크립트의 확장 문법으로, 리액트에서는 JSX를 이용해 화면에서 보이는 UI를 작성한다. JSX를 이용하면 자바스크립트와 HTML구조를 같이 사용하여 UI를 나타낼 수 있으므로 더 직관적으로 코드를 작성할 수 있으며 이벤트 처리 등을 쉽게 구현할 수 있다. 

 

4. 단방향 데이터 흐름

데이터 바인딩이란 두 데이터 요소 간 동기화된 상태를 유지하는 개념을 말한다. 리액트는 단방향 데이터 바인딩으로 부모에서 자식으로 데이터를 전달하는 형식이다. State, props를 통해 상태 변화가 자동으로 UI에 반영되므로, 데이터의 흐름이 예측 가능하고 유지 보수가 쉬운 코드를 작성할 수 있다. 

 

5. 리액트 라우터

리액트는 웹 사이트의 전체 페이지를 하나의 페이지에 담아 동적으로 화면을 바꿔가며 표현하는 SPA(Single Page Application) 방식을 사용한다. 이때 React Router DOM 라이브러리를 사용하여 페이지 간 연결, 라우팅을 하고 페이지를 렌더링하게 된다. 이를 통해 페이지 로딩 없이 페이지에 필요한 컴포넌트를 렌더링하여 보여줄 수 있다. 


리액트의 주요 특징들을 간단히 정리해 보았다.

 

여기서 잠깐 질문, 그렇다면 리액트는 프레임워크일까 라이브러리일까?

 

프레임워크가 어떠한 앱을 만들기 위해 필요한 대부분의 것을 가지고 있는 것이라면, 라이브러리는 어떠한 특정한 기능을 모듈화 해놓은 것이라고 할 수 있다. 즉 특정 기능을 수행하기 위한 도구 모음이다. 리액트는 전적으로 UI를 렌더링하는 데 관여하므로 라이브러리이다. 화면을 바꾸는 라우팅(페이지 이동)은 react-router-dom 모듈을, 상태 관리를 위해서는 redux, mobx를, 빌드를 위해서는 webpack, npm을, 테스팅을 위해서는 Eslint, Mocha 등을 이용한다. 

 

따라서, 리액트는 SPA(Single Page Appliciation) 개발을 위한 컴포넌트 기반 아키텍처를 가진 라이브러리라고 할 수 있겠다. 

 

 

 

*Reference 

- 인프런: 따라하며 배우는 리액트 A-Z 교재

- https://ibaslogic.com/virtual-dom-react/

'React' 카테고리의 다른 글

React-Router-Dom  (1) 2024.02.05

+ Recent posts