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

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

    2021-07

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

    React 18 ๋ณ€๊ฒฝ์ 

    2021.6.8 React ๊ณต์‹ ํŽ˜์ด์ง€์—์„œ React 18์— ๋Œ€ํ•œ ๊ณ„ํš์„ ๊ณต์œ ํ•˜์˜€๋‹ค. ์ด ๊ธ€์€ React 18์—์„œ ๋ณ€๊ฒฝ๋  Suspense ssr architecture, State batch update, Transition ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•œ ๊ธ€์ด๋‹ค.

    ๊ธฐ์กด์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ œ์–ดํ•ด์•ผํ•˜๊ฑฐ๋‚˜ ์ œ์•ฝ์ด ์žˆ๋˜ SSR ๋žœ๋”๋ง ๋ถ€๋ถ„์ด pipeToNodeWritable, Suspense์™€ Lazy๋ฅผ ํ†ตํ•ด React ๋‹จ์œ„์—์„œ ํšจ๊ณผ์ ์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

    ๊ธฐ์กด์— ๋ถ€๋ถ„ ์ ์šฉ๋˜์—ˆ๋˜ State batch update๋„ api ์š”์ฒญ, timeout๊ณผ ๊ฐ™์€ ๋น„๋™๊ธฐ ์ž‘์—… ๋‚ด์—์„œ๋„ ์ž๋™ ์ ์šฉ๋œ๋‹ค. ๋ฟ๋งŒ์•„๋‹ˆ๋ผ ์ƒํƒœ ์—…๋ฐ์ดํŠธ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ๋Š” startTransition ์ธํ„ฐํŽ˜์ด์Šค๋„ ์ œ๊ณตํ•œ๋‹ค.

    React 18์€ ๊ธฐ์กด Major ๋ฒ„์ „ ์—…๊ทธ๋ ˆ์ด๋“œ์™€ ๋™์ผํ•˜๊ฒŒ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์—†์ด ์†์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ์— ์ •์‹ ๋ฆด๋ฆฌ์ฆˆ๊ฐ€ ๋˜๋ฉด ๋ถ€๋‹ด์—†์ด ์ ์šฉํ•ด ๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

    [์ฐธ๊ณ ]

    • ๋ฌธ์„œ ์ „์ฒด๋ฅผ ์‚ดํŽด๋ณด๊ธฐ ๋ถ€๋‹ด์Šค๋Ÿฝ๋‹ค๋ฉด, ๋‹ค์Œ์˜ 12๊ฐœ ํŠธ์œ—์œผ๋กœ ์ •๋ฆฌ๋œ ์š”์•ฝ๋ณธ์„ ํ™•์ธํ•˜๋ผ.
      https://twitter.com/ProvablyFlarnie/status/1406729279317045248

    • Project React 18 ๋ฆด๋ฆฌ์ฆˆ ์ผ์ •์€ ๋‹ค์Œ์„ ์ฐธ๊ณ ํ•˜๊ธฐ ๋ฐ”๋ž€๋‹ค.
      https://reactjs.org/blog/2021/06/08/the-plan-for-react-18.html#projected-react-18-release-timeline

    React โ€” 5 Things That Might Surprise You

    React์— ๋Œ€ํ•ด ์ž˜๋ชป ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์„ ๋งŒํ•œ 5๊ฐ€์ง€ ๋‚ด์šฉ์„ ๋‹ค๋ฃจ๊ณ  ์žˆ๋‹ค. ์ด ๊ธ€์— ๋‚˜์˜จ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์กฐ๊ธˆ ๋” React๋ฅผ ์ž˜ ์ดํ•ดํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.

    5 Advanced React Patterns

    ๋‹จ์ˆœํ•œ Counter ์˜ˆ์ œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ 5๊ฐ€์ง€ React ํŒจํ„ด์„ ์ œ์–ด์˜ ์—ญ์ „, ๊ตฌํ˜„ ๋ณต์žก๋„ ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•œ๋‹ค.

    Why React Hooks cannot be conditioned

    React hooks์™€ ํ•จ๊ป˜ eslint-plugin-react-hooks์„ ์‚ฌ์šฉํ•ด๋ดค๋‹ค๋ฉด, React Hook "useState" is called conditionally.์™€ ๊ฐ™์€ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๊ฒฝ๊ณ  ๋ฉ”์„ธ์ง€์™€ ๋งž๋‹ฅ๋œจ๋ฆฐ ๊ฒฝํ—˜์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค.

    function Component({ doEffect }) {
      // {value: 0, next: {value: 0, next: null}}
      const [first, setFirst] = useState(0);
      if (doEffect) {
        // {value: 0, next: null}
        useEffect(/*...*/); // โš ๏ธ Wrong hook here
      }
      // null
      const [second, setSecond] = useState(0); // โš ๏ธ No hook left!!
    }
    

    ์ด ๊ธ€์€ Hooks๊ฐ€ ์™œ ์กฐ๊ฑด์‹์„ ํ†ตํ•ด ์‚ฌ์šฉ๋  ์ˆ˜ ์—†๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•œ๋‹ค.

    Next.js 11 ์ •์‹ ๋ฆด๋ฆฌ์ฆˆ

    Next.js 11์ด 2021.6.16 ์ •์‹ ๋ฆด๋ฆฌ์ฆˆ ๋˜์—ˆ๋‹ค. 11 ๋ฒ„์ „์—์„œ๋Š” React Fast Refresh ๋ฅผ ๊ฐœ์„ ํ•˜์—ฌ ์‹œ์ž‘ ์‹œ๊ฐ„์„ ์ตœ๋Œ€ 24% ๊ฐœ์„ ํ•˜์˜€๊ณ , ๋ณ€๊ฒฝ ์ฒ˜๋ฆฌ์‹œ๊ฐ„์„ 40% ๋‹จ์ถ• ์‹œ์ผฐ๋‹ค. ๋ฟ๋งŒ์•„๋‹ˆ๋ผ ๊ธฐ๋ณธ ๋ฒˆ๋“ค๋Ÿฌ ๋„๊ตฌ๋กœ Webpack5๋ฅผ ์ œ๊ณตํ•จ์œผ๋กœ์จ Webpack5์˜ ์žฅ์ ์„ Next.js 11์—์„œ๋„ ์ฒด๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
    ๋˜ํ•œ next/script, next/image์™€ ๊ฐ™์€ ๋ชจ๋“ˆ๋„ ์ œ๊ณตํ•˜์—ฌ ์†์‰ฝ๊ฒŒ ์Šคํฌ๋ฆฝํŠธ ์ œ์–ด์™€ ์ด๋ฏธ์ง€ ํ”Œ๋ ˆ์ด์Šค ํ™€๋” ์ œ์–ด๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ ์™ธ์— Create React App Migration, Next.js Live ๊ธฐ๋Šฅ์„ ์‹คํ—˜์ ์œผ๋กœ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

    ES2021

    2021.6.22 ES2021 ์ŠคํŽ™์ด ์ •์‹ ์Šน์ธ ๋˜์—ˆ๋‹ค.

    • Logical Assignment Operators (&&= ||= ??=)
    • Numeric Separators (1_000)
    • Promise.any & AggregateError
    • String.prototype.replaceAll
    • WeakRefs & FinalizationRegistry

    ES2021 ์ŠคํŽ™์˜ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋Š” ๋‹ค์Œ ๋งํฌ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค.
    https://h3manth.com/ES2021/

    How To Fix Cumulative Layout Shift (CLS) Issues

    ์ด๋ฏธ์ง€ ํฌ๊ธฐ ๋ถ€ํ„ฐ ํฐํŠธ, JavaScript ์ ์šฉ๋“ฑ ๋‹ค์–‘ํ•œ ์˜์—ญ์—์„œ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ๋Š” CLS ์ด์Šˆ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์กฐ๋ชฉ ์กฐ๋ชฉ ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค. ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” ์„œ๋น„์Šค์— ์ฐจ๊ทผ์ฐจ๊ทผ ์ ์šฉํ•ด๋ณด๊ธฐ ์ข‹์€ ๊ธ€์ด๋‹ค.

    CSS For Web Vitals ๊ธ€๋„ ํ•จ๊ป˜ ์ฐธ๊ณ ํ•˜๊ธฐ ๋ฐ”๋ž€๋‹ค.

    Towards a better responsiveness metric

    ์‚ฌ์šฉ์ž ๋ฐ˜์‘์„ฑ์— ์˜ํ–ฅ์„ ๋ฏธ์น ์ˆ˜ ์žˆ๋Š” metric๋กœ FID(First Input Delay)๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์‚ฌ์šฉ์ž ๋ฐ˜์‘์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ๋ช‡๊ฐ€์ง€ ์•„์ด๋””์–ด๋ฅผ ๊ธฐ์ˆ ํ•˜๊ณ  ์žˆ๋‹ค.

    Introducing Aurora

    ํฌ๋กฌ ์—”์ง€๋‹ˆ์–ด(๋‚ด๋ถ€ ์ฝ”๋“œ๋ช… WebSDK)ํŒ€ ์€ ์ง€๋‚œ 2๋…„๊ฐ„ ์ฃผ์š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ/๋„๊ตฌ๋“ค๊ณผ์˜ ํ˜‘์—…์„ ํ†ตํ•ด ๋” ๋‚˜์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ์„ ํ•ด์™”์œผ๋ฉฐ, ์ง€๋‚œ 6์›” 15์ผ ์ด๋ฅผ "Aurora"๋ผ ๋ช…๋ช…ํ–ˆ๋‹ค.

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

    Aurora์˜ ์ฒซ ๋ฒˆ์งธ ์ž‘์—…์€ "Comformance"๋ผ ๋ถˆ๋ฆฌ๋ฉฐ, JavaScript ํ”„๋ ˆ์ž„์›Œํฌ ์ƒํƒœ๊ณ„์— ์ง‘์ค‘ํ•ด ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋กœ๋”ฉ ์„ฑ๋Šฅ๊ณผ Core Web Vitals ์ ์ˆ˜๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋”ฉ ๋ชจ๋ฒ”์‚ฌ๋ก€๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์›€์„ ์ฃผ๋Š” ๊ฒƒ์— ๋ชฉํ‘œ๋ฅผ ๋‘๊ณ  ์žˆ๋‹ค.

    Forming the WebExtensions Community Group

    ์ง€๋‚œ ์ˆ˜๋…„๊ฐ„ ๋ธŒ๋ผ์šฐ์ € ํ™•์žฅ ์ต์Šคํ…์…˜(ํ”Œ๋Ÿฌ๊ทธ์ธ)๋“ค์˜ ์‚ฌ์šฉ์˜ ์ฆ๊ฐ€์™€ ํ•จ๊ป˜ ๋‹ค์ˆ˜ ๋ธŒ๋ผ์šฐ์ €๋“ค์—์„œ์˜ ์ƒํ˜ธ ํ˜ธํ™˜ ๋ชจ๋ธ ์ฑ„ํƒ ๋“ฑ์˜ ์›€์ง์ž„์— ๋”ฐ๋ผ ํ™•์žฅ ์ต์Šคํ…์…˜์˜ ํ‘œ์ค€ํ™”๋œ ์ ‘๊ทผ์˜ ํ•„์š”์„ฑ์ด ๋Œ€๋‘๋˜์—ˆ๊ณ , ์ด๋ฅผ ์œ„ํ•ด W3C ์‚ฐํ•˜ WebExtenstions Community Group(WECG)๊ฐ€ ์ง€๋‚œ 6์›” 4์ผ ์ฃผ์š” ๋ธŒ๋ผ์šฐ์ € ๋ฒค๋”๋“ค์ธ Apple, Google, MS ๊ทธ๋ฆฌ๊ณ  Mozilla๊ฐ€ ์ฐธ์—ฌ๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค.

    History of the Web: Part 1

    ์ €์ž์˜ ์ง€๋‚œ 20๋…„๊ฐ„ ์›น ์˜์—ญ์—์„œ์˜ ๊ธฐ์ˆ ์  ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์„ ํ†ตํ•ด ์›น์˜ ์—ญ์‚ฌ๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์˜ ๊ธ€์ด๋‹ค.

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

    MDN Plus

    MDN์—์„œ๋Š” ์—…๊ณ„์˜ ์ „๋ฌธ๊ฐ€๋“ค์ด ์ฐธ์—ฌํ•˜๋Š” ์›”๊ฐ„ ์‹ฌ์ธต ๊ธฐ์ˆ ์  ๋ฌธ์„œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ƒˆ๋กœ์šด ์œ ๋ฃŒ(์›” $10 ๋˜๋Š” ์—ฐ $100 ์ •๋„์˜) ํ”„๋ฆฌ๋ฏธ์—„ ์„œ๋น„์Šค์ธ "MDN Plus"๋ฅผ ๊ณ„ํšํ•˜๊ณ  ์žˆ๋‹ค. ๊ธฐ์กด์˜ MDN Web Docs๋Š” ์–ด๋– ํ•œ ๋ณ€ํ™”๋„ ์—†์ด ๊ธฐ์กด๊ณผ ๊ฐ™์ด ๋ฌด๋ฃŒ๋กœ ์ œ๊ณต๋  ๊ฒƒ์ž„์„ ๋ฐํžˆ๊ณ  ์žˆ๋‹ค.

    ํŠœํ† ๋ฆฌ์–ผ

    Anyone Can Learn CSS Grid

    CSS Grid์˜ ํ•ต์‹ฌ ์š”์†Œ๋“ค์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค. ์ง์ ‘ Grid ์†์„ฑ๋“ค์— ๋Œ€ํ•œ ๊ฐ’์„ ์ž…๋ ฅํ•ด ๋ Œ๋”๋ง ๊ฒฐ๊ณผ๋ฅผ ์ฆ‰์‹œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด, ๋งค์šฐ ์ง๊ด€์ ์ธ ํ•™์Šต์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

    Generating (and Solving!) Sudokus in CSS

    JavaScript ํ•œ ์ค„ ์—†์ด ์Šค๋„์ฟ ๋ฅผ ๊ตฌํ˜„ํ•œ ํŠœํ† ๋ฆฌ์–ผ์ด๋‹ค. CSS๋ฅผ ์ด์šฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ฒฝํ—˜ํ•ด ๋ณด๊ธฐ์—๋Š” ์ถฉ๋ถ„ํ•œ ํŠœํ† ๋ฆฌ์–ผ์ด๋‹ค.

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

    Utopia

    ๋””์ž์ธ๊ณผ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(VSCode)์ด ํ†ตํ•ฉ๋œ ์˜จ๋ผ์ธ React ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋„๊ตฌ๋กœ ์ œ๊ณต๋˜๋Š” ๋””์ž์ธ ๋„๊ตฌ์™€ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„ ํŽธ์ง‘๊ณผ ์™„์„ฑ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์•„์ง ๊ฐœ๋ฐœ ์ดˆ๊ธฐ ๋‹จ๊ณ„์ง€๋งŒ, ์ง์ ‘ ์‚ฌ์šฉํ•ด ๋ณผ์ˆ˜ ์žˆ๋‹ค. ๋ณด๋‹ค ์ž์„ธํ•œ ๋‚ด์šฉ์€ Introducing Utopia๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    The DOM Event Visualizer

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

    DOM ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ๋ณด๋‹ค ๊นŠ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๋‹ค์Œ์˜ ๋ฌด๋ฃŒ ์˜จ๋ผ์ธ ๊ฐ•์˜ ๋™์˜์ƒ์„ ์ฐธ๊ณ ํ•˜๋ผ.
    Your Ultimate Guide to Understanding DOM Events

    yare.io

    JavaScript ์ฝ”๋“œ ์ž‘์„ฑ์„ ํ†ตํ•ด ์œ ๋‹›์„ ์ œ์–ดํ•˜๋Š” ์‹ค์‹œ๊ฐ„ ์ „๋žต ๊ฒŒ์ž„์ด๋‹ค.

    CyberChef

    ์‚ฌ์ด๋ฒ„์ƒ์˜ "์Šค์œ„์Šค ์•„๋ฏธ ๋‚˜์ดํ”„"๋ฅผ ํ‘œ๋ฐฉํ•ด, ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ๋ณ€ํ™˜์ž‘์—…(์•”ํ˜ธํ™”, ์ธ์ฝ”๋”ฉ, ๋“ฑ)์„ ์†์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์›น ๋„๊ตฌ๋‹ค.

    n8n

    Node ๊ธฐ๋ฐ˜์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ž๋™ํ™” ๋„๊ตฌ๋‹ค.

    ์•„๋ž˜์˜ ๋ฐ๋ชจ ๋™์˜์ƒ์—์„ , GitHub Star์— ๋Œ€ํ•œ Slack ์•Œ๋ฆผ์„ ๋ฐ›๋Š” ์ž๋™ํ™” ๊ตฌ์„ฑ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. n8n.io - Slack Notification on Github Star

    Lighthouse Metrics

    ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์ดํŠธ์˜ Lighthouse Metrics๋ฅผ ์ง€์—ญ๋ณ„๋กœ ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋‚ด๊ฐ€ ๊ฐœ๋ฐœ ์ค‘์ธ ์„œ๋น„์Šค์˜ ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ์†์‰ฝ๊ฒŒ ํ™•์ธํ•ด๋ณด์ž.

    Google Map React

    Google Map React๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๊ตฌ๊ธ€ ์ง€๋„ ์œ„์— ์–ด๋– ํ•œ React ์ปดํฌ๋„ŒํŠธ๋ผ๋„ ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

    Wu Tang Lorem Ipsum Text Generator

    Vanilla JavaScript๋กœ ์ž‘์„ฑ๋œ ํ…์ŠคํŠธ ์ƒ์„ฑ๊ธฐ๋กœ ํ…Œ์ŠคํŠธ ์šฉ๋„๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    Better Comments

    VS Code Extension์œผ๋กœ Alerts, Query, TODO, Highlight์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์ปค๋ฉ˜ํŠธ๋ฅผ ํŽธ์ง‘๊ธฐ์—์„œ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

    Highlight Matching Tag

    HTML ํƒœ๊ทธ ์ง์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œ์‹œํ•ด์ฃผ๋Š” VS Code Extension ์ด๋‹ค.

    depcheck

    depcheck๋ฅผ ํ†ตํ•ด ์‹ค์ œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋ˆ„๋ฝ๋œ npm ๋ชจ๋“ˆ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค. CI์— ๋„์ž…ํ•˜๋ฉด ์ข‹์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

    $> depcheck /path/to/my/project
    Unused dependencies
    * underscore
    Unused devDependencies
    * jasmine
    Missing dependencies
    * lodash