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

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

    2022-03

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

    State of JS 2021

    ์ง€๋‚œ 1๋…„๊ฐ„ Front-end ์˜์—ญ์—์„œ์˜ ๋ณ€ํ™”์™€ ์•ž์œผ๋กœ์˜ ์ „๋ง์„ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋Š” State of JS 2021 ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœํ‘œ๋˜์—ˆ๋‹ค.

    ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์ „ ์„ธ๊ณ„์˜ ๊ฐœ๋ฐœ์ž๋“ค์˜ ์„ ํ˜ธ๋„์™€ ๋งŒ์กฑ๋„๋ฅผ ์ •๋ฆฌ๋œ ์ž๋ฃŒ๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    TL;DR

    • ํ”„๋ ˆ์ž„์›Œํฌ: Angular์˜ ์ถฉ๊ฒฉ์  ์ˆœ์œ„์™€ Vue.js์˜ ํ•˜๋ฝ์„ธ
    • ๋นŒ๋“œ ๋„๊ตฌ: Webpack์˜ ์ง€์†์  ํ•˜๋ฝ์„ธ์™€ Vite, esbuild, swc๋กœ์˜ ์„ธ๋Œ€๊ต์ฒด
    • Back-end: Gastby๋Š” ์ˆœ์œ„์˜ ์ œ์ผ ๋งˆ์ง€๋ง‰์— ๋žญํ‚น
    • ๋ชจ๋ฐ”์ผ & ๋ฐ์Šคํฌํ†ฑ: Tauri์˜ ๋“ฑ์žฅ

    [์ฐธ๊ณ ] ๋น ๋ฅด๊ฒŒ ์ „์ฒด ์„ค๋ฌธ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ์ธ์‚ฌ์ดํŠธ๋ฅผ ํ›‘์–ด ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด, ๋‹ค์Œ ๋™์˜์ƒ์„ ์ฐธ๊ณ ํ•˜๋ผ. The Shocking State of JavaScript // The Code Report

    The Harsh Reality for JS Developers: If You Don't Study The Fundamentals You Will Be Just Another โ€œCoderโ€

    ์ž์‹ ์ด 15์‹œ๊ฐ„ ๋‚ด๋‚ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ณผ์ •์—์„œ ๋ชจ๋‘๊ฐ€ ๋‚˜์˜ ์˜๊ฒฌ๊ณผ ๋‹ต๋ณ€์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํ™ฉ์—์„œ, ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์„ค๋ช…ํ•  ์ ์ ˆํ•œ ๋‹จ์–ด๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜ ๋˜๋Š” ๋งค์ผ ๋‹ค๋ฃจ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ/์–ธ์–ด(React Hooks, TypeScript ๋“ฑ)๋“ค์ด ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ์˜ค๋Š˜๋‚ ์˜ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž๋กœ์จ ์“ฐ๋ผ๋ฆฐ ๋‹ค์Œ์˜ ํ˜„์‹ค์— ์ง๋ฉดํ•˜๊ฒŒ ๋œ๋‹ค.

    "๊ธฐ์ˆ ์˜ ๋น ๋ฅธ ๋ฐœ์ „์— ๋Œ€๋น„ํ•ด, ์šฐ๋ฆฌ๋Š” ์‹œ๊ฐ„๊ณผ์˜ ์‹ธ์›€์—์„œ ์ง€๊ณ  ์žˆ๋‹ค"๋ผ๋Š” ์‚ฌ์‹ค์ด๋‹ค.

    ๊ธ€์˜ ์ €์ž๋Š” 4๋…„ ๋™์•ˆ, ๊ธฐ์ˆ ์  ์Šคํ‚ฌ ํ–ฅ์ƒ์„ ์œ„ํ•œ ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•๋“ค์„ ์ฐพ๊ธฐ ์œ„ํ•œ ๊ณผ์ •๋“ค์„ ํ†ตํ•ด JavaScript ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ค‘/๊ณ ๊ธ‰ ๋ ˆ๋ฒจ์— ๋” ๋นจ๋ฆฌ ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ฃผ์š” ์ •๋ณด(5๋‹จ๊ณ„)๋ฅผ ๊ณต์œ ํ•œ๋‹ค.

    How a $725M VC Judges Your Engineering Team w/ Redpoint Ventures' Jason Warner

    ์ „ GitHub CTO์˜€๋˜ Jason Warner(ํ˜„ Redpoint ๋ฒค์ฒ˜ ์บํ”ผํ„ธ ๋งค๋‹ˆ์ €)์˜ ํŒŸ์บ์ŠคํŠธ ์ธํ„ฐ๋ทฐ(ํŒŸ์บ์ŠคํŠธ 15:20 ๋ถ„๊ฒฝ)์—์„œ ๊ทธ๋Š” Full-stack ๊ฐœ๋ฐœ์ด ์œ ํ–‰ํ•˜๊ณ  ์žˆ์ง€๋งŒ, ๋ฏธ๋ž˜์—๋Š” ๊ฐœ๋ฐœ๋˜๋Š” ์ œํ’ˆ์˜ ๋ณต์žก์„ฑ ์ฆ๊ฐ€์— ๋”ฐ๋ผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ฏธ๋ž˜์—์„œ Full-stack ์—”์ง€๋‹ˆ์–ด์˜ ๊ฐ์†Œ๊ฐ€ ์ผ์–ด๋‚  ๊ฒƒ์ด๋ฉฐ, back-end ์˜์—ญ์—์„œ๋Š” ์ „๋ฌธ์„ฑ์„ ์ง€ํ–ฅํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ์˜ ๋ณ€ํ™”์™€ ์ด๋™์ด ์ด๋ค„์งˆ ๊ฒƒ์œผ๋กœ ์˜ˆ์ธกํ–ˆ๋‹ค.

    Include diagrams in your Markdown files with Mermaid

    ์•„๋ž˜๋Š” Markdown Mermaid syntax๋กœ ๋งŒ๋“  ๋‹ค์ด์–ด๊ทธ๋žจ

      graph TD;
          A-->B;
          A-->C;
          B-->D;
          C-->D;
    

    ์ด์ œ Github์—์„œ markdown ํŒŒ์ผ์—์„œ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๋งŒ๋“ค๊ณ  ๋ Œ๋”๋ง ํ•˜๋Š”์ง€๋„ ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ์„ค๋ช…ํ•ด ์ฃผ๊ณ  ์žˆ๋‹ค.

    The Story of React

    2013๋…„ React๊ฐ€ ์ดˆ๊ธฐ์— ๋ฐœํ‘œ๋˜์—ˆ์„ ๋•Œ ์‹œ์žฅ์—์„œ์˜ ๋ฐ˜์‘์€ ์ฉ ์ข‹์ง„ ์•Š์•˜๋‹ค. ํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ React์˜ ์‹œ๋Œ€๋ผ ํ•ด๋„ ๊ณผ์–ธ์ด ์•„๋‹ ์ •๋„๋กœ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๊ณ  ์˜ํ–ฅ๋ ฅ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ๋˜์—ˆ๋‹ค.

    ์ด ์˜์ƒ์€ jQuery, Backbone, Angular ์‹œ๋Œ€๋ฅผ ๊ฑธ์ณ React ์‹œ๋Œ€๋กœ ์–ด๋–ป๊ฒŒ ์™”๋Š”์ง€์˜ ์—ญ์‚ฌ๋ฅผ ์œ ๋จธ ์žˆ๊ฒŒ ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค. 10๋ถ„์˜ ์‹œ์ฒญ ์‹œ๊ฐ„ ๋™์•ˆ React์˜ ๊ด€์ ์—์„œ Front-end์˜ ์—ญ์‚ฌ๋ฅผ ๊ฐ€๋ณ๊ฒŒ ๋А๊ปด๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

    Nobody at Facebook has worked on Jest for years

    Meta(Facebook)์˜ ์ธ๊ธฐ ์žˆ๋Š” ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์ธ Jest์˜ ์ฃผ์š” ๊ธฐ์—ฌ์ž์ธ Simen Bekkhus(ํ”„๋กœ์ ํŠธ ์ตœ๋‹ค ์ปค๋ฐ‹ ๊ธฐ์—ฌ์ž)๋Š” ํ”„๋กœ์ ํŠธ์˜ ํ•œ ์ด์Šˆ๋ฅผ ํ†ตํ•ด ์ˆ˜๋…„๊ฐ„ Meta ์†Œ์† ์ธ์›๋“ค์ด ์ˆ˜๋…„๊ฐ„ ๊ฐœ๋ฐœ์— ์ฐธ์—ฌํ•˜์ง€ ์•Š๊ณ  ์žˆ๋‹ค๋Š” ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋“ฑ๋กํ–ˆ๋‹ค.

    Simen์€ ์ถ”๊ฐ€ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ํ†ตํ•ด ๋ถˆํ•„์š”ํ•œ ์˜คํ•ด(์œ„์˜ ์ฝ”๋ฉ˜ํŠธ์— ๋Œ€ํ•œ ์˜๋„)๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ์ž์‹ ์€ Meta๋กœ๋ถ€ํ„ฐ Jest ํ”„๋กœ์ ํŠธ ๊ธฐ์—ฌ์— ๋Œ€ํ•œ ํ™œ๋™์„ ํ•˜๋ฉด์„œ ์–ด๋– ํ•œ ๋น„์šฉ(๋ณด์ƒ์— ๋Œ€ํ•œ ๊ธฐํšŒ๋Š” ์ œ๊ณต๋˜์—ˆ์œผ๋‚˜)๋„ ์ง€๊ธ‰๋ฐ›์ง€ ์•Š์•˜์œผ๋ฉฐ, ์ด๋Š” ๋ณด์ˆ˜ ์ง€๊ธ‰์„ ๋ฐ›๊ฒŒ ๋˜๋ฉด ํ”„๋กœ์ ํŠธ ์ฐธ์—ฌ๊ฐ€ ์—…๋ฌด์  ์„ฑ๊ฒฉ์œผ๋กœ ๋ณ€ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ฐœ์ธ์  ๊ฑฐ๋ถ€๊ฐ์œผ๋กœ ์ธํ•ด, ๊ฐœ์ธ์  ์„ ํƒ์— ๋”ฐ๋ผ ๋ณด์ƒ์— ๋Œ€ํ•œ ๊ธฐํšŒ๋ฅผ ๊ฑฐ๋ถ€ํ–ˆ๋‹ค๋Š” ๋‚ด์šฉ๋„ ํ•จ๊ป˜ ๊ณต์œ ํ–ˆ๋‹ค.

    How to Efficiently Merge Arrays in JavaScript

    JavaScript์—์„œ ๋ฐฐ์—ด์„ ํ•ฉ์น˜๋Š” ๋ฐฉ๋ฒ•์€ concat, push ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ spread ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ๋ฐฉ๋ฒ•๋“ค์ด ๋ฐฐ์—ด ์—˜๋ฆฌ๋จผํŠธ์— ์ˆซ์ž์™€ ํƒ€์ž…(์›์‹œ ํƒ€์ž… ํ˜น์€ ๊ฐ์ฒด)์— ๋”ฐ๋ผ ๋ฒค์น˜๋งˆํฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‚˜์˜ค๋Š”์ง€ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณด์ž. (์œ„ ๋ฌธ์„œ์— ์—†๋Š” [...array1, ...array2] ์ผ€์ด์Šค๊ฐ€ ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•ด์„œ ํ™•์ธํ•ด ๋ณด์ž.)

    How React server components work: an in-depth guide

    React 18๋ถ€ํ„ฐ ์ œ๊ณตํ•˜๋Š” RSC(React Server Component)๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ธฐ์กด๋ณด๋‹ค ๋น ๋ฅธ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์†๋„์™€ ์ž‘์€ ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ๋ฅผ ์œ ์ง€ํ•˜์—ฌ ๋” ์ข‹์€ ์‚ฌ์šฉ์„ฑ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. ์ง€๊ธˆ์€ ์‹คํ—˜์ ์ธ ๊ธฐ๋Šฅ์ด์ง€๋งŒ ๊ณง ๋‹ค๊ฐ€์˜ฌ ๋ฏธ๋ž˜์ด๊ธฐ์— ์ด ๊ธ€์„ ํ†ตํ•ด ์กฐ๊ธˆ ๋” ์•Œ์•„๊ฐ€๊ธธ ๋ฐ”๋ž€๋‹ค. ์ƒ๊ฐ๋ณด๋‹ค ๊ธธ์ง€ ์•Š์€ ๊ธ€์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํžˆ ์‚ดํŽด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    [์ฐธ๊ณ ] ๋น ๋ฅด๊ฒŒ ์ฝ๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฒˆ์—ญ๊ธ€์„ ์ฐธ๊ณ ํ•˜์ž.

    monorepo.tools

    Monorepos์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•˜๋Š” ๋ชจ๋“  ์ •๋ณด๋“ค์„ ์ •๋ฆฌํ•ด ๋†“์•˜๋‹ค. Monorepo๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ถ€ํ„ฐ, polyrepo ๊ตฌ์กฐ์™€์˜ ๋น„๊ต ๋“ฑ Monorepo์— ๋Œ€ํ•ด ๋” ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฆฌ์†Œ์Šค(๋™์˜์ƒ, ํŠœํ† ๋ฆฌ์–ผ, ebook ๋“ฑ) ๋“ค์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

    ๋˜ํ•œ ์ƒํƒœ๊ณ„์—์„œ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋Š” 7๊ฐœ ๋„๊ตฌ๋“ค์— ๋Œ€ํ•œ ๋น„๊ต ํ…Œ์ด๋ธ”๋„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ๋„๊ตฌ๋“ค์˜ ์žฅ๋‹จ์ ์„ ํ•œ๋ˆˆ์— ๋น„๊ตํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    ํŠœํ† ๋ฆฌ์–ผ

    From JavaScript to Rust ebook

    ์ €์ž์ธ Jarrod Overson๊ฐ€ 21๋…„ 12์›” 1์ผ ๋ถ€ํ„ฐ 24์ผ๊ฐ„ ๋งค์ผ ์ž์‹ ์˜ ๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ ๋ฅผ ํ†ตํ•ด ์—ฐ์žฌ๋ฅผ ์‹œ์ž‘ํ•œ "24 days from node.js to Rust" ์‹œ๋ฆฌ์ฆˆ ๊ธ€์ด ๊ธฐ๋Œ€ํ–ˆ๋˜ ๊ฒƒ๋ณด๋‹ค ๋งŽ์€ ์ด๋“ค์˜ ๊ด€์‹ฌ์„ ๋ถˆ๋Ÿฌ์ผ์œผํ‚ค์ž ์ด๋ฅผ ๋‹ค์ˆ˜์˜ ๊ธฐ์—ฌ์ž๋“ค์˜ ๋„์›€์„ ํ†ตํ•ด ebook ํ˜•ํƒœ๋กœ ๋งŒ๋“ค๊ณ  ๊ณต๊ฐœํ–ˆ๋‹ค.

    ์ฑ…์˜ ์ œ๋ชฉ์—์„œ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋“ฏ, ์ด ์ฑ…์€ JavaScript(node.js) ๊ฐœ๋ฐœ์ž๋“ค์˜ ๊ด€์ ์—์„œ Rust๋ฅผ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

    Three ways to create 3D particle effects

    React Three Fiber(Three.js)๋ฅผ ์‚ฌ์šฉํ•ด์„œ 3D ์ž…์ž ํšจ๊ณผ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•œ๋‹ค.

    New in JavaScript: reportError โ€“ a method to report to global event handlers

    Front-end์—์„œ ์˜ค๋ฅ˜ ๋ชจ๋‹ˆํ„ฐ๋ง์€ ์ฃผ๋กœ ์ „์—ญ ์—๋Ÿฌ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ด๋ค„์ง„๋‹ค.

    // ๋˜๋Š” window.addEventListener("error", function(){})
    window.onerror = function (message, source, lineno, colno, error) {
    	console.log("Global error: " + error.message + ", lineno: " + lineno);
    
    	return true;
    };
    
    function triggerError() {
    	throw new Error('Oh no!');
    }
    
    triggerError();
    
    // ์ถœ๋ ฅ: Global error: Oh no!, lineno: 10
    

    ํ•˜์ง€๋งŒ ๋ช‡ ๋‹จ๊ณ„ ๋” ๊นŠ์€ ๋ ˆ๋ฒจ์˜ call stack์—์„œ์˜ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋Š” ๋ณต์žกํ•ด์ง€๋ฉฐ, ์ƒํ™ฉ์— ๋”ฐ๋ผ ์˜ค๋ฅ˜ ๊ฐ์ฒด๊ฐ€ ์˜ค๋ฅ˜ ํ•ธ๋“ค๋Ÿฌ๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

    ์ „์—ญ ๋ฉ”์„œ๋“œ์ธ reportError()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด call stack ์‹คํ–‰์˜ ์ค‘๋‹จ ์—†์ด ์˜ค๋ฅ˜๋ฅผ ์ „์—ญ ์˜ค๋ฅ˜ ํ•ธ๋“ค๋Ÿฌ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

    const fns = [
     () => { console.log("I'm first!"); },
     () => { throw new Error("Oh no!"); },
     () => { console.log("I'm third!"); },
    ];
    
      
    // Iterate over the functions
    for (const fn of fns) {
    	// (1) ์—๋Ÿฌ ์ดํ›„, ๋ฐ˜๋ณต๋ฌธ ์ˆ˜ํ–‰์ด ์ค‘๋‹จ๋œ๋‹ค.
    	fn();  
    
    	try {
    		fn();
    	} catch(error) {
    		// (2) try...catch๋กœ ๊ฐ์‹ธ๋ฉด, ๋ฐ˜๋ณต๋ฌธ์ด ์ค‘๋‹จ๋˜์ง€ ์•Š์ง€๋งŒ, ์ „์—ญ ์˜ค๋ฅ˜ ํ•ธ๋“ค๋Ÿฌ๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฒ„๋ธ”๋ง ๋˜์ง€ ์•Š๋Š”๋‹ค.
    		console.error(error);
    
    		// (3) reportError()๋ฅผ ํ†ตํ•ด ์˜ค๋ฅ˜๊ฐ€ ๋ฒ„๋ธ”๋ง ๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.
    		reportError(error);
    	}
    }
    

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

    ์–ด๋А ๊ฐœ๋ฐœ์ž์˜ Resume

    Three.js๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋งŒ๋“  ๊ฐœ๋ฐœ์ž์˜ ์ด๋ ฅ์„œ ํŽ˜์ด์ง€์ด๋‹ค. ๋ธŒ๋ผ์šฐ์ € ํƒ€์ดํ‹€๋ฐ”์— ์ฐจ๋Ÿ‰์˜ ์›€์ง์ž„๊นŒ์ง€ ํ‘œํ˜„ํ•œ ์™„์„ฑ๋„ ๋†’์€ ๊ฐœ์ธ ์‚ฌ์ดํŠธ์ด๋‹ค. ์ด ์‚ฌ์ดํŠธ๋ฅผ ํ†ตํ•ด WebGL์˜ ๊ฐ€๋Šฅ์„ฑ์„ ์‚ดํŽด๋ณด๊ธฐ ๋ฐ”๋ž€๋‹ค.

    Pixi.JS

    ํ•˜๋“œ์›จ์–ด ๊ฐ€์†์„ ์ด์šฉํ•œ ๊ณ ์„ฑ๋Šฅ์˜ 2D WebGL ๋ Œ๋”๋ง ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.

    React95

    React Windows95 ์ปดํฌ๋„ŒํŠธ. ์˜ˆ์ „๋ถ€ํ„ฐ ์šด์˜์ฒด์ œ UI๋ฅผ ์›น์—์„œ ๊ตฌํ˜„ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์ข…์ข… ์žˆ์—ˆ์ง€๋งŒ ์ด ํ”„๋กœ์ ํŠธ๋Š” ์™„์„ฑ๋„๊ฐ€ ์ข€ ๋” ๋†’์•„ ๋ณด์ธ๋‹ค. ์Šคํ† ๋ฆฌ๋ถ์—์„œ ๋‹ค์–‘ํ•œ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์ง์ ‘ ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    Hotkey 2.0

    Hotkey๋Š” ๊นƒํ—™์—์„œ ๊ฐœ๋ฐœํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋‹จ์ถ•ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์š”์†Œ์— data-hotkey ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ฐ„ํŽธํ•˜๊ฒŒ ๋‹จ์ถ•ํ‚ค๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ๋ฒ•์€ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.

    <a href="/page/2" data-hotkey="j">Next</a>
    <a href="/help" data-hotkey="Control+h">Help</a>
    <a href="/rails/rails" data-hotkey="g c">Code</a>
    <a href="/search" data-hotkey="s,/">Search</a>
    
    import {install} from '@github/hotkey'
    
    // Install all the hotkeys on the page
    for (const el of document.querySelectorAll('[data-hotkey]')) {
      install(el)
    }
    

    v8n

    v8n์€ ๋ฉ”์„œ๋“œ ์ฒด์ด๋‹์„ ์‚ฌ์šฉํ•ด ์ง๊ด€์ ์œผ๋กœ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    v8n()
      .string()
      .minLength(5)
      .first("H")
      .last("o")
      .test("Hello"); // true