2 minute read

๐Ÿ”˜ย SPA

๐Ÿ‘‰ย SPA์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ

์ „ํ†ต์ ์ธ ์›น ์‚ฌ์ดํŠธ์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์›น ์‚ฌ์ดํŠธ ๋‚ด์˜ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ๋•Œ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ๋งค๋ฒˆ HTML ํŒŒ์ผ๋กœ ๋œ ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์™€์•ผ๋งŒ ํ–ˆ๋‹ค.

SPA๋Š” Menu์™€ Footer ๋“ฑ๊ณผ ๊ฐ™์ด ํŽ˜์ด์ง€ ์ „ํ™˜ ์ „ํ›„์— ์ค‘๋ณต๋˜๋Š” ๋ถ€๋ถ„์€ ์ƒˆ๋กœ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š๋Š”๋‹ค. ์ „ํ†ต์ ์ธ ์›น ์‚ฌ์ดํŠธ์—์„œ๋Š” โ€œํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ํ–‰์œ„โ€๋ฅผ ๋ณดํ†ต ๊นœ๋นก์ธ๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

์›น ์‚ฌ์ดํŠธ๊ฐ€ ๋ณด๋‹ค ๋ณต์žกํ•ด์ง€๊ณ  ์•ฑ์˜ ํ˜•ํƒœ๋ฅผ ๋„๋ฉด์„œ, ์‚ฌ์šฉ์ž์™€ ์„œ๋น„์Šค ์‚ฌ์ด์— ๋” ๋งŽ์€ ์ƒํ˜ธ์ž‘์šฉ์ด ์ผ์–ด๋‚˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋•Œ๋งˆ๋‹ค Header๋‚˜ Navigation Bar์™€ ๊ฐ™์ด ์ค‘๋ณต๋˜๋Š” ์š”์†Œ๋“ค์„ ๋งค๋ฒˆ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์ด ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€์™€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์˜ ์ €ํ•˜๋ฅผ ์•ผ๊ธฐํ–ˆ๋‹ค.

1990๋…„๋Œ€ ํ›„๋ฐ˜์— HTML ๋ฌธ์„œ ์ „์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์—…๋ฐ์ดํŠธ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›์•„, JavaScript๊ฐ€ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜์—ฌ HTML ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์ด ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค. 2000๋…„๋Œ€ ์ค‘๋ฐ˜๋ถ€ํ„ฐ ์ด๋Ÿฐ ๋ฐฉ์‹์ด ๋ณดํŽธํ™” ๋˜์—ˆ์œผ๋ฉฐ, ์ด๊ฒƒ์ด SPA(Single Page Application)์ด๋‹ค.

๐Ÿ‘‰ย SPA๋ž€?

๐Ÿ‘ย SPA์˜ ์žฅ์ 

  • ์ „์ฒด ํŽ˜์ด์ง€๊ฐ€ ์•„๋‹ˆ๋ผ ํ•„์š”ํ•œ ๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›์•„์„œ ํ™”๋ฉด์„ ์—…๋ฐ์ดํŠธ ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž์™€์˜ ์ธํ„ฐ๋ž™์…˜์— ๋น ๋ฅด๊ฒŒ ๋ฐ˜์‘ํ•œ๋‹ค.
  • ์„œ๋ฒ„์—์„œ๋Š” ์š”์ฒญ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋งŒ ๋„˜๊ฒจ์ฃผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ๊ณผ๋ถ€ํ•˜ ๋ฌธ์ œ๊ฐ€ ํ˜„์ €ํ•˜๊ฒŒ ์ค„์–ด๋“ ๋‹ค.
  • ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋ง ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋‚˜์€ ์œ ์ € ๊ฒฝํ—˜์„ ์ œ๊ณตํ•œ๋‹ค.
  • ๋Œ€ํ‘œ์ ์ธ SPA ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์„œ๋น„์Šค : Youtube, facebook, Gmail, aitbnb, Nexflix ๋“ฑ

๐Ÿ‘Žย SPA์˜ ๋‹จ์ 

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

โ“ย ๊ฒ€์ƒ‰ ์—”์ง„์˜ ์ž‘๋™ ๋ฐฉ์‹

