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

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

    2021-02

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

    JavaScript Frameworks, Performance Comparison 2020

    ์ด 20๊ฐœ์˜ ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์— ๋Œ€ํ•œ ์„ฑ๋Šฅ ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์†Œ๊ฐœํ•˜๋Š” ๊ธ€์ด๋‹ค. ๋ฒค์น˜๋งˆํฌ๋Š” ํฌ๊ฒŒ ๋‹ค์Œ์˜ 3๊ฐ€์ง€ ์˜์—ญ์— ๋Œ€ํ•œ ์‹คํ–‰์„ ํ†ตํ•ด ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

    • DOM ์„ฑ๋Šฅ
    • ์ดˆ๊ธฐ ์‹œ์ž‘ ๋ฉ”ํŠธ๋ฆญ
    • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰

    ๋˜ํ•œ ๊ฐ ํ•ญ๋ชฉ๋“ค์€ ์ƒ๋Œ€์  ๋น„๊ต๋ฅผ ์œ„ํ•ด, ๊ฐ€์žฅ ์ตœ์ ํ™”๋œ Vanilla๋กœ ๊ตฌํ˜„์ฒด์˜ ๊ฒฐ๊ด๊ฐ’์ด ์ œ๊ณต๋œ๋‹ค.

    ์ตœ์ข… ๋ฒค์น˜๋งˆํฌ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ ๋งํฌ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. https://krausest.github.io/js-framework-benchmark/index.html

    Tao of React - Software Design, Architecture & Best Practices

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

    ๊ธ€์˜ ์ €์ž๋Š” 2016๋…„๋ถ€ํ„ฐ React๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ(์•„ํ‚คํ…์ฒ˜)์™€ ๋””์ž์ธ ์ธก๋ฉด์—์„œ์˜ ๋ชจ๋ฒ”์‚ฌ๋ก€๋ฅผ ์ œ์‹œํ•œ๋‹ค.

    // ex) ํ—ฌํผ ํ•จ์ˆ˜๋“ค์— ๋Œ€ํ•œ ์ •๋ฆฌ
    // ๐Ÿ‘Ž ํด๋กœ์ €๋ฅผ ์œ ์ง€ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ์ค‘์ฒฉ ํ•จ์ˆ˜๋ฅผ ํ”ผํ•˜๋ผ.
    function Component({ date }) {
      function parseDate(rawDate) {
        ...
      }
    
      return <div>Date is {parseDate(date)}</div>
    }
    
    // ๐Ÿ‘ ํ—ฌํผ ํ•จ์ˆ˜๋“ค์€ ์ปดํฌ๋„ŒํŠธ ์•ž์— ๋ฐฐ์น˜ํ•˜๋ผ.
    function parseDate(date) {
      ...
    }
    
    function Component({ date }) {
      return <div>Date is {parseDate(date)}</div>
    }
    

    Running Rust in WebAssembly in a Pool of Concurrent Web Workers in JavaScript

    ๋ ˆ์ด ํŠธ๋ ˆ์ด์‹ฑ์„ ์‚ฌ์šฉํ•˜๋Š” 3D ์žฅ๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ๋‹จ์ผ ํ”„๋ ˆ์ž„์„ ๋ Œ๋”๋ง ํ•˜๋Š” ์‹คํ—˜์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌํ˜„์„ ํ†ตํ•ด, ์ผ๋ จ์˜ ๋ฌด๊ฑฐ์šด ์ž‘์—…๋“ค์„ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ POC(Proof Of Concept)์ด๋‹ค.

    wasm ๋ชจ๋“ˆ๋กœ ์ปดํŒŒ์ผ๋œ Rust ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์›น ์›Œ์ปค ํ’€์„ ํ†ตํ•ด ๋‹ค์ˆ˜์˜ ์ž‘์—…์„ ๋™์‹œ์— ์‹คํ–‰๋˜๋„๋ก ํ•ด ๋ฌด๊ฑฐ์šด ์ž‘์—…๋“ค์„ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ์„ ์ฆ๋ช…ํ•œ๋‹ค.

    ๋ฐ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‹ค์Œ ๋งํฌ๋ฅผ ํ†ตํ•ด ์ง์ ‘ ์‹คํ–‰ํ•ด ๋ณผ์ˆ˜ ์žˆ๋‹ค.

    • https://alesgenova.github.io/ray-tracer-app/

    How we built the GitHub globe

    ์ด 5๊ฐœ ์‹œ๋ฆฌ์ฆˆ๋ฅผ ํ†ตํ•ด GitHub์˜ ์ƒˆ๋กœ์šด ํ™ˆํŽ˜์ด์ง€ ๊ฐœ๋ฐœ ๊ณผ์ •์„ ์†Œ๊ฐœํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์‹œ๋ฆฌ์ฆˆ์—์„œ๋Š” ๋ฉ”์ธ ํŽ˜์ด์ง€์— ์ถ”๊ฐ€๋œ ์ง€๊ตฌ๋ณธ์„ ํ†ตํ•ด ์ „ ์„ธ๊ณ„์—์„œ ๋ฐœ์ƒ๋˜๋Š” PR์„ ์‹œ๊ฐํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐœ๋ฐœ ๊ณผ์ •์„ ๋‹ค๋ฃจ๊ณ  ์žˆ๋‹ค.

    Why React Context is Not a "State Management" Tool (and Why It Doesn't Replace Redux)

    "Context vs Redux"์— ๋Œ€ํ•œ ์ฃผ์ œ๋Š” React Context API๊ฐ€ ๋ฆด๋ฆฌ์Šค๋œ ์ด๋ž˜, ํ•ญ์ƒ ๋งŽ์€ ์ด๋“ค์˜ ์—ด๋ค ํ† ๋ก ์„ ์ด๋Œ์–ด ๋ƒˆ๋˜ ๋‹จ๊ณจ ์ฃผ์ œ ์ค‘ ํ•˜๋‚˜์˜€์œผ๋ฉฐ, ์ด๋“ค "ํ† ๋ก "์˜ ๋Œ€๋ถ€๋ถ„์€ 2๊ฐ€์ง€ ๋„๊ตฌ๊ฐ€ ๊ฐ–๋Š” ๋ชฉ์ ๊ณผ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•œ ํ˜ผ๋ž€์—์„œ ๋น„๋กฏ๋˜์—ˆ์Œ์„ ๊ธ€์—์„œ ์ง€์ ํ•œ๋‹ค.

    ๊ธ€์˜ ์ €์ž๋Š” ์ž์‹ ์ด ์ž‘์„ฑํ–ˆ๋˜ ๋‹ต๊ธ€๋“ค์„ ์ •๋ฆฌํ•ด ์–ด๋–ค ๊ฒฝ์šฐ์— ์ด๋“ค์ด ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•˜๊ณ , ๋ฌด์—‡์ด ๋‹ค๋ฅธ์ง€ ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์ž์„ธํ•˜๊ฒŒ ์†Œ๊ฐœํ•œ๋‹ค.

    How to ace your next Javascript interview

    7๋ถ„ ๋‚ด์™ธ์˜ ์งง์€ ๋™์˜์ƒ์„ ํ†ตํ•ด ์ €์ž๋Š” ์ง€๋‚œ 10์—ฌ ๋…„๊ฐ„์˜ ๊ฒฝ๋ ฅ์—์„œ ๊ฒฝํ—˜ํ–ˆ๋˜ ์ˆ˜๋งŽ์€ ์ธํ„ฐ๋ทฐ ์ฐธ์—ฌ๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์ธํ„ฐ๋ทฐ๋“ค์—์„œ ๊ฐ–๋Š” ์ผ๋ฐ˜์ ์ธ ํŒจํ„ด๋“ค์ด ์กด์žฌํ•˜๋ฉฐ, ์ด๋“ค ํŒจํ„ด๋“ค์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ๊ณต๋ถ€ํ•œ๋‹ค๋ฉด ์—ฌ๋Ÿฌ๋ถ„๋“ค๋„ ์ถฉ๋ถ„ํžˆ ๋‹ค์Œ ์ธํ„ฐ๋ทฐ์—์„œ ์„ฑ๊ณตํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ ๋งํ•œ๋‹ค.

    ๋Œ€๋‹ค์ˆ˜ ์ธํ„ฐ๋ทฐ์—์„œ ๊ด€์ฐฐ๋๋˜ ์ผ๋ฐ˜์ ์ธ ํŒจํ„ด๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    • ์ตœ์†Œํ•œ ํ•œ ๊ฐ€์ง€ ์ด์ƒ์˜ ๊นŒ๋‹ค๋กœ์šด ๋ฌธ์ œ(tricky question)๊ฐ€ ์กด์žฌํ•œ๋‹ค.
    • ์ผ๋ฐ˜์ ์œผ๋กœ ํ•œ ๊ฐœ ์ด์ƒ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๊ฐ€ ํฌํ•จ๋œ๋‹ค.
    • ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์— ํฌํ•จ๋˜๋Š” ์ž‘์€(์ผ๋ถ€) ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์ž‘์„ฑํ•ด ๋ณด๋„๋ก ์š”๊ตฌ๋œ๋‹ค.
    • JavaScript์˜ ๊ฒฝ์šฐ, vanilla JS๋กœ ์ž‘์„ฑํ•  ๊ฒƒ์ด ์š”๊ตฌ๋œ๋‹ค.

    2020 ์„ค๋ฌธ์กฐ์‚ฌ

    ๋˜ ๋‹ค๋ฅธ ์ƒˆํ•ด๊ฐ€ ์‹œ์ž‘๋˜์—ˆ๋‹ค. ์ง€๋‚œ 1๋…„๊ฐ„ Front-end ์˜์—ญ์—์„œ์˜ ๋ณ€ํ™”๊ฐ€ ๋ฌด์—‡์ผ์ง€, ๊ทธ๋ฆฌ๊ณ  ์•ž์œผ๋กœ์˜ ์ „๋ง์€ ์–ด๋–ป๊ฒŒ ๋ ์ง€ ๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฐ”๋กœ ๋‹ค์–‘ํ•œ ์ด๋“ค์˜ ์ƒ๊ฐ์„ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด๋‹ค.

    ๋งคํ•ด ์ง„ํ–‰๋˜๋Š” ๋‹ค์Œ์˜ ๋‹ค์–‘ํ•œ ์„ค๋ฌธ์กฐ์‚ฌ ๊ฒฐ๊ณผ๋“ค์€ ์—ฌ๋Ÿฌ๋ถ„๋“ค์˜ ๊ถ๊ธˆ์ฆ์— ๋Œ€ํ•œ ํ•ด๋‹ต์„ ๋“ค๋ ค์ค„ ๊ฒƒ์ด๋‹ค.

    The Top 100+ Developer Tools 2020

    ๊ฐœ๋ฐœ ํšŒ์‚ฌ์™€ ๊ฐœ๋ฐœํŒ€์—์„œ ์–ด๋–ค ์˜คํ”ˆ์†Œ์Šค์™€ ๋„๊ตฌ๋“ค์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ๊ณต์œ ํ•˜๊ณ  ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” stackshare ์‚ฌ์ดํŠธ์—์„œ ์ž‘๋…„(2020) ํ•œ ํ•ด ๋™์•ˆ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๊ฐ€์žฅ ๋†’์€ ์ ์ˆ˜๋ฅผ ๋ฐ›์€ ๊ธฐ์ˆ ๋“ค์— ๋Œ€ํ•ด ์ˆœ์œ„๋ฅผ ๋ฉ”๊ฒผ๋‹ค.

    ์ด ์ˆœ์œ„๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์–ป์€ 8๋ฐฑ๋งŒ ๊ฐœ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•ด์„œ ์ œ๊ณตํ•œ ๊ฒƒ์ด๋ผ๊ณ  ํ•œ๋‹ค. ์–ธ์–ด, ํ”„๋ ˆ์ž„์›Œํฌ, ํ˜‘์—…, ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜, ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ ๊ฐ์ข… ๋ถ„์•ผ์—์„œ ์–ด๋–ค ๊ธฐ์ˆ ๋“ค์ด ์ธ๊ธฐ ์žˆ์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ์˜คํ”ˆ์†Œ์Šค์™€ ๊ธฐ์ˆ  ๋„๊ตฌ๋“ค์˜ ํŠธ๋ Œ๋“œ์™€ ํ๋ฆ„์„ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋‹ค.

    ์นด์นด์˜ค FE๊ฐœ๋ฐœ์ž์˜ ์„ฑ์žฅ ์Šคํ† ๋ฆฌ

    ์นด์นด์˜ค FE ๊ฐœ๋ฐœ์ž๋“ค์˜ ์„ฑ์žฅ ์Šคํ† ๋ฆฌ์— ๋Œ€ํ•œ ์‹œ๋ฆฌ์ฆˆ ๊ธ€๋กœ, ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์  ๊ณต์œ ์™€ ๊ฒฝํ—˜ ๋“ฑ์„ ์†Œ๊ฐœํ•œ๋‹ค.

    ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ โ†’ ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ ์ „ํ™˜ ๊ทธ๋ฆฌ๊ณ  1๋…„ ํ›„

    Android์™€ iOS ๊ฐ๊ฐ ๋ณ„๋„๋กœ ๊ตฌํ˜„๋˜์—ˆ๋˜ ์•ฑ์„ React Native๋กœ ํ†ตํ•ฉํ•œ ๊ณผ์ •๊ณผ ๊ทธ ํ›„ 1๋…„๊ฐ„์— ๋Œ€ํ•œ ํšŒ๊ณ ๋ฅผ ๋‹ค๋ฃฌ๋‹ค.

    Naming cheatsheet

    ๊ตฌ์ฒด์ ์ธ ๊ฐ€์ด๋“œ๋‚˜ ์ฝ”๋“œ ์ปจ๋ฒค์…˜ ์—†์ด ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์•ˆ ์ข‹์€ ๋„ค์ด๋ฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ด ์•„ํ‹ฐํด์€ ๊ฝค๋‚˜ ๋ณดํŽธ์ ์œผ๋กœ ํ†ต์šฉ๋˜๋Š” ๋„ค์ด๋ฐ ๊ฐ€์ด๋“œ๋ฅผ ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ์ œ์‹œํ•˜๊ณ  ์žˆ๋‹ค. ์ž์‹ ์ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ์—์„œ ๋„ค์ด๋ฐ์— ๋Œ€ํ•œ ์˜์‹ฌ์ด ์žˆ๋‹ค๋ฉด ํ•œ๋ฒˆ ์ฝ์–ด๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.

    /* Bad */
    const a = 5 // "a" could mean anything
    const isPaginatable = a > 10 // "Paginatable" sounds extremely unnatural
    const shouldPaginatize = a > 10 // Made up verbs are so much fun!
    
    /* Good */
    const postCount = 5
    const hasPagination = postCount > 10
    const shouldDisplayPagination = postCount > 10 // alternatively
    

    You Should Use React.memo More!

    React์—์„œ ์ปดํฌ๋„ŒํŠธ์˜ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋ฉด ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•˜๋ฉฐ, ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋„ ๋ณ€๊ฒฝ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ๋ Œ๋”๋ง์ด ๋‹ค์‹œ ๋œ๋‹ค.

    ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์€ React.memo๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

    ์ด ์˜์ƒ์—์„œ๋Š” memo๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์˜ˆ์‹œ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ๋ณด์—ฌ์ฃผ๋ฉฐ ๋ฉ”๋ชจ๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ด ์ค€๋‹ค.

    ๊ทœ๋ชจ๊ฐ€ ํฐ ํ”„๋กœ์ ํŠธ์—์„  ์ด๋Ÿฐ ์‚ฌ์†Œํ•œ ๊ฒƒ์ด ํฐ ์„ฑ๋Šฅ ๋ณ€ํ™”๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. React ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด memo๋ฅผ ๋” ์ ๊ทน์ ์œผ๋กœ ์ ์šฉํ•ด ๋ณด๋Š” ๊ฒƒ์€ ์–ด๋–จ๊นŒ?

    [JS] ํ•œ๊ธ€๋„ ์ง€์›ํ•˜๋Š” ํผ์ง€ ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰

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

    ์ด ๊ธ€์€ ํ•œ๊ธ€ ํผ์ง€ ๊ฒ€์ƒ‰์— ๋Œ€ํ•œ ๊ธ€์ด๋‹ค. ํ•˜๋‚˜์”ฉ ์ฐจ๊ทผ์ฐจ๊ทผ ์„ค๋ช…ํ•˜๋ฉฐ ์ตœ์ข… ๊ตฌํ˜„ ๋ฐ๋ชจ ํŽ˜์ด์ง€๊นŒ์ง€ ์ œ๊ณตํ•œ๋‹ค.

    ๋ฆฌ๋•์Šค ์ž˜ ์“ฐ๊ณ  ๊ณ„์‹œ๋‚˜์š”?

    React ๊ฐœ๋ฐœ์˜ ์ดˆ์ฐฝ๊ธฐ์—๋Š” React ํ”„๋กœ์ ํŠธ์—์„œ Redux๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋‹น์—ฐ์‹œ๋˜์–ด ์™”๋‹ค. ํ•˜์ง€๋งŒ, ์ด์ œ๋Š” ๋ฆฌ์•กํŠธ ์ž์ฒด์ ์ธ ๊ธฐ๋Šฅ๋ฟ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋„์›€์„ ๋ฐ›์•„ ํ›จ์”ฌ ํŽธํ•˜๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค.

    ์ด ๊ธ€์€ Redux๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Constate, Recoil, Jลtai ๋“ฑ ๋‹ค๋ฅธ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋Œ€์ฒด์žฌ๋“ค์„ ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๊ณ  ๊ฐ™์€ ๊ตฌํ˜„์ฒด๋ฅผ ์—ฌ๋Ÿฌ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์–ด ๊ฐ„๋‹จํžˆ ๋น„๊ตํ•˜๊ธฐ ์ข‹๋‹ค. React ํ”„๋กœ์ ํŠธ์—์„œ ์–ด๋–ค ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋„์ž…ํ• ์ง€ ๊ฒ€ํ†  ์ค‘์ผ ๋•Œ ์ฐธ๊ณ ํ•˜๊ธฐ ์ข‹์€ ๊ธ€์ด๋‹ค.

    ๋˜ํ•œ, Redux๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฐธ๊ณ ํ• ๋งŒํ•œ ํ›Œ๋ฅญํ•œ ํŒ๋“ค์„ ๋งŽ์ด ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋‹ค.

    ํŠœํ† ๋ฆฌ์–ผ

    Building a Real-Time Commenting System in React

    ์ด 3๊ฐœ์˜ ์‹œ๋ฆฌ์ฆˆ๋กœ ๊ตฌ์„ฑ๋œ ์‹ค์‹œ๊ฐ„ ๋Œ“๊ธ€ ๊ฐœ๋ฐœ ๊ณผ์ •์„ ์†Œ๊ฐœํ•˜๋Š” ํŠœํ† ๋ฆฌ์–ผ์ด๋‹ค.

    • ์†Œ์Šค์ฝ”๋“œ: https://github.com/PandaSekh/React-Commenting-System
    • ์˜จ๋ผ์ธ ๋ฐ๋ชจ: https://react-commenting-system.vercel.app/

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

    The definitive guide to JavaScript Debugging [2021 Edition]

    JavaScript ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์œ„ํ•ด ์•Œ์•„์•ผ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์˜ ์‚ฌ์šฉ๋ฒ•๊ณผ ์˜๋ฏธ๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์†Œ๊ฐœํ•˜๋Š” ์ข…ํ•ฉ์  ๋””๋ฒ„๊น… ๊ฐ€์ด๋“œ๋‹ค.

    ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ  ์žˆ์ง€๋งŒ, ํƒ€ ๋ธŒ๋ผ์šฐ์ €๋“ค์˜ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋“ค๋„ ๋ชจ๋‘ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ํ•™์Šต ๋‚ด์šฉ์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ „ํ˜€ ๋ฌธ์ œ ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.

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

    Forgo

    4KB ํฌ๊ธฐ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, JSX(React์˜ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋ฏธ ์—ฌ๋Ÿฌ๋ถ„์ด ์•Œ๊ณ  ์žˆ๋Š” DOM API์™€ ํ”Œ๋ ˆ์ธ JS๋ฅผ ์‚ฌ์šฉํ•ด ๋ชจ๋˜ ์›น์•ฑ ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ๋Ÿฌ๋‹ ์ปค๋ธŒ ์—†์ด ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

    Moiva

    npm ํŒจํ‚ค์ง€์˜ ๋‹ค์šด๋กœ๋“œ ์ˆ˜, ๋ฆด๋ฆฌ์Šค ํšŸ์ˆ˜ ๋“ฑ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์ „๋ฐ˜์  ์ƒํƒœ์— ๋Œ€ํ•œ ์ง€ํ‘œ๋ฅผ ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋“ค ์ง€ํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์™€์˜ ๋น„๊ต๋ฅผ ํ†ตํ•ด ํŒจํ‚ค์ง€ ์„ ํƒ์‹œ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

    [์ฐธ๊ณ ] ์œ ์‚ฌํ•œ ๋„๊ตฌ๋กœ๋Š” ๋‹ค์Œ์„ ํ•จ๊ป˜ ์ฐธ๊ณ ํ•˜๋ผ.

    CodeSwing

    ์ฝ”๋“œ ์ˆ˜์ •์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜ํ•ด ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ํ•  ์ˆ˜ ์žˆ๋Š” CodePen, JSFiddle๊ณผ ๊ฐ™์€ playground ๋„๊ตฌ์™€ ๊ฐ™์ด VS Code ๋‚ด์—์„œ ์ƒํ˜ธ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋”ฉ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‹ค.

    Handsfree

    ๋ณ„๋„์˜ ์ž…๋ ฅ์žฅ์น˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•ธ์ฆˆํ”„๋ฆฌ ํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋„๊ตฌ๋‹ค.

    ์‚ฌ์šฉ์ž์˜ ์›น์บ ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์›€์ง์ž„(์–ผ๊ตด, ์†, ๋ชธ์ง“ ๋“ฑ)์„ ์ธ์‹ํ•˜๋ฉฐ, ํŠน์ • ์ œ์Šค์ฒ˜๋ฅผ ์ธ์‹ํ•ด ํŽ˜์ด์ง€ ์Šคํฌ๋กค, ๊ฒŒ์ž„ ์กฐ์ž‘ ๋“ฑ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๋ณด๋‹ค ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์˜ ์†Œ๊ฐœ ๊ธ€์„ ๊ฐ™์ด ์ฐธ๊ณ ํ•˜๋ผ.

    <!-- CDN์—์„œ ๊ด€๋ จ ํŒŒ์ผ์„ ๋กœ๋”ฉ -->
    <link rel="stylesheet" href="https://unpkg.com/handsfree@8.2.2/build/lib/assets/handsfree.css" />
    <script src="https://unpkg.com/handsfree@8.2.2/build/lib/handsfree.js"></script>
    
    <script>
        // ์ดˆ๊ธฐํ™”
        const handsfree = new Handsfree({hands: true})
        handsfree.enablePlugins('browser')
        handsfree.start()
    </script>
    

    Create App: Frontend build config generator

    webpack, Parcel, Snowpack์˜ ํ™˜๊ฒฝ ๊ตฌ์„ฑ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ๋‹ค.

    React, Svelte, Vue์˜ ์„ค์ •์„ ์ง€์›ํ•˜๋ฉฐ, ์ด์™ธ์—๋„ UI, Test, Transpiler, Style, Image, Utilities, Linting์˜ ์„ค์ •๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ชจ๋“  ์„ค์ •์ด ๋๋‚œ ๋’ค์—๋Š” ๋‹ค์šด๋กœ๋“œํ•˜๊ฑฐ๋‚˜, How to create your project yourself ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ผ ํ•˜๋ฉด ๋œ๋‹ค.