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

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

    2021-11

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

    A spooky error when you have a string bigger than 512MB in Chrome

    Chrome ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฌธ์ž์—ด์€ ํฌ๊ธฐ๋Š” ์–ผ๋งˆ์ผ๊นŒ?

    ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด 512MB ์ด์ƒ์˜ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•œ๋‹ค. ์ตœ์‹  ๋ฒ„์ „์ธ 95(Canary 97 ํฌํ•จ)์—์„œ ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋ฉฐ, ์ด๋Š” ๊ฐ™์€ chromium ๊ณ„์—ด์ธ Edge์™€ Opera๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. Firefox์™€ Safari์—์„  ์ •์ƒ ๋™์ž‘ํ•œ๋‹ค.

    const len = 536_870_888; // +1์„ ํ•˜๋ฉด?
    const buf = new Uint8Array(len);
    for (let i = 0; i < len; i++) {
      buf[i] = "a".charCodeAt(0);
    }
    const str = new TextDecoder().decode(buf);
    console.log(str.length);  // 536870888 ์ถœ๋ ฅ
    
    // ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ํ…Œ์ŠคํŠธ ํ•ด๋ณผ์ˆ˜๋„ ์žˆ๋‹ค.
    "a".repeat(536_870_888 + 1).length  // Uncaught RangeError: Invalid string length
    

    Mocking์œผ๋กœ ์ƒ์‚ฐ์„ฑ๊นŒ์ง€ ์ฑ™๊ธฐ๋Š” FE ๊ฐœ๋ฐœ

    Front-end ๊ฐœ๋ฐœ์ž๊ฐ€ ์‰ฝ๊ฒŒ ๊ฒช๊ฒŒ ๋˜๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Mocking์„ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•œ๋‹ค.
    MSW.js ๋ฅผ ์ด์šฉํ•˜์—ฌ Mocking์„ ํ•˜๊ณ , ๋ฐฑ์—”๋“œ๊ฐ€ ์ค€๋น„๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ Front-end ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

    React Derived State ๋‹ค์‹œ ๋ณด๊ธฐ

    React์˜ Derived State์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ , Derived State๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ์ƒ๊ธด ๋ฌธ์ œ๋ฅผ ํ™•์ธํ•˜๊ณ ,
    ๊ฐœ์„  ๋ฐฉ๋ฒ•์ธ FULLY CONTROLLED COMPONENT, FULLY UNCONTROLLED COMPONENT + KEY๋ฅผ ์†Œ๊ฐœํ•œ๋‹ค.

    A Visual Guide to React Rendering - Cheat Sheet

    React์—์„œ ๋ถˆํ•„์š”ํ•œ Re-rendering์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ผ€์ด์Šค๋“ค์„ ๋ชจ์•„ ๋†“์€ Cheet Sheet์ด๋‹ค.
    ๊ฐ ์ผ€์ด์Šค๋ณ„๋กœ ์ƒํ™ฉ์„ ๋ณด์—ฌ์ฃผ๊ณ , ํ•ด๊ฒฐ์ฑ…์„ ์ œ์‹œํ•ด ์ค€๋‹ค.
    ๋†“์น˜๊ธฐ ์‰ฌ์šด ๋ถ€๋ถ„์ด๋‹ˆ ์ดˆ๋ณด React ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ๊ผญ ์ฝ์–ด๋ณด๊ธธ ์ถ”์ฒœํ•œ๋‹ค.

    JS์˜ ๊ฐ์ฒด๋Š” hash table์ด ์•„๋‹™๋‹ˆ๋‹ค!

    V8 ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ JS์˜ ๊ฐ์ฒด๊ฐ€ Hash Table์ด ์•„๋‹Œ ๊ฒƒ์„ ๊ณต๋ถ€ํ•œ ์‹œ๊ฐ„ ํ๋ฆ„์— ๋”ฐ๋ผ ์ •๋ฆฌํ•œ ๊ธ€์ด๋‹ค.
    ์ด ๊ธ€์„ ํ†ตํ•ด JS Object๋Š” ์–ด๋–ค ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋Š”์ง€, Array์˜ ์ƒํƒœ์™€ ํผํฌ๋จผ์Šค๋ฅผ ์œ ๋ฆฌํ•˜๊ฒŒ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•, ๋™์  ํƒ€์ดํ•‘ ์–ธ์–ด์˜ ํŠน์ง• ๋“ฑ์„ ์•Œ ์ˆ˜ ์žˆ๊ณ 
    ๊ฒฐ๋ก ์ ์œผ๋กœ ์™œ Hash Table๋กœ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ์ด์œ ๊นŒ์ง€ ์„ค๋ช…ํ•œ๋‹ค.

    ํฌ๋กฌ ์ต์Šคํ…์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃฐ ๊ฒƒ์ธ๊ฐ€? (ํ”ผํŠธ์Šคํƒ‘๊ณผ์ œ โ€“ ํฌ๋กฌ ์ต์Šคํ…์…˜ ๊ฐœ๋ฐœ๊ธฐ)

    ๋ณต์žกํ•œ ์—ฌ๋Ÿฌ ํผ์— ๋Œ€ํ•ด ์ž…๋ ฅ์„ ์ž๋™ํ™” ํˆด์„ ํฌ๋กฌ ์ต์Šคํ…์…˜์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •์—์„œ,
    ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ์†Œ๋ฅผ ์–ด๋–ค ๊ฒƒ์„ ์„ ํƒํ•˜์˜€๋Š”์ง€ ๋˜ ์ €์žฅ ์ฝ”๋“œ์˜ ์œ„์น˜์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๋ถ€๋ถ„์„ ์†Œ๊ฐœํ•ด ์ค€๋‹ค.

    ๋ธŒ๋ผ์šฐ์ €์˜ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๋Š” ์™œ ์ด๋ ‡๊ฒŒ ๋ณต์žกํ•˜๊ฒŒ ์ƒ๊ฒผ์„๊นŒ?

    ๋ธŒ๋ผ์šฐ์ €์˜ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๊ฐ€ ๋ณต์žกํ•œ ์—ญ์‚ฌ์ ์ธ ์ด์•ผ๊ธฐ๋ฅผ ์ž˜ ์ •๋ฆฌํ•œ ๊ธ€์ด๋‹ค.

    ๊ฒฐ๋ก ์„ ์šฐ์„  ํ•œ ๋งˆ๋””๋กœ ์š”์•ฝํ•˜์ž๋ฉด, ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž…๋‹ˆ๋‹ค.

    1. ์ธํ„ฐ๋„ท ์ต์Šคํ”Œ๋กœ๋Ÿฌ(IE)๊ฐ€ ๋„ท์Šค์ผ€์ดํ”„ ๋ธŒ๋ผ์šฐ์ €์˜ UA๋ฅผ ํ‰๋‚ด๋ƒ„์œผ๋กœ์จ, ์ฒ˜์Œ์œผ๋กœ UA๊ฐ€ ๋”๋Ÿฝํ˜€์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.
    2. ๋ชจ์งˆ๋ผ ์žฌ๋‹จ์ด ๋„ท์Šค์ผ€์ดํ”„ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋” ์—”์ง„์„ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋กœ ๊ณต๊ฐœํ•œ ํ›„๋ถ€ํ„ฐ๋Š” ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋” ์—”์ง„ ์ •๋ณด๋„ UA์— ์ถ”๊ฐ€๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.
    3. ๋ธŒ๋ผ์šฐ์ € ์ „์Ÿ ์ดํ›„ ๋‹ค์–‘ํ•œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ƒ๊ฒผ๋Š”๋ฐ, ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด ๋ธŒ๋ผ์šฐ์ € UA์— ์ŠคํŠธ๋ง์„ ๊ณ„์† ๋ง๋ถ™์ด๋‹ค๋ณด๋‹ˆ ์ง€๊ธˆ๊ณผ ๊ฐ™์€ ๋”์ฐํ•œ ํ˜•ํƒœ๊ฐ€ ๋˜์–ด๋ฒ„๋ ธ๋‹ค.

    ๊ธ€์„ ์ฝ์œผ๋ฉด ๋” ์ž์„ธํ•œ ์ด์•ผ๊ธฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

    ํŠœํ† ๋ฆฌ์–ผ

    4 Essential Tips for Better Asynchronous Code in JavaScript

    ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ…Œํฌ๋‹‰์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๊ฐ€ '๋™์ž‘'๋˜๋Š” ๊ฒƒ์—์„œ '์ข‹์€ ์ฝ”๋“œ'๋กœ์˜ ๋ฐœ์ „์„ ์˜๋ฏธํ•˜๋ฉฐ,
    ๋” ๋‚˜์€ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ณธ๋ฌธ์—์„œ ์†Œ๊ฐœํ•˜๋Š” 4๊ฐœ์˜ ํŒ์€ ํ•ญ์ƒ ์œ ์šฉํ•  ๊ฒƒ์ด๋‹ค.

    Candy Crush in React

    React๋ฅผ ์ด์šฉํ•ด Candy Crush ๊ฒŒ์ž„์„ ๋งŒ๋“ค์–ด๋ณด๋Š” ํŠœํ† ๋ฆฌ์–ผ ์˜์ƒ์ด๋‹ค.

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

    vscode.dev(!)

    stackoverflow์˜ 2021 ํ†ต๊ณ„์— ๋”ฐ๋ฅด๋ฉด VS Code๋Š” ๊ฐ€์žฅ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์„ ํƒํ•˜๋Š” IDE์ด๋‹ค. ์ด๋Ÿฐ VS Code์˜ ์›น ๋ฒ„์ „์ด ๊ณต๊ฐœ๋˜์—ˆ๋‹ค.
    VS Code๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์—†๋Š” ํ™˜๊ฒฝ(iPad, Chromebook)์—์„œ๋„ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    github์˜ ๊ฒฝ์šฐ clone ์—†์ด https://vscode.dev/github.com/microsoft/vscode ์ง์ ‘ ์ ‘๊ทผ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. Live Share์˜ ๊ฒฝ์šฐ์—๋„ ์„ค์น˜ ์—†์ด ํ˜‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    ๋˜ํ•œ GitHub ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ, ๋„๋ฉ”์ธ์„ .com โ†’ .dev๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์†์‰ฝ๊ฒŒ ์˜จ๋ผ์ธ VSCode๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์—ด์–ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    ex. https://github.com/facebook/react โ†’ https://github.dev/facebook/react

    Sucrase

    Babel๊ณผ ๊ฐ™์€ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋Š” ๋ ˆ๊ฑฐ์‹œ ๋ธŒ๋ผ์šฐ์ €์—์„œ์˜ ์‹คํ–‰์„ ์œ„ํ•ด ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ๋ณ€ํ™˜ํ•˜์ง€๋งŒ, Sucrase๋Š” ๊ฐœ๋ฐœ์ž๋“ค ๋Œ€๋‹ค์ˆ˜๊ฐ€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ๋ชจ๋˜ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด JavaScript ์ฝ”๋“œ๋Š” ๋ณ€ํ™˜ํ•˜์ง€ ์•Š๊ณ , ๊ผญ ํŠธ๋žœ์ŠคํŒŒ์ผ์ด ํ•„์š”ํ•œ JSX๋‚˜ TypeScript์— ์ง‘์ค‘ํ•ด ๋น ๋ฅด๊ฒŒ ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„๊ตฌ๋‹ค.

    Try it out

    ๋‹ค์Œ์€ 36๋งŒ ๋ผ์ธ์˜ ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋ฒค์น˜๋งˆํฌ ๊ฒฐ๊ณผ๋กœ, Babel ๋ณด๋‹ค 20๋ฐฐ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค€๋‹ค.

                Time            Speed
    Sucrase     1.64 seconds    220221 lines per second
    swc         2.13 seconds    169502 lines per second
    esbuild     3.02 seconds    119738 lines per second
    TypeScript  24.18 seconds   14937 lines per second
    Babel       27.22 seconds   13270 lines per second
    

    React Hooks in Svelte

    Svelte ๋ฒ„์ „์œผ๋กœ ํฌํŒ…๋œ React Hooks ์˜ˆ์ œ๋“ค ๋ชจ์Œ

    TypeScript Boilerplate for 2021

    2021๋…„ ์‹œ์ ์—์„œ ๋น ๋ฅด๊ฒŒ TypeScript ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” boilerplate๋กœ, TS4, esbuild(optional), Jest, TypeDoc ๋“ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค.

    VSCode์—์„œ Bracket Pair Colorizer ์‚ญ์ œํ•˜๊ณ  ๋‚ด์žฅ ๊ธฐ๋Šฅ ์‚ฌ์šฉํ•˜๊ธฐ

    ๊ด„ํ˜ธ(Bracket)์˜ ์Œ์„ ๋งž์ถ”์–ด ์ฃผ๋Š” VS Code์˜ ๋„๊ตฌ๋กœ Bracket Pair Colorizer ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์ง€๋งŒ,
    ์„ฑ๋Šฅ ์ด์Šˆ๋กœ ์ž์ฒด์ ์œผ๋กœ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์˜ต์…˜์„ ์ œ๊ณตํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด ๊ธ€์„ ๋”ฐ๋ผ๊ฐ€๋ฉด ์‰ฝ๊ฒŒ ์„ค์ •์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.