๊ฒ€์ƒ‰ ๋กœ๋ด‡์ด ์›น ํŽ˜์ด์ง€์— ์žˆ๋Š” ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ถ„์„ํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์— ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ด€ํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€, ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ณด๊ด€ํ•˜๊ณ  ์žˆ๋˜ ์ธ๋ฑ์Šค์—์„œ ๊ฒ€์ƒ‰์–ด์™€ ๊ฐ€์žฅ ์—ฐ๊ด€์„ฑ์ด ๋†’์€ ์›น ํŽ˜์ด์ง€๋“ค์„ ์ˆ˜์„œ๋Œ€๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.

๊ฒ€์ƒ‰ ๋กœ๋ด‡์€ ์ž๋ฃŒ๋ฅผ ์ˆ˜์ง‘ํ•  ๋•Œ ์›น ํŽ˜์ด์ง€์˜ URL, HTML ๋ฌธ์„œ ๋‚ด์˜ ๊ฐ์ข… ํƒœ๊ทธ๋‚˜ ๋งํฌ ๋“ค์„ ๋ถ„์„ํ•˜๋Š”๋ฐ, SPA๋Š” HTML์ด ๊ฑฐ์˜ ๋น„์–ด์žˆ๋‹ค ๋ณด๋‹ˆ ๊ฒ€์ƒ‰ ๋กœ๋ด‡์ด ์ถฉ๋ถ„ํ•œ ์ž๋ฃŒ๋ฅผ ์ˆ˜์ง‘ํ•˜์ง€ ๋ชปํ•œ๋‹ค. ์ด ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”์— ๋Œ€ํ•œ ๋Œ€์‘์ฑ…์„ ๋”ฐ๋กœ ๋งˆ๋ จํ•ด์•ผ ํ•œ๊ณ , ๋”๋ถˆ์— ์•ฑ ์•ˆ์—์„œ ๋ธŒ๋ผ์šฐ์ €์˜ ์•ž์œผ๋กœ ๊ฐ€๊ธฐ/๋’ค๋กœ ๊ฐ€๊ธฐ ๋“ฑ์˜ ์ƒํƒœ๋„ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์˜ ๋ณต์žก๋„๊ฐ€ ๋”์šฑ ๋Š˜์–ด๋‚œ๋‹ค. (๋‹ค๋งŒ, SPA์—์„œ๋„ ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒ€์ƒ‰ ์—”์ง„์ด ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์–ด ์ด ๋‹จ์ ์€ ์ ์ฐจ ์‚ฌ๋ผ์ง€๊ณ  ์žˆ๋Š” ์ถ”์„ธ์ด๋‹ค.)

๐Ÿ”˜ย Routing & React Router

๐Ÿ‘‰ย Routing?

Twitter์™€ ๊ฐ™์€ SPA ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค ๋•Œ, ๋ฉ”์ธ ํŠธ์œ— ๋ชจ์Œ ํŽ˜์ด์ง€, ์•Œ๋ฆผ ํŽ˜์ด์ง€, ๋งˆ์ด ํŠธ์œ— ํŽ˜์ด์ง€ ๋“ฑ์˜ ํ™”๋ฉด์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค.

001

์ด ํ™”๋ฉด์— ๋”ฐ๋ผ ์ฃผ์†Œ๋„ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ **๋‹ค๋ฅธ ์ฃผ์†Œ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ทฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ณผ์ •์„ โ€œ๊ฒฝ๋กœ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝํ•œ๋‹ค.โ€๋ผ๋Š” ์˜๋ฏธ๋กœ ๋ผ์šฐํŒ…(Routing) ์ด๋ผ๊ณ  ํ•œ๋‹ค.

๐Ÿ‘‰ย React Router

002

ํ•˜์ง€๋งŒ React ์ž์ฒด์—๋Š” ์ด ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์ง€ ์•Š์•„ ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ์ฃผ์†Œ ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ทฐ๋ฅผ ๋ณด์—ฌ์ค˜์•ผ ํ•œ๋‹ค.

React SPA์—์„œ๋Š” ๋ผ์šฐํŒ…์„ ์œ„ํ•ด React Router๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

โ–ถ๏ธย React Router ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ

003

  • โ†’ ๋ผ์šฐํ„ฐ ์—ญํ• 
  • โ†’ ๊ฒฝ๋กœ ๋งค์นญ
  • โ†’ ๊ฒฝ๋กœ ๋งค์นญ
  • โ†’ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ

โ–ถ๏ธย React Router ์‚ฌ์šฉ

npm install react-router-dom@ ^6.3.0

  • App.js

import React from "react";

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

Leave a comment