프라이D
프라이Develog(❁´◡`❁)
프라이D
전체 방문자
오늘
어제
  • ALL (378)
    • TDD, Cleancode with JavaScr.. (5)
    • 프로젝트 (32)
      • work (3)
      • 직접 만드는 기술 블로그 (2)
      • 데일리 옥션 (19)
      • 모락모락 (8)
    • Computer Science (1)
    • Algorithm & 자료구조 (94)
      • 알고리즘 w.JavaScript (53)
      • 자료구조 (5)
      • (인프런) 자바스크립트 알고리즘 문제풀이 (34)
    • JavaScript (45)
      • JavaScript (41)
      • 모던 자바스크립트 Deep Dive (4)
    • WEB (13)
    • 회고 (12)
    • TIL (109)
    • WIL (7)
    • Stacks (20)
      • React.js (6)
      • Next.js (1)
      • Redux (3)
      • Node.js (2)
      • GIT (2)
      • SAP (1)
    • 15일 메이킹 프로젝트 (15)
    • 이전 기록 (14)
    • ETC. (5)
    • ---------------2021 (6)
      • 내일배움단-웹개발 5주 (2)
      • 정보처리기사 (4)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 코드스테이츠
  • 내일배움카드
  • 모던자바스크립트딥다이브
  • Til
  • 내일배움단
  • vanilaJS
  • 자바스크립트
  • 알고리즘
  • nomadcoder
  • MySQL
  • JavaScript
  • 2023 인프콘 후기
  • 자바스크립트비트마스크
  • 비트마스크
  • 자바스크립트알고리즘
  • 스파르타코딩클럽
  • 투포인터알고리즘
  • 코딩프로젝트
  • nomadcoders
  • 국비지원

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
프라이D

프라이Develog(❁´◡`❁)

[React] SPA 는 무엇인가? / React Router 활용하기
Stacks/React.js

[React] SPA 는 무엇인가? / React Router 활용하기

2022. 8. 1. 11:48

SPA 란 무엇인가? 

  • 기존에는 웹페이지를 미리 준비해두었다가, 로딩할 때 새 페이지를 서버 측에서 전달받아와 렌더링을 했었는데 규모가 커지고 사용자와의 상호작용이 많아짐에 따라서 속도 저하의 문제가 발생했다. 이를 해결하기 위한 것이 SPA Single-Page Application이다. 
  • SPA는 페이지 전체가 아닌 바뀔 부분, 필요한 부분만 로딩한다. Header 나 Nav처럼 중복되는 요소들을 매번 불러오는 것은 불필요한 트래픽의 증가, 즉 자원의 낭비이다. 느린 반응성 때문에 쾌적한 사용자 경험을 제공하기가 어렵다. 
  • 정리하자면 필요한 데이터만 받아와서 부분을 업데이트 하는 방식으로 작동하는 웹 애플리케이션, 웹사이트를 SPA라고 한다. 

SPA의 단점

  • 첫 화면의 로딩 시간이 다소 길다는 단점이 있다. HTML은 거의 비어있는데, 대부분의 코드가 자바스크립트에 들어가 있기 때문에 이로 인해서 초기에 로딩되는 시간이 길다.
  • 또한 검색엔진 최적화에 좋지 않다. 검색엔진이 리액트로만 이루어진 웹사이트를 분석하기 어려운데 그 이유는 앞서 설명한바와 같이 HTML 내에는 거의 정보가 없기 때문에 여기서 충분한 정보를 얻지 못해서이다. 다만 검색엔진이 발전하고 있어 이런 단점은 사라진느 추세이다.

컴포넌트를 어떻게 설계해야 하는가? 

  • 리액트는 컴포넌트 기반 개발 방식을 사용한다. 따라서 페이지를 먼저 만들기 보다, 어떤 컴포넌트들을 만들고 이들을 어떻게 조합할지부터 구상해야한다. 
  • 각 컴포넌트가 고유의 기능을 갖는 독립적인 존재는 맞지만, 그 안에서 다뤄지는 데이터들은 컴포넌트들끼리 유기적으로 주고받을 수 있도록 설계하여야 한다!

