Unit5 - [React] React SPA

์˜ˆ์ง„ยท2022๋…„ 10์›” 1์ผ
0

๐Ÿ”ฅ React SPA

MPA(Multiple Page Application) : ํŽ˜์ด์ง€ ์ด๋™๋งˆ๋‹ค ์ „์ฒด HTML์„ ๋ฐ›์•„์˜ค๋Š” ๋ฐฉ์‹ (์˜ˆ์ „ ๋ฐฉ์‹)

SPA (Single Page Application)

: ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š๊ณ , ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ ๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›์•„ ๊ทธ ์ •๋ณด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ˜„์žฌ์˜ ํŽ˜์ด์ง€๋ฅผ ์—…๋ฐ์ดํŠธํ•จ์œผ๋กœ์จ ์‚ฌ์šฉ์ž์™€ ์†Œํ†ตํ•˜๋Š” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์›น ์‚ฌ์ดํŠธ

SPA ์žฅ์ 

  • ์ „์ฒด ํŽ˜์ด์ง€๊ฐ€ ์•„๋‹Œ ํ•„์š”ํ•œ ๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›์•„์„œ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž์™€ Interaction์— ๋น ๋ฅด๊ฒŒ ๋ฐ˜์‘
  • ์„œ๋ฒ„์—์„œ๋Š” ์š”์ฒญ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋งŒ ๋„˜๊ฒจ์ฃผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ๊ณผ๋ถ€ํ™” ๋ฌธ์ œ๊ฐ€ ํ˜„์ €ํžˆ ์ค„์–ด๋“ฌ
  • ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋ง ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋‚˜์€ UX ์ œ๊ณต

SPA ๋‹จ์ 

  • JavaScript ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์„œ, JavaScript ํŒŒ์ผ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์œผ๋กœ ์ธํ•ด ์ฒซ ํ™”๋ฉด ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง
  • ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”(SEO)๊ฐ€ ์ข‹์ง€ ์•Š์Œ
    (HTML ํŒŒ์ผ์€ ๋ณ„๋‹ค๋ฅธ ์ž๋ฃŒ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ ์—”์ง„์ด ์ ์ ˆํžˆ ๋™์ž‘ํ•˜์ง€ ๋ชปํ•จ, ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋‹จ์ ์€ ์ ์  ์‚ฌ๋ผ์ง€๊ณ  ์žˆ๋Š” ์ถ”์„ธ)

- ์™€์ด์–ดํ”„๋ ˆ์ž„(Wireframe)

: ์„ (wire)๋ฅผ ์ด์šฉํ•ด ์œค๊ณฝ์„ (frame)์„ ์žก๋Š” ๊ฒƒ => ์›น ํŽ˜์ด์ง€์˜ ๋ ˆ์ด์•„์›ƒ๊ณผ UI ์š”์†Œ ๋“ฑ์— ๋Œ€ํ•œ ๋ผˆ๋Œ€

- ๋ชฉ์—…(Mockup)

: ๋ฐ์Šคํฌ๋กญ, ์Šค๋งˆํŠธํฐ์˜ ํ”„๋ ˆ์ž„์„ ๋ง์”Œ์›Œ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋””์ž์ธ ํ•œ ๊ฒƒ
=> ๋ฐ๋ชจ ์‹œ์—ฐ, ํ‰๊ฐ€๋ฅผ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ๊ธฐ๋Šฅ๋งŒ ๋‹ด์€ ๋ชจํ˜•


๐Ÿ”ฅ React Router

React SPA์—์„œ ๋ผ์šฐํŒ…์„ ์œ„ํ•ด React Router๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ
๋ผ์šฐํŒ…(Routing) : ๋‹ค๋ฅธ ์ฃผ์†Œ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ทฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ณผ์ • => ๊ฒฝ๋กœ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ

  • react-router ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜
npm i react-router-dom

React Router ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  React Router ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ถˆ๋Ÿฌ์™€์•ผํ•จ

import { BrowserRouter, Routes, Route, Link } from "react-router-dom";

React Router ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ

<BrowserRouter> : ๋ผ์šฐํ„ฐ ์—ญํ• , ๊ฐ€์žฅ ์ƒ์œ„์— ์ž‘์„ฑ๋˜์–ด์•ผ ํ•จ

<Routes>, <Route> : ๊ฒฝ๋กœ ๋งค์นญ

- <Routes> : ์—ฌ๋Ÿฌ <Route> ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ์‹ธ์„œ ๊ทธ ์ค‘ ๊ฒฝ๋กœ๊ฐ€ ์ผ์น˜ํ•˜๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๋ผ์šฐํ„ฐ๋งŒ ๋ Œ๋”๋ง ์‹œ์ผœ์ฃผ๋Š” ์—ญํ• 
- <Route> : path ์†์„ฑ์„ ์ง€์ •ํ•˜์—ฌ ํ•ด๋‹น path์—์„œ ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณด์—ฌ์ค„์ง€ ์ •ํ•œ๋‹ค.

(ํŽ˜์ด์ง€ ์ „ํ™˜์„ ํ†ตํ•ด ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜์—ฌ HTML5 History API๋ฅผ ์ด์šฉํ•ด ํŽ˜์ด์ง€์˜ ์ฃผ์†Œ๋งŒ ๋ณ€๊ฒฝ)

ReactDOM์œผ๋กœ ๋ Œ๋”์‹œํ‚ค๊ฒŒ ๋˜๋ฉด <Link> ๊ฐ€ <a> ๋กœ ๋ฐ”๋€๋‹ค.

  • React Router์—์„œ <a>๊ฐ€ ์•„๋‹Œ <Link>๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 
    - <a>๋Š” ํŽ˜์ด์ง€๋ฅผ ์ „ํ™˜ํ•˜๋Š” ๊ณผ์ •์—์„œ ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ Œ๋”๋ง
    => ์ƒˆ๋กœ๊ณ ์นจ ํ˜„์ƒ ๋ฐœ์ƒ
    - <Link>๋Š” ํŽ˜์ด์ง€ ์ „ํ™˜์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด SPA ๊ตฌํ˜„ ๊ฐ€๋Šฅ

0๊ฐœ์˜ ๋Œ“๊ธ€