Single Page Application 으로 한 개의 페이지로 구성된 애플리케이션입니다. 웹 애플리케이션에 필요한 모든 정적 리소스를 최초 한 번에 다운로드하고, 새로운 페이지 요청이 있을 때마다 갱신에 필요한 데이터만 전달 받아서 갱신합니다 이를 CSR(Clien Side Renderin)이라고 합니다.
🎀 검색 엔진 최적화?
- 검색엔진이 자료를 수집하기 좋도록 웹 페이지를 구성하는 것을 말합니다.
검색 로봇이 웹페이지에 있는 정보를 수집하고 분석해서 결괏 값에 인덱스를 만들어 보관하고 있다가 사용자가 검색어를 입력하면 보관하던 인덱스에서 검색어와 연관성이 높은 웹페이지들을 순서대로 보여주는 방식으로 작동합니다.- 검색 로봇은 자료를 수집할 때 URL, HTML내 각종 태그나 링크 등을 분석합니다.
🎀 SPA 방식이 모두 CSR인 것은 아닙니다.
Multiple Page Application 으로 여러 개의 페이지로 구성된 애플리케이션입니다. 새로운 페이지를 요청할 때마다 정적 리소스가 다운되고 매번 전체 페이지가 다시 렌더링 됩니다. 이를 SSR(Server Side Rendering)이라고 합니다.
SPA를 만들 때, 필요한 화면들 따라 '주소'도 달라집니다. 이 주소에 따라 다른 뷰를 보여주는 과정을 '라우팅'이라고 합니다. 리액트에서는 라우팅을 위해 React Router라는 라이브러리를 사용합니다.
라우터 역할을 하는 BrowserRouter, 경로를 매칭해 주는 Routes와 Route, 경로를 변경하는 역할을 하는 link 컴포넌트로 나뉩니다. 이 컴포넌트들을 사용하기위해 따로 불러와야 합니다.
#react App 설치하고 시작하기
npx create-react-app@latest 폴더명
cd 폴더명
npm start
#react-router 라이브러리 설치(버전과 설치폴더 주의)
npm install react-router-dom@^6.3.0
# 잘 설치되었다면, `package.json` 파일의 `dependencies`항목에 react-router-dom 라이브러리 등록을 확인 할 수 있다.
#컴포넌트를 꺼내오기 -> App.js 최상단에 세팅
import React form "react";
import { BrowserRouter, Routes, Route, Link } from "react-router-dom";
# 컴포넌트 만들기 -> Home을 예로 들어 만들어 봅니다.
function Home() {
return <h1>Home</h1>;
}
# 메뉴 만들기 -> 각 컴포넌트로 이동할 메뉴를 제작
function app () {
return (
<BrowserRouter> #페이지를 새로고침 하지 않고도 주소를 변경할 수 있게 해줍니다. 상위에 작성되어 있어야 사용할 수 있습니다.
<div>
<nav>
<ul>
<li>
Home
</li>
</ul>
</nav>
</div>
</BrowserRouter>
)
}
export default App;
# <BrowserRouter> 은 index.js에 넣어서 활용할 수도 있습니다.
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom';
#React Ver.18
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<BrowserRouter>
<App />
</BrowserRouter>
</React.StrictMode>
);
#React ver.17
ReactDOM.render(<BrowserRouter><App/></BrowserRouter>, document.querySelector('#root'));
function app () {
return (
<BrowserRouter> #페이지를 새로고침 하지 않고도 주소를 변경할 수 있게 해줍니다. 상위에 작성되어 있어야 사용할 수 있습니다.
<div>
<nav>
<ul>
<li>
Home
</li>
</ul>
</nav>
<Routes>
<Route Path = "/" element = {<Home />} />
</Routes>
</div>
</BrowserRouter>
)
}
export default App;
# 경로는 path로, 컴포넌트는 element로 연결해 줍니다.
# 지정되지 않은 주소로 접근할 시 보여줄 컴포넌트 속성으로는 path="*" 를 씁니다.
<a>
요소에 해당하지만, <a>
요소는 페이지 전환시 다시 불러오므로 처음부터 렌더링 시킵니다. <link>
는 페이지전환을 방지하는 기능이 내제되어 있어 SPA를 구현합니다.function app () {
return (
<BrowserRouter>
<div>
<nav>
<ul>
<li>
<Link to "/"> Home</Link>
# Link 컴포넌트로 경로를 연결합니다.
</li>
</ul>
</nav>
<Routes>
<Route Path = "/" element = {<Home />} />
# 경로는 path로 컴포넌트는 element로 연결해 줍니다.
</Routes>
</div>
</BrowserRouter>
)
}
export default App;
npm run start #구현을 확인합니다.