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

"Frontend" ํƒœ๊ทธ๋กœ ์—ฐ๊ฒฐ๋œ 2๊ฐœ ๊ฒŒ์‹œ๋ฌผ๊ฐœ์˜ ๊ฒŒ์‹œ๋ฌผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ํƒœ๊ทธ ๋ณด๊ธฐ

ยท ์•ฝ 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 : ๋นŒ๋“œ ํƒ€์ž„ ๋•Œ ์ •์ ์œผ๋กœ ๋ Œ๋”๋งํ•  ๊ฒฝ๋กœ ์„ค์ •.


ยท ์•ฝ 2๋ถ„

CSS#

  • @import : ๋‹ค๋ฅธ ์Šคํƒ€์ผ ์‹œํŠธ์—์„œ ์Šคํƒ€์ผ ๊ทœ์น™์„ ๊ฐ€์ ธ์˜ด

  • ์‚ฌ์šฉ์ž ์ง€์ • CSS ์†์„ฑ(CSS ๋ณ€์ˆ˜, ์ข…์† ๋ณ€์ˆ˜)

    • ์„ ์–ธ
    element {    --main-bg-color: brown;}
    • ์‚ฌ์šฉ
    element {    background-color: var(--main-bg-color);}

ํ•˜์œ„ ํ˜ธํ™˜์„ฑ ๋ฐ ํ”„๋ก ํŠธ์—”๋“œ ๋นŒ๋“œ#

Can I use... Support tables for HTML5, CSS3, etc

ECMAScript 6 compatibility table

  • transpilling์„ ํ†ตํ•ด์„œ ํ•˜์œ„ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ๋™์ž‘ํ•˜๊ฒŒ ๋ฌธ๋ฒ•์„ ๋ฐ”๊พผ๋‹ค.

  • polyfill์„ ํ†ตํ•ด์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” native API๋ฅผ ๋‹ค๋ฅธ ์ฝ”๋“œ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ํ•œ๋‹ค.


  • npm init -y : npm init -โ€”yes ๋กœ npm init ์‹œ์— ๋‚˜์˜ค๋Š” ์„ค์ •์— ๋ชจ๋‘ yes๋กœ์ƒ๋žตํ•˜์—ฌ ์ง„ํ–‰ํ•จ

  • --save-devย is used to save the package for development purpose. Example: unit tests, minification..

  • --saveย is used to save the package required for the application to run.

babel#

ํ•˜์œ„ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง€์›๊ฐ€๋Šฅํ•˜๋„๋ก transpiling

Webpack#

๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ


JavaScript modules


var path = require('path');
module.exports = {    mode: 'none',    entry: './index.js',    output: {        filename: 'bundle.js',        path: path.resolve(__dirname, 'dist'),    },    module: {        rules: [            {                test: /\.css$/,                use: ['style-loader', 'css-loader'],            },        ],    },};
  • mode : development, production, none ๋ชจ๋“œ ์ค‘ ์„ค์ •

  • entry : ์‹œ์ž‘์ 

  • output : ๊ฒฐ๊ณผ๋ฌผ

  • module : ๋กœ๋”


DOM#