๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ“บ Front End/- React, Next.js

[๋ฆฌ์•กํŠธ ๋ถ„์„ํ•˜๊ธฐ] ๋ฆฌ์•กํŠธ๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ผ์šฐํŒ… ํ•˜๋Š” ๋ฐฉ๋ฒ• (1) ๋ถ€์ œ :: Single Page Application์ด ๋ฌด์—‡์ด๊ณ  ์–ด๋–ป๊ฒŒ ๋ฆฌ์•กํŠธ์—์„œ ์‚ฌ์šฉํ• ๊นŒ?

by Wonit 2020. 7. 20.
์ด ๊ธ€์€ ๋ฆฌ์•กํŠธ์˜ ์ดˆ์‹ฌ์ž๋“ค์„ ์œ„ํ•œ ๊ธ€๋กœ ๊นŠ์€ ๋‚ด์šฉ์€ ์ตœ๋Œ€ํ•œ ๋ฐฐ์ œํ•˜๊ณ  ์‰ฌ์šด ๊ฐœ๋…์— ๋Œ€ํ•ด ์ž‘์„ฑํ•˜์˜€๊ณ , ๋ฆฌ์•กํŠธ์˜ ์ง„์ž… ์žฅ๋ฒ…์„ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•œ ์š”์†Œ๋กœ ์–ด๋ ค์šด ๋‚ด์šฉ์ด ์ƒ๋žต๋˜์–ด ์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ถ€๋ถ„์€ ๊ฝค๋‚˜ ํ•ต์‹ฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— 3๋ถ€์ž‘์œผ๋กœ ๋‚˜๋ˆ ์„œ ์„ค๋ช…ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. ํ•ด๋‹น ๊ธ€์— ๋Œ€ํ•ด์„œ ๋ณธ์ธ์ด ์ด ๋ถ€๋ถ„์€ ๋„˜์–ด๊ฐ€๋„ ๋˜๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ถ€๋ถ„์€ ๋„˜์–ด๊ฐ€์„œ ํ™•์ธํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๊ธธ์ง€ ์•Š์€ ๊ธ€์ด๋ฏ€๋กœ ๊ฐ€๋ณ๊ฒŒ ์ฝ๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค.

  1. 1๋ถ€ ๋ฆฌ์•กํŠธ๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ผ์šฐํŒ… ํ•˜๋Š” ๋ฐฉ๋ฒ•
  2. 2๋ถ€ Broswer History API๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŽ˜์ด์ง€ ๋ผ์šฐํŒ… ํ•˜๊ธฐ
  3. 3๋ถ€ react-router-dom์„ ์ด์šฉํ•ด์„œ ํŽ˜์ด์ง€ ๋ผ์šฐํŒ… ํ•˜๊ธฐ

์ด๋ฒˆ ์ฃผ์ œ์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„  ์šฐ์„  ํŽ˜์ด์ง€๊ฐ€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š”์ง€ ์•Œ์•„์•ผ ํ•œ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์›น ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด ์ง„๋‹ค.

  • ์ตœ์ดˆ์— ์‚ฌ์šฉ์ž๊ฐ€ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์š”์ฒญ
  • ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‘๋‹ต.
  • ์‚ฌ์šฉ์ž๋Š” ์„œ๋ฒ„์—์„œ ๋ฐ˜ํ™˜๋œ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐ›์•„์„œ ํŠน์ • ์„œ๋น„์Šค ์š”์ฒญ
  • ์„œ๋ฒ„๋Š” ๋˜ ํŠน์ • ์„œ๋น„์Šค๋ฅผ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋กœ ์‘๋‹ต.

์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ธ ์›น ์„œ๋น„์Šค์˜ ์ ˆ์ฐจ์ด๋‹ค.

์ด๋ฅผ Multi Page Application ์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋Š” ์„œ๋น„์Šค์— ๋”ฐ๋ฅธ ์„œ๋น„์Šค ํŽ˜์ด์ง€๊ฐ€ ํƒ„์ƒํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋œปํ•œ๋‹ค.

ํ•˜์ง€๋งŒ React๋Š” ์ด๋Ÿฐ ๋ฐฉ์‹์„ ๊ถŒ์žฅํ•˜์งˆ ์•Š๋Š”๋‹ค.

๊ทธ๋Ÿผ ๋ฆฌ์•กํŠธ๋Š” ์–ด๋–ค ๋ฐฉ์‹์„ ๊ถŒ์žฅํ• ๊นŒ?

๋ฆฌ์•กํŠธ๋Š” SPA ๋ผ๊ณ  ํ•˜๋Š” Single Page Application์„ ๊ถŒ์žฅํ•œ๋‹ค.

MPA vs SPA

Multi page Application ๊ณผ Single Page Application์„ ๋น„๊ตํ•˜์—ฌ ๊ทธ๋ฆผ์œผ๋กœ ๋ณด์—ฌ์ฃผ์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์œ„์˜ SPA์—์„œ๋Š” ํ•„์š”์‹œ์—๋Š” Data๋ฅผ ์š”์ฒญํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋‚˜๋จธ์ง€ ์ •๋ณด๋“ค์„ ํŽ˜์ด์ง€ ์ž์ฒด๋ผ์šฐํŒ…์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด์„œ๋Š”๋ธŒ๋ผ์šฐ์ € ํžˆ์Šคํ† ๋ฆฌ API๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์„ฑํ•ด๊ฑฐ๋‚˜ ๋˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ์‹์„ ์ด์šฉํ•˜๋Š”๋ฐ ์ด๋Ÿฐ SPA๋ฅผ React์—์„œ๋Š” ํฌ๊ฒŒ 2๊ฐ€์ง€ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ธŒ๋ผ์šฐ์ € ํžˆ์Šคํ† ๋ฆฌ API
  • react-route-dom ๋ฐฉ์‹

์ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์„ ๋ชจ๋‘ ์•Œ์•„๋ณผ ๊ฒƒ์ธ๋ฐ ์ผ๋‹จ SPA์— ๋Œ€ํ•ด์„œ ๋จผ์ € ํ™•์ธํ•ด๋ณด์ž.

Single Page Application

SPA๋Š” ํŽ˜์ด์ง€๋Š” ์ตœ์ดˆ์— 1ํšŒ๋งŒ ๋กœ๋“œ๋˜๊ณ  ๋‹ค๋ฅธ ์ •๋ณด๋ฅผ ์š”์ฒญํ•  ๋•Œ ํŽ˜์ด์ง€ ์ „์ฒด๊ฐ€ ๋กœ๋“œ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ผ๋ถ€๋ถ„๋งŒ ๋กœ๋“œ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

์ด๋ฅผ ๋‹ค๋ฅธ ๋ง๋กœ ํ•˜๋ฉด ์ตœ์ดˆ ์š”์ฒญ์‹œ ์„œ๋ฒ„์—์„œ ๊ฒฐ๊ณผ๋ฅผ ๋กœ๋“œํ•˜๊ณ , ๋‹ค๋ฅธ ์ •๋ณด๋“ค์€ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ผ์šฐํŒ…ํ•œ๋‹ค๊ณ ๋„ ํ•œ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ create-react-app์œผ๋กœ ๋งŒ๋“ค์—ˆ๋˜ app.js์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด SPA๋ฅผ ์ž ๊น ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„์— componentDidMount๋Š” ๋ฌด์‹œํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๋ด๋ณด์ž. ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด onpopstate๋Š” ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์— ์žˆ๋Š” ์Šคํƒ์—์„œ ํŽ˜์ด์ง€๋ฅผ ๋นผ์˜จ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

๋ฒ„ํŠผ์„ ํด๋ฆญ๋‹จ๋‹ค๋ฉด page1์œผ๋กœ ๋กœ๋“œํ•˜๊ณ  ๋‹ค๋ฅธ ๋ฒ„ํŠผ์—๋Š” page2๋กœ ๋กœ๋“œํ•˜๊ฒŒ ํ•œ๋‹ค.

๊ทธ๋Ÿผ ๊ฒฐ๊ณผ ํ™”๋ฉด์ด

์ด์™€ ๊ฐ™์ด localhost:3000/์œผ๋กœ ๋“ค์–ด์˜ค๊ฒŒ ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ page1 ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด url์ด

์ด์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ๋˜๊ณ  ์ƒˆ๋กญ๊ฒŒ ํŽ˜์ด์ง€๋Š” ๋กœ๋“œ๋˜์ง€ ์•Š๋Š”๋‹ค.


์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜๊ฒŒ SPA๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋‹ค.

๋‹ค์Œ ์‹œ๊ฐ„์—๋Š” ์ œ๋Œ€๋กœ ๋ธŒ๋ผ์šฐ์ € ํžˆ์Šคํ† ๋ฆฌ ๋ฐฉ์‹์„ ๊ตฌ์„ฑํ•ด๋ณด๊ณ  react-route-dom๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด์„œ ๋ผ์šฐํŒ…์„ ํ•ด๋ณด์ž.

'๐Ÿ“บ Front End > - React, Next.js' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฆฌ์•กํŠธ ๋ถ„์„ํ•˜๊ธฐ] ๋ฆฌ์•กํŠธ๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ผ์šฐํŒ… ํ•˜๋Š” ๋ฐฉ๋ฒ• (3) ๋ถ€์ œ :: react-router-dom์„ ์ด์šฉํ•ด์„œ ํŽ˜์ด์ง€ ๋ผ์šฐํŒ… ํ•˜๊ธฐ  (0) 2020.07.20
[๋ฆฌ์•กํŠธ ๋ถ„์„ํ•˜๊ธฐ] ๋ฆฌ์•กํŠธ๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ผ์šฐํŒ… ํ•˜๋Š” ๋ฐฉ๋ฒ• (2) ๋ถ€์ œ :: Broswer History API๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŽ˜์ด์ง€ ๋ผ์šฐํŒ… ํ•˜๊ธฐ  (0) 2020.07.20
[๋ฆฌ์•กํŠธ ๋ถ„์„ํ•˜๊ธฐ] ๋ฆฌ์•กํŠธ์˜ ํ•ต์‹ฌ JSX์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. (๋ถ€์ œ :: ๋ฆฌ์•กํŠธ์—์„œ๋Š” JSX๋ฅผ ์–ด๋–ป๊ฒŒ ์ด์šฉํ• ๊นŒ?)  (0) 2020.07.20
[๋ฆฌ์•กํŠธ ๋ถ„์„ํ•˜๊ธฐ] Create-React-App์œผ๋กœ ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•ด๋ณด์ž.  (0) 2020.07.20
[๋ฆฌ์•กํŠธ ๋ถ„์„ํ•˜๊ธฐ] React๋ฅผ ๋ถ„์„ํ•ด๋ณด์ž. (๋ถ€์ œ :: create-react-app์— ๋Œ€ํ•ด ๋ถ„์„ํ•ด๋ณด์ž)  (0) 2020.07.19

๋Œ“๊ธ€