๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’๊ณต๋ถ€/ํฐ ๋ฐœ๊ฒฌ

ํ”„๋ก ํŠธ์—”๋“œ์˜ SPA์™€ SSR

by rindev 2020. 11. 8.

 

SPA๋Š” ๋ณธ์ ์ด ์žˆ๋Š”๋ฐ SSR์ด๋ผ๋Š” ๋ง์€ ์ดˆ๋ฉด์ธ๊ฒƒ๊ฐ™์•„์„œ...

์ฐพ์•„๋ณด๋‹ค๊ฐ€ ๊นŒ๋จน๊ธฐ์ „์— ์ •๋ฆฌํ•ด๋‘”๋‹ค!


1. CSR (Client Side Rendering)

  • ํด๋ผ์ด์–ธํŠธ์—์„œ js๋ฅผ ํ†ตํ•ด ๋ Œ๋”๋ง ํ•˜๋Š” ๋ฐฉ์‹
  • SPAํ˜•์‹์˜ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋ก ํŠธ์—”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Vue, React...)๊ฐ€ CRS๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค์–ด์ง
  • ์ดˆ๊ธฐ ๋ Œ๋”๋ง ์‹œ๊ฐ„ ๋ฌธ์ œ, SEO๋ฌธ์ œ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋™์  ์ƒ์„ฑ์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด SSRํ”„๋ ˆ์ž„์›Œํฌ(Next.js, Nuxt.js...)๋ฅผ ๋ณด์œ ํ•˜๊ณ ์žˆ์Œ

1-1. SPA (Single Page Application)

  • Client Side Rendering(Client Side Navigation)๋ฐฉ์‹
  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ๋ช…์ฃผ๊ธฐ์ค‘์—์„œ ํ•œ๋ฒˆ๋งŒ ๋ฆฌ์†Œ์Šค๋ฅผ ๋กœ๋”ฉํ•˜๊ณ , ๊ทธ ํ›„์—๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ๋•Œ์—๋งŒ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•จ
  • ์ฒ˜์Œ ์š”์ฒญ์‹œ ๋”ฑ ํ•œ๋ฒˆ ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ , ํŽ˜์ด์ง€๋ฅผ ์ด๋™ ํ•  ๊ฒฝ์šฐ ๊ธฐ์กด ํŽ˜์ด์ง€ ๋‚ด๋ถ€๋ฅผ ์ˆ˜์ •ํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹
  • ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๊ฐฑ์‹ ํ•˜๊ธฐ์— ์ž์—ฐ์Šค๋Ÿฌ์šด ํŽ˜์ด์ง€ ์ด๋™์ด ๊ฐ€๋Šฅํ•จ
  • React, Vue ๋“ฑ์ด ๋‚˜์˜ค๋ฉด์„œ ๋Œ€์œ ํ–‰!

2. SSR (Server Side Rendering)

  • ์ „ํ†ต์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฉ์‹
  • ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•จ
  • ๋ชจ๋“  ํ…œํ”Œ๋ฆฟ์€ ์„œ๋ฒ„ ์—ฐ์‚ฐ์„ ํ†ตํ•˜์—ฌ ๋ Œ๋”๋งํ•˜๊ณ , ์™„์„ฑ๋œ ํŽ˜์ด์ง€ ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์คŒ
  • ์›น์—์„œ ์ •๋ณด์™€ ๊ธฐ๋Šฅ์ด ๋งŽ์•„์ง€๋ฉด์„œ spa ๊ฐœ๋…์ด ์ƒ๊ฒผ๋‹ค๊ณ ํ•จ.

