๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

201112

ยท ์•ฝ 4๋ถ„

SSR and Next.js#

์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)์ด๋ž€ ์„œ๋ฒ„์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์„œ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

2020-11-11-201112-image-0

๋‹ค์Œ์˜ ์žฅ์ ์„ ๊ฐ€์ง„๋‹ค.

  • ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”(SEO)

  • ๋น ๋ฅธ ์ฒซ ํŽ˜์ด์ง€ ๋ Œ๋”๋ง

์งง์€ ํžˆ์Šคํ† ๋ฆฌ#

  • (AJAX๊ฐ€ ์—†๋˜ ์‹œ์ ˆ) ์„œ๋ฒ„์—์„œ ์ „์ฒด HTML์„ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹

  • AJAX์˜ ๋“ฑ์žฅ

    • ๋น„๋™๊ธฐ์ ์œผ๋กœ ์„œ๋ฒ„์™€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•˜์—ฌ ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜์ง€ ์•Š๊ณ , ๊ฐฑ์‹ ์ด ํ•„์š”ํ•œ ์ผ๋ถ€๋งŒ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ.

    • ๋™์ ์œผ๋กœ HTML์„ ๋งŒ๋“ค๋ฉด์„œ JavaScript์˜ ์—ญํ• ์ด ๋Š˜์–ด๋‚˜๊ฒŒ ๋จ.

  • SPA๋กœ..

  • JavaScript MVC Framework์˜ ๋“ฑ์žฅ

    • Backbone.js, Ember, Knockout ...

    • MVC Framework์˜ ๋ํŒ์™• AngularJS

  • React์˜ ๋“ฑ์žฅ

    • Virtual DOM์„ ์ด์šฉ

    • Flux ์•„ํ‚คํ…์ณ

    • ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ์ง€์›

      • (๋ฐฐ๊ฒฝ) V8 ์—”์ง„, Node.js ๋“ฑ์œผ๋กœ ์„œ๋ฒ„์—์„œ๋„ JS ๊ธฐ๋ฐ˜์˜ ํด๋ผ์ด์–ธํŠธ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Œ

์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์€ ๋‘ ๋ฒˆ ๋ Œ๋”๋ง ํ•œ๋‹ค. ์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ ์ƒ์„ฑ๋œ HTML์—๋Š” ์ด๋ฒคํŠธ ์†์„ฑ์ด ์—†๋‹ค. ๋‘ ๋ฒˆ์งธ ๋ Œ๋”๋งํ•  ๋•Œ ์ด๋ฏธ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์ด ๋˜์–ด ์žˆ๋‹ค๋ฉด, ์ƒ์„ฑ๋œ DOM์— ์˜ค์ง ์ด๋ฒคํŠธ ์†์„ฑ๋งŒ ์ถ”๊ฐ€ํ•œ๋‹ค.

์™œ React์™€ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์ธ๊ฐ€?

๋ฆฌ์•กํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง#

  • renderToString : ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ HTML์— DOM์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

  • hydrate : ๋” ์š”์†Œ์— ํ•„์š”ํ•œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค.

๐Ÿ“Œ ๋‚˜์ค‘์— ์ง์ ‘ ํ•ด๋ด์•ผ๊ฒ ๋‹ค..!

Next.js#

Next๋Š” ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์— ํŠนํ™”๋œ ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค.

  • ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์˜ ์žฅ์ 

    • SEO

    • ์ดˆ๊ธฐ ๋กœ๋”ฉ ์„ฑ๋Šฅ ๊ฐœ์„ 

  • ์ด๋ฏธ์ง€ ๋ฆฌ์†Œ์Šค ์ตœ์ ํ™”

  • ์ •์  ํŒŒ์ผ ์„œ๋น™

    • ๋ฐฐ๋„ˆ ์ด๋ฏธ์ง€, ์•„์ด์ฝ˜ ๋“ฑ๋“ฑ์—์„œ ์‚ฌ์šฉํ•จ
  • ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ… ์ž๋™ํ™”

  • ์›นํŒฉ ๊ธฐ๋ฐ˜ ํ™˜๊ฒฝ (create-react-app๊ณผ ๋‹ฌ๋ฆฌ ์›นํŒฉ ์„ค์ • ๋ณ€๊ฒฝ์ด ์‰ฝ๋‹ค.)

์„œ๋ฒ„์—์„œ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌํ•˜๊ธฐ#

  • getInitialProps : ๊ตฌ๋ฒ„์ „์—์„œ ์‚ฌ์šฉํ•œ data fetching ๋ฐฉ์‹

  • getStaticProps : ๋นŒ๋“œ ์‹œ ๊ณ ์ •๋˜๋Š” ๊ฐ’์œผ๋กœ ๋นŒ๋“œ ์ดํ›„์—๋Š” ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

    • static data๋ฅผ ์œ„ํ•ด (๋ณ€๊ฒฝ๋˜์ง€ ์•Š์„ ๋ฐ์ดํ„ฐ. ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ ๋“ฑ๋“ฑ ...)
  • getServerSideProps : ๋นŒ๋“œ์™€ ์ƒ๊ด€์—†์ด ๋งค ์š”์ฒญ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜จ๋‹ค.

    • ๋งค๋ฒˆ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•ด (์ƒํ’ˆ ๋ชฉ๋ก. ์‹ค์‹œ๊ฐ„ ๋‰ด์Šค ๋“ฑ๋“ฑ ...)
  • getStaticPaths : ๋นŒ๋“œ ํƒ€์ž„ ๋•Œ ์ •์ ์œผ๋กœ ๋ Œ๋”๋งํ•  ๊ฒฝ๋กœ ์„ค์ •.