naver/fe-news ๋‰ด์Šค๋ ˆํ„ฐ ๋ทฐ์–ด (๋น„๊ณต์‹)

๋ชฉ์ฐจ
๋ชฉ์ฐจ

    2021-05

    ๋งํฌ & ์ฝ์„๊ฑฐ๋ฆฌ

    Real-world CSS vs. CSS-in-JS performance comparison

    CSS-in-JS๋Š” Front-end ๊ฐœ๋ฐœ ์˜์—ญ์— ํ™•๊ณ ํ•œ ํ•œ์ž๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•ด ๋‚˜๊ฐ€๊ณ  ์žˆ์–ด ๋ณด์ด๋ฉฐ, ํŠนํžˆ๋‚˜ React ์˜์—ญ์—์„œ ๋” ๋‘๋“œ๋Ÿฌ์ ธ ๋ณด์ธ๋‹ค.

    ๋งคํ•ด ์กฐ์‚ฌ๋˜๋Š” "State of CSS 2020" ์„ค๋ฌธ์กฐ์‚ฌ์—์„œ๋Š” ๋Œ€ํ‘œ์ ์ธ CSS-in-JS ๋„๊ตฌ์ธ Styled Components๋ฅผ ๋“ค์–ด๋ณธ ์ ์ด ์—†๋‹ค๊ณ  ๋‹ต๋ณ€ํ•œ ์ด๋Š” 14.3%์— ๋ถˆ๊ณผํ•ด CSS-in-JS๋Š” ์ด์ œ ๋„๋ฆฌ ์•Œ๋ ค์ง„ ๊ฐœ๋ฐœ ๋ฐฉ์‹์ด๋ผ ๋งํ•  ์ˆ˜ ์žˆ์–ด ๋ณด์ธ๋‹ค.

    ์ด ๊ธ€์€ ์ฃผ์š” CSS-in-JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์— ๋Œ€ํ•œ ํ˜„์‹ค ์„ธ๊ณ„(real-world) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ์˜ ์„ฑ๋Šฅ ๋น„๊ต๋ฅผ ์†Œ๊ฐœํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ CSS-in-JS๋Š” ์–ด๋–ค ์‹์œผ๋กœ๋“  ๋กœ๋”ฉ ์„ฑ๋Šฅ(JS ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ๊ฒƒ์ด ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ๊ธฐ๋Œ€)์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜๋ฐ–์— ์—†๊ธฐ ๋•Œ๋ฌธ์—, ๋กœ๋”ฉ ์„ฑ๋Šฅ์— ๋ฏผ๊ฐํ•˜๋‹ค๋ฉด CSS-in-JS๋Š” ์—ฌ๋Ÿฌ๋ถ„์˜ ์„ ํƒ์ง€๊ฐ€ ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค.

    Working With Strings in Modern JavaScript

    ์ด ๊ฐ€์ด๋“œ๋Š” JavaScript์—์„œ ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ชจ๋“  ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ, ๋ฌธ์ž์—ด์˜ ์ƒ์„ฑ, ์กฐ์ž‘ ๊ทธ๋ฆฌ๊ณ  ๋น„๊ต ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ชจ๋“  ๋‚ด์šฉ์„ ๋‹ค๋ฃจ๊ณ  ์žˆ๋‹ค.

    Slow and Steady: Converting Sentryโ€™s Entire Frontend to TypeScript

    ์˜ค๋ฅ˜ ๋กœ๊น… ํ”Œ๋žซํผ/๋„๊ตฌ์ธ Sentry๊ฐ€ ๋ชจ๋“  ์ฝ”๋“œ ๋ฒ ์ด์Šค๋ฅผ JavaScript์—์„œ TypeScript๋กœ ์ „ํ™˜ํ•œ ๊ฒฝํ—˜์„ ์†Œ๊ฐœํ•˜๋Š” ๊ธ€๋กœ, 12๋ช… ์ด์ƒ์˜ ์—”์ง€๋‹ˆ์–ด๋ง ํŒ€์ด ์ฐธ์—ฌํ•ด 1.1k ์—ฌ๊ฐœ์˜ ํŒŒ์ผ๋“ค์—์„œ 95k ๋ผ์ธ์— ๋Œ€ํ•œ ์ฝ”๋“œ๋“ค์— ๋Œ€ํ•œ ์ž‘์—…์ด ์ง„ํ–‰๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

    How to actually test UIs

    UI๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์€ ์ผ์ด๋‹ค. ๋งค ๋ฆด๋ฆฌ์Šค๋งˆ๋‹ค ์ƒˆ๋กญ๊ณ  ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค๋กœ ์ธํ•ด UI์™€ ์ƒํƒœ๋Š” ๋น„๋ก€ํ•ด์„œ ์ฆ๊ฐ€ํ•˜๊ณ , ๋ชจ๋“  ํ…Œ์ŠคํŠธ ๋„๊ตฌ๋“ค์€ "์‰ฝ๊ณ , ๋น ๋ฅด๊ณ , ์ž˜ ํํŠธ๋Ÿฌ์ง€์ง€ ์•Š๋Š”" ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋งํ•˜์ง€๋งŒ ํ˜„์‹ค์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.

    Storybook ์ปค๋ฎค๋‹ˆํ‹ฐ ๋‚ด์˜ 10๊ฐœ ํŒ€๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” UI ํ…Œ์ŠคํŠธ ํ…Œํฌ๋‹‰์„ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ ์‹ค์šฉ์ ์ธ ํ…Œ์ŠคํŠธ ์ „๋žต์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์†Œ๊ฐœํ•œ๋‹ค.

    [V8 Deep Dives] Random Thoughts on Math.random()

    V8์—์„œ Math.random์„ ECMA specification๋ถ€ํ„ฐ torque, C++๋กœ ๋˜์–ด์žˆ๋Š” ๊ตฌํ˜„ ๋กœ์ง์„ ๋”ฐ๋ผ๊ฐ€ ๋ณธ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์™œ Math.random์ด ๋ณด์•ˆ์ƒ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋˜๋Š”์ง€ ํ™•์ธํ•ด ์ค€๋‹ค.

    V8์— ๋Œ€ํ•ด์„œ ๊ด€์‹ฌ์ด ์ƒ๊ฒผ๋‹ค๋ฉด ์•„๋ž˜ ๊ธ€๋“ค์„ ์ถ”๊ฐ€๋กœ ์ฝ์–ด๋ณผ ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.

    Javascript Closure๋Š” Private ๋ณ€์ˆ˜ ๋งŒ๋“œ๋Š” ์šฉ๋„์ธ๊ฐ€?

    Javascript Closure์— ๋Œ€ํ•ด์„œ ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•˜๋ฉด ์ข‹์„์ง€์— ๋Œ€ํ•œ ์ข‹์€ ๋ฐฉํ–ฅ์„ ์ œ์‹œํ•ด ์ค€๋‹ค. ํŽ˜์ด์Šค๋ถ React Korea๊ทธ๋ฃน์˜ ๋Œ“๊ธ€์— ์ข‹์€ ์˜๊ฒฌ์ด ์žˆ์–ด ๋งํฌ๋ฅผ ์ฒจ๋ถ€ํ•œ๋‹ค. https://www.facebook.com/groups/react.ko/permalink/2834835133443307/

    ์ž…๋ ฅ์„ ๋‹ค๋ฃจ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•

    React์—์„œ๋Š” Form์˜ ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์ฝ”๋“œ์™€ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ  ์–ด๋ ค์šฐ๋ฉฐ, ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ๊ฒช์„ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด useImperativeHandle , Uncontrolled Component์„ ์„ค๋ช…ํ•˜๊ณ , ์ด๋Ÿฐ ๋ถ€๋ถ„์ด ๊ณ ๋ ค๋˜์–ด ์žˆ๋Š” react-hook-form์„ ์†Œ๊ฐœํ•œ๋‹ค.

    Webpackโ€™s Hot Module Replacement Feature Explained

    Webpack์—์„œ HMR์ด ์™œ ์ƒ๊ฒผ๋Š”์ง€, HMR์ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ผ์–ด๋‚˜๋Š”์ง€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ณ , ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ค€๋‹ค.

    ํŠœํ† ๋ฆฌ์–ผ

    JavaScript Game For Beginners: Sprite Animation

    ์‹ค์ œ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” Image Sprites ๊ธฐ๋ฒ•์„ JavaScript canvas๋กœ ๊ตฌํ˜„ํ•œ ๊ณผ์ •์„ ๋‹ด์€ ์˜์ƒ์ด๋‹ค. ํ•ด๋‹น ์œ ํŠœ๋ธŒ ์ฑ„๋„์— Javascript๋กœ ๋งŒ๋“œ๋Š” ๊ฒŒ์ž„, ์• ๋‹ˆ๋ฉ”์ด์…˜์— ๋Œ€ํ•œ ์ž๋ฃŒ๊ฐ€ ๋งŽ์œผ๋‹ˆ ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ํ™•์ธํ•ด๋ด๋„ ์ข‹๋‹ค.

    ์ฝ”๋“œ์™€ ๋„๊ตฌ

    Equality in JavaScript

    JavaScript ๋ฌธ๋ฒ•์„ ํ†ตํ•ด ๋™๋“ฑ ์—ฐ์‚ฐ์ž(==)๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ, ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฅธ ๋‹นํ™ฉ์Šค๋Ÿฌ์šด ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ฒŒ ๋  ๋•Œ๊ฐ€ ์žˆ๋‹ค.

    [] == "" // true
    [] == 0 // true
    undefined == null // true
    ...
    // ๊ทธ๋งŒ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž. -,-
    

    ์–ด๋–ค ๊ฐ’๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ true/false ์ธ์ง€ ์ž˜ ๊ธฐ์–ต๋‚˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋น„๊ต ํ…Œ์ด๋ธ”์„ ํ†ตํ•ด ํ™•์ธํ•ด ๋ณด์ž. ์ถ”๊ฐ€๋กœ ๋‹ค์–‘ํ•œ ์‚ฌ๋ก€๋“ค๊ณผ ์„ค๋ช…์„ ๋ชจ์•„๋‘” wtfjs๋„ ํ™•์ธํ•ด ๋ณด์ž.

    Debug Why React (Re-)Renders a Component

    React์˜ ๋ Œ๋”๋ง, Virtual Dom์„ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๊ณ , ๋ Œ๋”๋ง์ด ๋œ ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š” ํˆด์„ ์•Œ๋ ค์ค€๋‹ค.

    • ๋ Œ๋”๋ง์„ ์‹œ๊ฐํ™”: React DevTools์˜ ์„ค์ •
    • ๋ Œ๋”๋ง ๋œ ์ด์œ : React DevTools์˜ Profiler
    • hook์˜ ๋ Œ๋”๋ง ๋œ ์ด์œ  Why Did You Render

    ์ด ๊ธ€์„ ํ†ตํ•ด React๊ฐ€ Component๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋ง ํ•˜๋Š” ์ด์œ ์™€ ๋™์ž‘์„ ์‹œ๊ฐํ™”ํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

    Solving a Mystery Behavior of parseInt() in JavaScript

    parseInt๊ฐ€ ์•„๋ž˜ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ์˜๋„๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ์›์ธ์„ ์•Œ์•„๋ณธ๋‹ค.

    parseInt(0.0000005); // => 5
    parseInt(999999999999999999999); // => ? 
    

    Using the Switch(true) Pattern in JavaScript

    switch true ํŒจํ„ด์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜๊ณ  ์ด๊ฒƒ์ด ์–ธ์ œ ์œ ์šฉํ•œ์ง€ ์•Œ๋ ค์ค€๋‹ค.

    switch (true) {
      case !user:
        throw new Error("User must be defined.");
      case !user.firstName:
        throw new Error("User's first name must be defined");
      case typeof user.firstName !== "string":
        throw new Error("User's first name must be a string");
      // ...lots more validation here
      default:
        return user;
    }
    

    Thunder Client

    VS Code ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ Rest API ํด๋ผ์ด์–ธํŠธ ๋„๊ตฌ๋กœ ์œ ๋ช…ํ•œ Postman๊ณผ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค.

    Pkg

    Next.js๋ฅผ ๊ฐœ๋ฐœํ•œ Vercel์—์„œ ๊ฐœ๋ฐœํ•œ ๋„๊ตฌ๋กœ, ๊ฐœ๋ฐœํ•œ Node.js ํŒจํ‚ค์ง€๋ฅผ Node.js๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š์€ ํ™˜๊ฒฝ์—์„œ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

    Appsmith

    JavaScript ๊ธฐ๋ฐ˜์˜ ๋น„์ฃผ์–ผ ๊ฐœ๋ฐœ ํ”Œ๋žซํผ์œผ๋กœ ๋‚ด๋ถ€ ๋„๊ตฌ๋“ค์„ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ๋นŒํŠธ์ธ ๋œ ์œ„์ ฏ๋“ค์„ ๋“œ๋ž˜๊ทธ ๋“œ๋กญ์œผ๋กœ ๋Œ์–ด๋‹ค ๋†“์€ ํ›„, ์„œ๋น„์Šค์˜ API๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.