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

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

    2024-07

    ๐Ÿ“š ๋งํฌ & ์ฝ์„ ๊ฑฐ๋ฆฌ

    Web Engines Hackfest 2024

    Web Engines Hackfest๋Š” 2009๋…„ WebkitGTK+ Hackfest๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ฒ˜์Œ ์‹œ์ž‘๋œ ์ด๋ž˜ ๋งคํ•ด ์ง„ํ–‰๋˜๋Š” ์ฝ˜ํผ๋Ÿฐ์Šค๋‹ค. ๋ช…์นญ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ๋ธŒ๋ผ์šฐ์ €์™€ ๊ด€๋ จ ํ‘œ์ค€, ๊ทธ๋ฆฌ๊ณ  ์›น ์—”์ง„ ์ฃผ์ œ๋“ค์„ ์ง‘์ค‘์ ์œผ๋กœ ๋‹ค๋ฃฌ๋‹ค.

    ์˜ฌํ•ด๋Š” ์ด 8๊ฐœ์˜ ์„ธ์…˜์ด ์ง„ํ–‰๋˜์—ˆ๊ณ , ํฅ๋ฏธ๋กœ์šด ๋ช‡๋ช‡ ์„ธ์…˜๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    • The Future of Source Maps (๋ฐœํ‘œ์ž๋ฃŒ) - Jonathan Kuperman

      • ์†Œ์Šค ๋งต์€ 2009๋…„ ์ฒ˜์Œ ๊ฐœ๋ฐœ๋œ ํ›„๋กœ ์‚ฌ์–‘์€ ํฌ๊ฒŒ ๋ณ€ํ•˜์ง€ ์•Š์•˜๋‹ค. ์ด๋กœ ์ธํ•ด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ์ •์ฒด๋˜์–ด ์™”์œผ๋‚˜, 2023๋…„์— ํ˜„๋Œ€ํ™”๋ฅผ ์œ„ํ•œ ๊ทธ๋ฃน์ด ๊ตฌ์„ฑ๋˜์–ด ๊ณต์‹ TC39 ํ…Œ์Šคํฌ ๊ทธ๋ฃน์œผ๋กœ ์Šน๊ฒฉ๋˜์—ˆ๋‹ค. ์ด ์„ธ์…˜์€ ์‚ฌ์–‘์— ํฌํ•จ๋  ํฅ๋ฏธ๋กœ์šด ์‹ ๊ทœ ๊ธฐ๋Šฅ๋“ค์„ ์†Œ๊ฐœํ•œ๋‹ค.
    • Firefox Wayland post mortem (๋ฐœํ‘œ์ž๋ฃŒ) - Martin Stransky -Firefox๋Š” ์ตœ๊ทผ ๋””์Šคํ”Œ๋ ˆ์ด ํ”„๋กœํ† ์ฝœ์ธ Wayland๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ „ํ™˜ํ–ˆ๋‹ค. ์ „ํ™˜์— ๋”ฐ๋ฅธ ์žฅ๋‹จ์ ๊ณผ ์‚ฌ์šฉ์ž์˜ ๋ฐ˜์‘์— ๋Œ€ํ•œ ํฌ์ŠคํŠธ ๋ชจํ…œ์„ ๊ณต์œ ํ•œ๋‹ค.

    • Nova JavaScript Engine โ€“ Exploring a Data-Oriented Engine Design (๋ฐœํ‘œ์ž๋ฃŒ) - Aapo Alasuutari

      • ๋ฐ์ดํ„ฐ ์ง€ํ–ฅ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ Rust์—์„œ ๊ธฐ๋ณธ JavaScript ์—”์ง„์„ ์ž‘์„ฑํ•  ๋•Œ์˜ ์žฅ/๋‹จ์ ์„ ์‚ดํŽด๋ณธ๋‹ค.
    • Sustainable Futures: Funding the Web Ecosystem (๋ฐœํ‘œ์ž๋ฃŒ) - Stephanie Stimac

      • ์›น์€ ์„ธ๊ณ„ ์‚ฌํšŒ ๊ธฐ๋ฐ˜ ์‹œ์„ค์„ ๋‹ด๋‹นํ•˜๊ณ , ํ˜„๋Œ€ ์‚ฌํšŒ์˜ ์ผ๊ณผ ์‚ถ์„ ํ˜•์„ฑํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์›น ์ƒํƒœ๊ณ„์˜ ์ง€์†์„ฑ์€ ์ทจ์•ฝํ•˜๋ฉฐ ์ง€์† ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์— ์ฒ˜ํ•ด ์žˆ๋‹ค. ๋ฏธ๋ž˜ ์„ธ๋Œ€๊ฐ€ ์•ˆ์ •์ ์ด๊ณ  ์ง€์† ๊ฐ€๋Šฅํ•œ ์ •๋ณด ์ ‘๊ทผ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•๋“ค์„ ๋‹ค๋ฃฌ๋‹ค.
    • History of WebGPU in Deno (๋ฐœํ‘œ์ž๋ฃŒ) - Leo Kettmeir

      • Deno๋Š” 2021๋…„ ์ดˆ๋ถ€ํ„ฐ WebGPU๋ฅผ ์ง€์›ํ•ด ์™”์ง€๋งŒ, ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚œ WebGPU ๊ตฌํ˜„์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์–ด๋ ค์›€์ด ์žˆ์—ˆ๋‹ค. ์ด ์„ธ์…˜์€ ์ง€์›์„ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ผ๋ จ์˜ ์ด๋ฒคํŠธ์™€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์†Œ๊ฐœํ•œ๋‹ค.
    • Status of the Layer-Based SVG Engine in WebKit (๋ฐœํ‘œ์ž๋ฃŒ) - Nikolas Zimmermann

      • HTML ๋ฐ SVG ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด Webkit ์šฉ SVG ์—”์ง„์ธ LBSE(Layer Based SVG Engine)๋ฅผ ์†Œ๊ฐœํ•œ๋‹ค.

    Config 2024

    Config๋Š” Figma์—์„œ ์ฃผ์ตœํ•˜๋Š” ๋””์ž์ธ ์ปจํผ๋Ÿฐ์Šค๋กœ, ์ด๋ฒˆ์— ์†Œ๊ฐœ๋œ ๊ธฐ๋Šฅ๋“ค ์ค‘ AI ๊ธฐ๋ฐ˜์˜ ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์€ Front-end ๊ฐœ๋ฐœ์ž๋“ค์ด ์ฃผ๋ชฉํ•  ๋งŒํ•˜๋‹ค.

    • ํ”„๋กฌํ”„ํŠธ ์ž…๋ ฅ์„ ํ†ตํ•œ ์ž๋™ ๋””์ž์ธ ์ƒ์„ฑ
    • ํ”„๋กœํ† ํƒ€์ž…์˜ ์ž๋™ ์—ฐ๊ฒฐ

    ์ด ๊ธฐ๋Šฅ๋“ค์€ ๋””์ž์ด๋„ˆ์™€ ๊ฐœ๋ฐœ์ž์˜ ํšจ์œจ์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€๋œ๋‹ค.

    [์ฐธ๊ณ ] ํ•œ๊ธ€ ์ปจํผ๋Ÿฐ์Šค ์š”์•ฝ

    Scan HTML faster with SIMD instructions: Chrome edition

    ์ตœ์‹  ํ”„๋กœ์„ธ์„œ์—๋Š” ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๋ฐ”์ดํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ช…๋ น์–ด๊ฐ€ ์žˆ๊ณ , ์‚ฌ์‹ค์ƒ ํ•œ ๋ฒˆ์— 16๋ฐ”์ดํŠธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Ÿฌํ•œ ๋ช…๋ น์–ด๋ฅผ ๋‹จ์ผ ๋ช…๋ น์–ด, ๋‹ค์ค‘ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ SIMD(Single Instruction Multiple Data)๋ผ ํ•œ๋‹ค.

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

    ์ด์— ์˜๊ฐ์„ ๋ฐ›์•„ Google Chrome ๋ธŒ๋ผ์šฐ์ €(Chromium)์˜ ์—”์ง„์€ HTML ์ž…๋ ฅ์— ๋Œ€ํ•œ SIMD ๊ตฌ๋ฌธ ๋ถ„์„์„ ์ฑ„ํƒํ–ˆ๋‹ค.

    JavaScript Framework Maintainers on Unification Potential

    React Summit 2024์˜ Fireside Chat ์„ธ์…˜์—์„œ ์˜ค๋Š˜๋‚ ์˜ Front-end ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์ด Signals(Angular Signals, SolidJS signals)๊ณผ ๊ฐ™์€ ๋™์ผ ๊ธฐ๋Šฅ์„ ํ–ฅํ•ด ๋‚˜์•„๊ฐ€๊ณ  ์žˆ๊ณ , ์ด ๋ฐฉํ–ฅ์„ฑ์œผ๋กœ ๋‚˜์•„๊ฐ„๋‹ค๋ฉด ์–ธ์  ๊ฐ€ ํ•˜๋‚˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ํ†ตํ•ฉ๋  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ์— ๋Œ€ํ•œ ์˜๊ฒฌ์„ ๋‚˜๋ˆด๋‹ค.

    ์‚ฌ์‹ค ๋…ผ์˜ ๊ฒฐ๊ณผ๋ฅผ ์งง๊ฒŒ ์š”์•ฝํ•˜๋ฉด, "๊ทธ๋ ‡์ง€ ์•Š๋‹ค"์˜€๋‹ค.

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

    So You Want To Build A Browser Engine

    ์ง„์ง€(?) ํ•œ ๊ด€์ ์—์„œ Chromium๊ณผ ๊ฒฝ์Ÿํ•˜๊ฑฐ๋‚˜ ๋˜๋Š” ๋Šฅ๊ฐ€ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ € ์—”์ง„์„ ๋งŒ๋“ค ๋•Œ ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ๋Š” ์กฐ์–ธ๋“ค์„ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    Progressive Web Apps (PWAs) Phishing

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

    [์ฐธ๊ณ ] ํ”ผ์‹ฑ์— ์‚ฌ์šฉ๋œ ๋ฐ๋ชจ ์†Œ์Šค๋Š” ๋‹ค์Œ ์ €์žฅ์†Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    • https://github.com/mrd0x/PWA-Phishing

    News from WWDC24:WebKit in Safari 18 beta

    Safari 18 Beta WebKit์— ์ถ”๊ฐ€๋œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์†Œ๊ฐœํ•œ๋‹ค. Safari 18์€ macOS Sequoia beta๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    2023๋…„ ์ถ”๊ฐ€๋œ Web Apps๋Š” ๋ชจ๋“  ์›น์‚ฌ์ดํŠธ(PWA ํ˜•ํƒœ์ด๊ฑฐ๋‚˜ ๊ทธ๋ ‡์ง€ ์•Š์€)๋“ค์„ dock์— ์†์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•ด ์•ฑ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฒˆ ์—…๋ฐ์ดํŠธ๋Š” dock์„ ํ†ตํ•ด ์—ด๋ ค์žˆ๋Š” Web Apps์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ๋‹ค๋ฅธ ๊ณณ์—์„œ ํด๋ฆญ๋˜๋Š” ๊ฒฝ์šฐ์—๋„ OS์˜ ๊ธฐ๋ณธ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹Œ ์›น์•ฑ์„ ํ†ตํ•ด ์—ด๋ฆฌ๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

    ๋˜ํ•œ HTML ์ž…๋ ฅ ์š”์†Œ๋“ค์— ์ œ์•ˆ ํ…์ŠคํŠธ๋ฅผ ๋…ธ์ถœํ•˜๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” writingsuggestions ์†์„ฑ์˜ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ๊ณ , ์ •๊ทœ์‹์—์„œ๋Š” Unicode 15.1.0 ๋ฌธ์ž๋“ค์˜ ์ง€์› ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ๊ฐœ์„ ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    Inline conditionals in CSS?

    CSS WG์€ 24๋…„ 6์›” ํšŒ์˜์—์„œ ๋…ผ์˜๋ฅผ ํ†ตํ•ด ์ธ๋ผ์ธ if() ํ•จ์ˆ˜ ๋ฌธ๋ฒ• ์ถ”๊ฐ€์— ๋Œ€ํ•œ ํ•ฉ์˜๋ฅผ ์ด๋ค˜๋‹ค.

    /* ์‚ฌ์šฉ ์˜ˆ์‹œ */
    animation: if(media(prefers-reduced-motion) ? 10s : 1s) rainbow infinite;
    

    ํ•ฉ์˜๊ฐ€ ์ด๋ค„์ง€๊ธด ํ–ˆ์ง€๋งŒ, ํ‘œ์ค€ ๋ช…์„ธ์— ๋„๋‹ฌํ•˜๊ธฐ ๊นŒ์ง€๋Š” ๊ธด ๊ณผ์ •(๋‚™๊ด€์  ๊ด€์ ์—์„œ๋„ 2๋…„์—ฌ)์ด ์˜ˆ์ƒ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์„ฑ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ธก๋ฉด์—์„œ ๊ธฐ๋Œ€๋˜๋Š” ๋ช…์„ธ๋‹ค. ๋ช…์„ธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋…ผ์˜๋Š” ์ œ์•ˆ์„œ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    1,100km ๋–จ์–ด์ ธ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ UX ๋ฆฌ์„œ์น˜๋ถ€ํ„ฐ ๊ณผ๊ฐํ•œ ๋ฆฌ๋‰ด์–ผ๊นŒ์ง€์˜ ๊ธฐ๋ก

    ์ผ๋ณธ์˜ ์ตœ๋Œ€ ๊ทœ๋ชจ ์Œ์‹ ๋ฐฐ๋‹ฌ ์„œ๋น„์Šค์ธ ๋ฐ๋งˆ์—์นธ์˜ MerchantApp UX/UI ๋ฆฌ๋‰ด์–ผ ๊ฒฝํ—˜์„ ์†Œ๊ฐœํ•˜๋Š” ๊ธ€์ด๋‹ค.

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

    Transpiler, โ€œ์‚ฌ์šฉโ€๋ง๊ณ  โ€œํ™œ์šฉโ€ํ•˜๊ธฐ

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

    ๐Ÿ•น ํŠœํ† ๋ฆฌ์–ผ

    Hands-On Guide to Property-Based Testing in JavaScript

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

    How to publish a JavaScript package in 2024

    Deno์˜ JSR์€ ํ–ฅ์ƒ๋œ ๋ฌธ์„œ์™€ ์›ํ™œํ•œ ๋Ÿฐํƒ€์ž„ ๊ฐ„ ํ˜ธํ™˜์„ฑ์„ ํ†ตํ•ด ํŒจํ‚ค์ง€์˜ ํผ๋ธ”๋ฆฌ์‹ฑ๊ณผ ์†Œ๋น„๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค. ํŠนํžˆ TypeScript๋กœ JavaScript ํŒจํ‚ค์ง€๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ธฐ์กด์˜ ๋ฐฉ๋ฒ•์€ transpiling, ๋‹ค์–‘ํ•œ ๋‚ด๋ณด๋‚ด๊ธฐ ์กฐ๊ฑด์— ๋”ฐ๋ฅธ package.json ์„ค์ •, ๋Œ€์šฉ๋Ÿ‰ npm tarball ์ฒ˜๋ฆฌ ๋“ฑ์˜ ๋ณต์žกํ•จ์ด ์ˆ˜๋ฐ˜๋œ๋‹ค.

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

    How to Make a CSS Timer

    ์นด์šดํŠธ๋‹ค์šด์„ ๊ฐœ๋ฐœํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ์•„๋งˆ๋„ JavaScript ํƒ€์ด๋จธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋– ์˜ฌ๋ฆด ๊ฒƒ์ด๋‹ค.

    CSS ๋งŒ์œผ๋กœ ์นด์šดํŠธ๋‹ค์šด์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ณ  ์žˆ๋Š”๊ฐ€? CSS Houdini์˜ ์ผ์›์ธ @property์™€ keyframe ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‚ฌ์šฉํ•ด ํƒ€์ด๋จธ ์นด์šดํŠธ๋‹ค์šด์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

    Array.reduce() is Goated ๐Ÿโœจ

    Array.reduce()์˜ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์‚ฌ์šฉ์€ ๋ฐฐ์—ด์˜ ๊ฐ’์„ ๋”ํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ ์™ธ์—๋„ ๋ฐฐ์—ด์˜ ํ‰ํƒ„ํ™”(flat), ํ‰๊ท ๊ฐ’ ๊ณ„์‚ฐ, ๊ณ ์œ ๊ฐ’ ์ƒ์„ฑ ๋“ฑ ๋‹ค์–‘ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•œ๋‹ค.

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

    React Internals Explorer - easily see how React works

    React Internals Explorer ๊ฐœ๋ฐœ์ž๋Š” 2021๋…„ ์ฒ˜์Œ React ์˜์—ญ์— ๊นŠ๊ฒŒ ํŒŒ๊ณ ๋“ค๊ธฐ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ, React ๋‚ด๋ถ€๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉํŽธ์œผ๋กœ ์ง์ ‘ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๊ทธ๋ ค๋‚˜๊ฐ”๋‹ค๊ณ  ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ๋งŽ์€ ๋…ธ๋ ฅ์ด ์ˆ˜๋ฐ˜๋˜๊ณ , ์ •์  ์ด๋ฏธ์ง€ ์ˆ˜์ค€์— ๊ทธ์ณค๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๊ฒƒ์„ ๋– ์˜ฌ๋ ธ๋‹ค๊ณ  ํ•œ๋‹ค.

    Farm

    Farm์€ Vite์™€ ํ˜ธํ™˜์„ฑ์„ ๊ฐ–๋Š” Rust๋กœ ์ž‘์„ฑ๋œ ์›น ๋นŒ๋“œ ๋„๊ตฌ๋‹ค. ์ž์ฒด ๋ฒค์น˜๋งˆํฌ ์ƒ์œผ๋กœ๋Š” webpack ๋Œ€๋น„ 20๋ฐฐ, Vite ๋Œ€๋น„ 10๋ฐฐ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

    jskidpix

    Kid Pix๋Š” 1989๋…„ Macintosh ์šฉ์œผ๋กœ ๊ฐœ๋ฐœ๋œ ์–ด๋ฆฐ์ด๋“ค์„ ์œ„ํ•œ ๋น„ํŠธ๋งต ๊ทธ๋ž˜ํ”ฝ ์†Œํ”„ํŠธ์›จ์–ด๋‹ค. jskidpix๋Š” ์ด์˜ HTML/JS ๊ตฌํ˜„์ฒด๋กœ, Kid Pix์˜ ์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ์žฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค.

    Tetris Font

    Tetris Font๋Š” ํ…ŒํŠธ๋ฆฌ์Šค ๊ฒŒ์ž„์˜ ๋„ํ˜•์„ ์ด์šฉํ•ด ์ž…๋ ฅํ•œ ๊ธ€์ž๋ฅผ ๊ฒŒ์ž„์˜ ๋™์ž‘๊ณผ ๊ฐ™์ด ํ‘œํ˜„ํ•ด ์ค€๋‹ค.

    smol-string

    smol-string์€ ๋ธŒ๋ผ์šฐ์ €์˜ localStorage(๋˜ํ•œ SessionStorage)์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„๋œ ์••์ถ• ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, lz-string ๋Œ€์ฒด์ œ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ๋ฐฉ๋ฒ•์€ ์••์ถ•/ํ•ด์ œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํžˆ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋น„๋™๊ธฐ ์ˆ˜ํ–‰์€ WebWoker๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌ๋œ๋‹ค.

    ์ž์ฒด ๋ฒค์น˜๋งˆํฌ๋ฅผ ํ†ตํ•ด ๊ณต๊ฐœ๋œ ๊ฒฐ๊ณผ์— ๋”ฐ๋ฅด๋ฉด ๋ชจ๋“  ๋ถ€๋ถ„์—์„œ lz-string ๋ณด๋‹ค ๋‚˜์€ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๋‹ค.

    Ark UI

    Ark UI๋Š” Chakra UI ๊ฐœ๋ฐœํŒ€์—์„œ ๊ฐœ๋ฐœํ•œ headless UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ 37๊ฐœ์˜ ๋‹ค์–‘ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ํ˜„์žฌ๋Š” React, Solid ๊ทธ๋ฆฌ๊ณ  Vue์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    matcha.css

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

    <link rel="stylesheet" href="https://matcha.mizu.sh/matcha.css">
    

    ๊ฐ„๋‹จํžˆ match.css ํŒŒ์ผ์„ ๋ฌธ์„œ์— ๋กœ๋”ฉํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ฌผ๋ก  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํƒœ๊ทธ๋“ค๊ณผ CSS ๋ณ€์ˆ˜๋“ค์„ ์ž์‹ ์˜ ์Šคํƒ€์ผ์— ๋งž๊ฒŒ ์˜ค๋ฒ„๋ผ์ด๋“œํ•  ์ˆ˜ ์žˆ๋‹ค.

    dossi is now open source

    dossi๋Š” GitHub ๋‚ด์— ๊ฐœ์ธ ๋…ธํŠธ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์›น์•ฑ์ด๋‹ค. ๋‚˜์ค‘์— ๋‹ค์‹œ ํ™•์ธํ•˜๊ณ  ์‹ถ์€ ์ด์Šˆ, ์•„์ด๋””์–ด, ์ƒ๊ฐ ๋“ฑ์„ ๊ธฐ๋กํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋กœ 24๋…„ 5์›” ์˜คํ”ˆ์†Œ์Šค๋กœ ์ „ํ™˜๋˜์—ˆ๋‹ค.

    ๊ธ€์„ ํ†ตํ•ด dossi ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ์˜ ๋„์ „์ ์ธ ์ด์Šˆ๋“ค๊ณผ ๊ธฐ์ˆ  ์Šคํƒ ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    One Million checkboxes

    ๋…ธ์ถœ๋˜๋Š” ๋ฐฑ๋งŒ ๊ฐœ์˜ ์ฒดํฌ๋ฐ•์Šค๋“ค ์ค‘, ์ฐธ์—ฌ์ž๋“ค์ด ์ฒดํฌ(๋˜๋Š” ํ•ด์ œ)ํ•˜๋ฉด ์ฐธ์—ฌ์ค‘์ธ ๋‹ค๋ฅธ ๋ชจ๋“  ์ด๋“ค์—๊ฒŒ๋„ ์ƒํƒœ๊ฐ€ ๊ณต์œ ๋˜๋Š” ๊ฒŒ์ž„(?)์ด๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ž์‹ ์˜ ์นœ๊ตฌ์™€์˜ ๋Œ€ํ™”์—์„œ ์•„์ด๋””์–ด๋ฅผ ๋– ์˜ฌ๋ ธ๋‹ค๊ณ  ํ•œ๋‹ค.

    ํšจ์œจ์ ์ธ ์ƒํƒœ ์ €์žฅ์„ ์œ„ํ•ด bit array๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ , ์ƒํƒฏ๊ฐ’์€ redis์— ์ €์žฅ๋œ๋‹ค. ๊ฐœ๋ณ„์ ์ธ ํ† ๊ธ€์˜ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์€ ์›น์†Œ์ผ“์„ ํ†ตํ•ด 30์ดˆ๋งˆ๋‹ค ์ „์†ก๋˜๋ฉฐ, react-window๋ฅผ ํ†ตํ•ด ๋ทฐํฌํŠธ์— ๋…ธ์ถœ๋˜์ง€ ์•Š๋Š” ์ฒดํฌ๋ฐ•์Šค๋Š” ๋ Œ๋”๋ง ๋˜์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

    [์ฐธ๊ณ ] ๊ฐœ๋ฐœ์ž์˜ ๋ธ”๋กœ๊ทธ์—์„œ ๋” ๋งŽ์€ ๊ฐœ๋ฐœ ๋’ท์ด์•ผ๊ธฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.