리액트 라우터?

  • 리액트 SPA 에서는 경로에 따라 다른 뷰를 보여줄 수 있다. 즉 라우팅에 따라서 다른 뷰를 보여줄 수 있고, 이 때 사용하는 라이브러리가 React Router 이다. 
  • 라우팅이란 다른 주소에 따라 다른 뷰를 보여주는 과정이다. 라우팅이라는 이름처럼 경로에 따라서 변한다는 의미이다. SPA 라고 하더라도 각각 다른 페이지 뷰를 가지고 있는데, 이 화면들에 주소를 부여하고 경로를 변경하여 다르게 표시할 수 있다. 

React Router 라이브러리

  • 크게 세가지 부분으로 구분할 수 있다.
  • 라우터 역할을 하는 BrowserRouter : 컴포넌트의 최상위에 작성되어 React Router의 컴포넌트를 활용할 수 있도록 한다. 
  • 경로를 매칭해주는 Routes와 Route
    : Routes 컴포넌트 안에 Route 컴포넌트들을 작성한다. Routes 컴포넌트가 경로가 일치하는 하나의 Route만 렌더링한다. Route 컴포넌트 안에는 path 속성과 element 속성이 존재하는데, 이것이 경로와 그 경로에 일치하는 컴포넌트를 의미한다.
  • 경로를 변경해주는 Link
    : a 태그와 비슷한 역할을 하는 Link 컴포넌트 즉, 누르면 화면(경로)를 변경시키는 역학을 해준다. Link 내의 to 속성에 알맞은 경로를 위치시켜 이동시킬 수 있도록 한다.
    a 요소는 페이지 전환시 처음부터 렌더링을 시키는 새로고침 현상이 있지만, Link 컴포넌트에는 페이지 전환을 방지하는 기능이 내장되어 있다. 따라서 SPA 구현에 적합하다.

 

  • 먼저 라이브러리 사용을 위해서 각 컴포넌트를 불러온다. 
import React from 'react';
import {BrowserRouter, Routes, Route, Link} from 'react-router-dom';
  • 경로에 따라 다르게 표시될 컴포넌트 (화면)을 작성한다.
// Home 컴포넌트
const Home = () => {
  return <h1>Home</h1>;
};

// MyPage 컴포넌트
const MyPage = () => {
  return <h1>MyPage</h1>;
};

// Dashboard 컴포넌트
const Dashboard = () => {
  return <h1>Dashboard</h1>;
};

// 잘못된 경로 표시
const NotRightPath = () => {
  return <h1>경로를 확인하세요!</h1>;
};

 

  • 각 컴포넌트로 이동시킬 메뉴 컴포넌트를 작성한다. 이 때 Router 컴포넌트들을 아래와 같이 위치시킨다. 
const SimpleRoute = () => {
  return (
    <BrowserRouter>
      <div>
        <nav>
          <ul>
            <li>
              <Link to="/">Home</Link>
            </li>
            <li>
              <Link to="/mypage">MyPage</Link>
            </li>
            <li>
              <Link to="/dashboard">Dashboard</Link>
            </li>
          </ul>
        </nav>
      </div>

      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/mypage" element={<MyPage />} />
        <Route path="/dashboard" element={<Dashboard />} />
        <Route path="*" element={<NotRightPath />} />
      </Routes>
    </BrowserRouter>
  );
};

export default SimpleRoute;

 

저작자표시 (새창열림)

'Stacks > React.js' 카테고리의 다른 글

[React] Hooks의 동작 원리 파악하기 (useEffect 를 중심으로)  (0) 2023.04.12
React Hook Form  (0) 2022.09.27
[React] UseEffect로 fetch API 요청하기  (0) 2022.08.08
[React] 리액트 Props 와 State 를 알아보자!  (0) 2022.08.02
[React] 리액트는 무엇이고, 왜 리액트를 사용해야 하는가?  (0) 2022.07.20
    'Stacks/React.js' 카테고리의 다른 글
    • React Hook Form
    • [React] UseEffect로 fetch API 요청하기
    • [React] 리액트 Props 와 State 를 알아보자!
    • [React] 리액트는 무엇이고, 왜 리액트를 사용해야 하는가?
    프라이D
    프라이D
    틀린내용 정정 및 개선사항은 언제든지 댓글 달아주세요 :D

    티스토리툴바