2-1. MPA (Multiple Page Application)

  • ํ”„๋ก ํŠธ์™€ ๋ฐฑ์ด ๊ฐ•ํ•˜๊ฒŒ! ๊ฒฐํ•ฉ ๋ผ์žˆ์Œ
  • AJAX๋กœ ๋ถ€๋ถ„์  ์ƒˆ๋กœ๊ณ ์นจ์„ ํ†ตํ•ด ๋‹จ์ ์„ ๋ณด์™„ํ•˜๋Š” ๋“ฏ ํ–ˆ์œผ๋‚˜... ์•„์ง ๋ถ€์กฑํ•˜๋‹ค๋Š” ์˜๊ฒฌ์ด ๋งŽ์•˜๋‹ค๊ณ  ํ•œ๋‹ค

  ๐Ÿ‘์žฅ์  ๐Ÿ‘Ž๋‹จ์ 
SPA - ์ž์—ฐ์Šค๋Ÿฌ์šด ํ™”๋ฉด
- ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋งŒ ๋ถ€๋ถ„์ ์œผ๋กœ ๋กœ๋”ฉ ๊ฐ€๋Šฅ
- ์„œ๋ฒ„์˜ ํ…œํ”Œ๋ฆฟ์—ฐ์‚ฐ์„ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ถ„์‚ฐ
- ์ปดํฌ๋„ŒํŠธ๋ณ„๋กœ ๊ฐœ๋ฐœ์ด ์šฉ์ด
- ๋ชจ๋ฐ”์ผ์•ฑ ๊ฐœ๋ฐœ์‹œ ๋™์ผํ•œ API ์‚ฌ์šฉ ๊ฐ€๋Šฅ
- JSํŒŒ์ผ์„ ํ•œ๋ฒˆ์— ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ๊ตฌ๋™์†๋„ ๋Š๋ฆผ (webpack์˜ code splitting์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค ํ•จ)

- ๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”(SEO)๊ฐ€ ์–ด๋ ค์›€

-๋ณด์•ˆ ๋ฌธ์ œ์ 
SSR - ๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”!!!!!
(๊ฒ€์ƒ‰ ๋กœ๋ด‡์ด ํŽ˜์ด์ง€๋ฅผ ํฌ๋กค๋งํ•˜๊ธฐ์— ๋งค์šฐ ์ข‹๋‹ค๊ณ )

- ๋ทฐ๋ฅผ ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋งํ•˜์—ฌ ๊ฐ€์ ธ์˜ค๋ฏ€๋กœ ์ฒซ ๋กœ๋”ฉ์ด ๋งค์šฐ ์งง์Œ
- ํ™”๋ฉด์ด ๊นœ๋นก์ž„
- ํŽ˜์ด์ง€ ์ด๋™ ์‹œ ์ค‘๋ณต ํ…œํ”Œ๋ฆฟ๋„ ๊ณ„์† ๋ฐ›์•„์ค˜์•ผ ํ•จ
- ์„œ๋ฒ„ ๋ Œ๋”๋ง์— ๋”ฐ๋ฅธ ๋ถ€ํ•˜
- ๋ชจ๋ฐ”์ผ์•ฑ ๊ฐœ๋ฐœ ์‹œ ์ถ”๊ฐ€์ ์ธ ๋ฐฑ์—”๋“œ ์ž‘์—… ์š”๊ตฌ

 

ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ฐ๊ฐ์˜ ์žฅ๋‹จ์ ์„ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜์—ฌ ์„ž์–ด ์“ฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๊ณ !

์œ„์—๋„ ๋งํ–ˆ๋“ฏ์ด React → Next.js, GatsbyJS / Vue Nuxt.js ๋“ฑ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€

SPA์—์„œ SEO๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค๊ณ  ํ•œ๋‹ค. 

 

๊ทผ๋ฐ ๊ทธ๋ž˜์„œ SEO๊ฐ€ ๋ญ”์ง€์— ๋Œ€ํ•œ ๊ถ๊ธˆ์ฆ์ด ๋˜ ์ƒ๊ฒผ๋‹ค๐Ÿ˜ญ

 

SEO (Search Engine Optimization, ๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”)

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

 

 

๋Œ“๊ธ€