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

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

    2024-01

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

    Frontend predictions for 2024

    '23๋…„์€ Front-end ๋ถ„์•ผ์—์„œ ์ฃผ๋ชฉํ•  ๋งŒํ•œ ํ•œ ํ•ด์˜€๋‹ค.

    SSR ์‹œ์žฅ์„ ์„ ์ ํ•˜๊ณ  ๋ฐœ๋ช…ํ•˜๋ ค๋Š” ๊ณจ๋“œ๋Ÿฌ์‹œ, AI๋ฅผ Front-end ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์˜ ์ผ๋ถ€๋กœ ํ™œ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ๋‹ค์–‘ํ•œ ์‹œ๋„์™€ ํ•จ๊ป˜ ๋ฐ˜๋Œ€๋กœ AI๊ฐ€ ์ผ์ž๋ฆฌ๋ฅผ ๋นผ์•—์ง€ ์•Š์„๊นŒ ํ•˜๋Š” ๊ฑฑ์ •, ์ƒˆ๋กœ์šด ๋ธŒ๋ผ์šฐ์ €(Ladybird)์™€ JavaScript๋กœ ์ž‘์„ฑ๋œ Shadow ๋ธŒ๋ผ์šฐ์ € ์—”์ง„์˜ ๋“ฑ์žฅ๊ณผ ๊ฐ™์ด ์ƒˆ๋กœ์šด ์‹œ๋„๋“ค์ด ์ด์–ด์กŒ๋‹ค.

    ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์˜์—ญ์—์„œ๋Š” React Native ๊ฐ•์„ธ(Flutter ๋ณด๋‹ค ์ผ์ž๋ฆฌ๊ฐ€ 6๋ฐฐ๋‚˜ ๋งŽ๋‹ค๋Š” ๊ฒฐ๊ณผ๋„ ์žˆ๋‹ค)๊ฐ€ ์ด์–ด์กŒ๋‹ค.

    ์ด ๊ธ€์„ ํ†ตํ•ด '23๋…„ Front-end ์ƒํƒœ๊ณ„์˜ ๋ณ€ํ™”์™€ ํ•จ๊ป˜, '24๋…„์˜ ์ „๋ง์„ ์‚ดํŽด๋ณด๊ธฐ ๋ฐ”๋ž€๋‹ค.

    It takes 23 mins to recover after an interruption

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

    ์ด๋Š” ์ƒ์‚ฐ์„ฑ ๊ด€์ ์—์„œ ํฐ ์†์‹ค์„ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋˜ ๋‹ค๋ฅธ ํ•œ ์ถ•์œผ๋ก  ์ปจํ…์ŠคํŠธ ์ „ํ™˜์ด ๊ผญ ๋‚˜์œ ๊ฒƒ๋งŒ์€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ด๋‹ค.
    ์ด ๊ธ€์—์„  ์ปจํ…์ŠคํŠธ ์ „ํ™˜์˜ ์žฅ๋‹จ์ ๊ณผ, ์ด๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ „๋žต์„ ์†Œ๊ฐœํ•œ๋‹ค.

    What Every Developer Should Know About GPU Computing

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

    ์šฐ์•„์ฝ˜ 2023

    ์ง€๋‚œ 11์›” 15์ผ ์ง„ํ–‰๋˜์—ˆ๋˜ ์šฐ์•„ํ•œํ…Œํฌ์ฝ˜ํผ๋Ÿฐ์Šค 2023์˜ ์ „์ฒด ๋ฐœํ‘œ ์˜์ƒ์ด ๊ณต๊ฐœ๋˜์—ˆ๋‹ค.

    Database Fundamentals

    ์ €์ž๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ ํƒํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ฐจ์ด์ ์„ ์ž˜ ๋ชจ๋ฅธ๋‹ค๋Š” ๊ฒƒ์„ ์Šค์Šค๋กœ ๊นจ๋‹ฌ์•˜๊ณ , ๋” ๊นŠ์€ ์ดํ•ด๋ฅผ ์œ„ํ•ด ๊ด€๋ จ ์ฑ… ๋“ค์ธ Database Internals์™€ Designing Data-Intensive Applications์„ ์ฝ๊ฒŒ ๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

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

    State of Node.js Performance 2023

    [๊ทธ๋ฆผ] ๋ฐฑ๋งŒ ๊ฐœ์˜ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผฐ์„ ๋•Œ์˜ ๊ฒฐ๊ณผ

    ์ง€๋‚œ 4์›”, Node.js 20์ด ์ถœ์‹œ๋˜์—ˆ๊ณ , ๋งŽ์€ ๊ฐœ์„ ์ด ์ด๋ค„์กŒ๋‹ค. ์ด ๊ธ€์€ 3๊ฐœ์˜ ์˜์—ญ์—์„œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ๋น„๊ต ๋ฒค์น˜๋งˆํฌ๋ฅผ ํ†ตํ•ด ์–ผ๋งˆ๋งŒํผ์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ์ด๋ค„์กŒ๋Š”์ง€๋ฅผ ํ…Œ์ŠคํŠธํ•œ๋‹ค.

    ๊ฒฐ๋ก ์ ์œผ๋ก , Node.js 20์€ ์ด์ „ ๋ฒ„์ „๊ณผ ๋น„๊ตํ•ด ํฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๋ณด์—ฌ์ฃผ์—ˆ๋‹ค.

    [์ฐธ๊ณ ] ๊ธ€์—์„œ ์‚ฌ์šฉ๋œ ๋ฒค์น˜๋งˆํฌ์˜ ์›์‹œ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์Œ ์ €์žฅ์†Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    • https://github.com/RafaelGSS/state-of-nodejs-performance-2023

    Germany & Switzerland IT Job Market Report

    ์Šค์œ„์Šค์—์„œ ์‹œ์ž‘๋˜์–ด ๋…์ผ๋กœ ํ™•์žฅ๋œ IT ์ฑ„์šฉ ์‚ฌ์ดํŠธ์ธ SwissDevJobs.ch/GermanTechJobs.de์—์„œ ๊ณต๊ฐœํ•œ ๋…์ผ๊ณผ ์Šค์œ„์Šค์˜ IT ์ฑ„์šฉ ์‹œ์žฅ์— ๋Œ€ํ•œ ๋ณด๊ณ ์„œ๋‹ค.

    6,300๊ฐœ ์ด์ƒ์˜ ๊ธ‰์—ฌ ๋ฐ์ดํ„ฐ์™€ 12,500๊ฐœ์˜ ์„ค๋ฌธ์กฐ์‚ฌ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •๋ฆฌ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์„ ํ˜ธ ๊ทผ๋ฌดํ˜•ํƒœ, ๊ฒฝ๋ ฅ์— ๋”ฐ๋ฅธ ๊ธ‰์—ฌ ์ •๋ณด ๋“ฑ ๊ผญ ํ•ด๋‹น ๊ตญ๊ฐ€์— ๊ตญํ•œํ•ด ์‚ดํŽด๋ณด์ง€ ์•Š๋”๋ผ๋„ ์ „๋ฐ˜์ ์ธ ๊ธฐ์ˆ  ์ง๊ตฐ์˜ ํ˜„ํ™ฉ๊ณผ ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

    CSS Wrapped: 2023

    2023๋…„์€ CSS ์˜์—ญ์—์„œ๋Š” ๋ฉ‹์ง„ ํ•œ ํ•ด์˜€๋‹ค. ์ด์ œ ๋ชจ๋“  ๋ชจ๋˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ containers queries, subgrid, :has() ์„ ํƒ์ž, ์ƒˆ๋กœ์šด ์ƒ‰ ๊ณต๊ฐ„๊ณผ ํ•จ์ˆ˜ ์ง€์› ๋“ฑ์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

    ์ง€๋‚œ ํ•œ ํ•ด ๋™์•ˆ์˜ ๋ณ€ํ™”๋“ค๊ณผ ์„ธ๋ถ€ ๋‚ด์šฉ๋“ค์„ ํ•œ ๋ฒˆ์— ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    npm malware

    Socket.dev์—์„œ ์šด์˜ํ•˜๋Š” X(๊ตฌ twitter) ๊ณ„์ •์œผ๋กœ, ์‹ค์‹œ๊ฐ„์œผ๋กœ NPM ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ํƒ์ง€๋œ ์•…์„ฑ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด ์ค€๋‹ค.

    Developer essentials: JavaScript console methods

    Front-end ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ํ†ตํ•œ Console API๋ฅผ ์‚ฌ์šฉํ•œ ๋””๋ฒ„๊น…์€ ์ต์ˆ™ํ•  ๊ฒƒ์ด๋‹ค. Console API๋Š” console.log() ์™ธ์—๋„ ๋‹ค์–‘ํ•˜๊ณ  ์œ ์šฉํ•œ ๋ฉ”์„œ๋“œ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค. ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ๋Š”์ง€ ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•ด ๋ณด์ž.

    A list of JavaScript engines, runtimes, interpreters

    JavaScript ์—”์ง„๊ณผ ๋Ÿฐํƒ€์ž„์€ ๋ช‡ ๊ฐœ๊ฐ€ ์žˆ์„๊นŒ?

    ์ž˜ ์•Œ๊ณ  ์žˆ๋Š” Node.js, Deno, Bun, V8, Spider Monkey, JavaScriptCore, ChakraCore ... ๋˜ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์žˆ๋Š”๊ฐ€?

    TC39 - FAQ

    ์ปค๋ฎค๋‹ˆํ‹ฐ ๋˜๋Š” ๋‹ค์–‘ํ•œ ํ† ๋ก  ํ”Œ๋žซํผ์„ ํ†ตํ•ด ๊ธฐ์ˆ  ์œ„์›ํšŒ์— ์ œ๊ธฐ๋˜๋Š” JavaScript ์–ธ์–ด ๊ฐœ๋ฐœ์— ๊ด€ํ•œ FAQ ๋ฌธ์„œ์ด๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค๋ฉด, wasm์ด JavaScript๋ฅผ ๋Œ€์ฒดํ•  ๊ฒƒ์ธ๊ฐ€?, ์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ชจ๋“  ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ค๊ฐ€?, JSX ํ‘œ๊ธฐ๋ฒ•์ด JavaScript์— ์ถ”๊ฐ€๋  ๊ฒƒ์ธ๊ฐ€? ๋“ฑ์ด ๊ทธ๋Ÿฌํ•˜๋‹ค.

    Load Balancing

    ์„œ๋น„์Šค๊ฐ€ ์„ฑ์žฅํ•˜๊ฒŒ ๋˜๋ฉด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ฐ€์šฉ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ํ•„์š”๋กœ ํ•˜๊ฒŒ ๋˜๋ฉฐ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์•ž์„ธ์›Œ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ณ , ์š”์ฒญ๋“ค์„ ๋ถ„์‚ฐ์‹œํ‚จ๋‹ค. ์„œ๋น„์Šค์˜ ๊ทœ๋ชจ์— ๋”ฐ๋ผ ๋ถ€ํ•˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ์ˆ˜์ฒœ ๋Œ€์˜ ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

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

    Web Development History

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

    The Developer Experience Book

    '๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜'(DX)์€ ์ข‹์€ UX์™€ ๋น„์Šทํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ, ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋งŒ์กฑ๋„์™€ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”๋ฅผ ์ด‰์ง„ํ•˜๋Š” ๋„๊ตฌ, API ๋ฐ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

    ์ €์ž๋Š” Google์—์„œ DX์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•œ ๊ฒฝํ—˜์„ ๋ฑŒํƒ•์œผ๋กœ, ์•ฝ 100ํŽ˜์ด์ง€ ๋ถ„๋Ÿ‰์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž์˜ ์‚ถ์„ ๋” ์‰ฝ๊ณ  ์ƒ์‚ฐ์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜(DX)์˜ ๋ณธ์งˆ๊ณผ DX์™€ ์ข‹์€ UX ์‚ฌ์ด์˜ ์ค‘์š”ํ•œ ๊ด€๊ณ„์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•œ๋‹ค.

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

    Learning Cryptography with Javascript

    ์ž„๊ณ„๊ฐ’ ์„œ๋ช…(Threshold signatures), secret sharing, KZG polynomial commitments, ์€๋‹‰ ์„œ๋ช…(blind signatures), ring signatures, merkle trees, ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ ๋žœ๋ค ํ•จ์ˆ˜(verifiable random function), oblivious transfer ๋“ฑ์˜ JavaScript ๊ตฌํ˜„์„ ํ•™์Šต์ž์šฉ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

    SVG Tutorial

    25์ผ ๋™์•ˆ ํ•˜๋ฃจ์— ํ•œ ๊ฐœ์”ฉ ๊ฐ„๋‹จํ•œ ์ด๋ฏธ์ง€๋ฅผ SVG๋กœ ๋งŒ๋“ค์–ด ๋ณผ ์ˆ˜ ์žˆ๋Š” step-by-step ํŠœํ† ๋ฆฌ์–ผ์„ ์ œ๊ณตํ•œ๋‹ค.

    Vue design patterns

    ๋‹ค๋ฅธ ๋ชจ๋†€๋ฆฌ์‹ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋‹ฌ๋ฆฌ Vue๋Š” ์ ์ง„์ ์œผ๋กœ ์ฑ„ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค.

    ์ฆ‰, jQuery ๋งŒํผ ์‰ฝ๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ตœ์‹  ๋„๊ตฌ ๋ฐ ์ง€์› ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์ •๊ตํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์ž ์žฌ๋ ฅ์ด ์žˆ์œผ๋ฉฐ, Vue ํŒจํ„ด์„ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•˜๋ฉด ๊น”๋”ํ•˜๊ณ  ํšจ์œจ์ ์ด๋ฉฐ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ํฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

    CSS trick: transition from height 0 to auto!

    ์–ด๋–ค ์š”์†Œ์˜ ์†์„ฑ์„ height:0์—์„œ height:auto๋กœ ์ „ํ™˜ ์‹œ, transition ์• ๋‹ˆ๋ฉ”์ด์…˜์€ ๋™์ž‘ํ• ๊นŒ?

    .accordion-body {
      height: 0;
      transition: 500ms height ease;
    }
    
    .accordion:hover .accordion-body {
      height: auto;
    }
    

    ์œ ๊ฐ์Šค๋Ÿฝ๊ฒŒ๋„, ๋‹ต์€ "๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค"์ด๋‹ค. ๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„๊นŒ? ๊ธ€์—์„œ ํ•ด๋‹ต์„ ์ฐพ์•„๋ณด๊ธฐ ๋ฐ”๋ž€๋‹ค.

    Interactive Tutorials

    15๊ฐœ์˜ ๋‹ค์–‘ํ•œ ์–ธ์–ด๋ฅผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ํŠœํ† ๋ฆฌ์–ผ์„ ์ œ๊ณตํ•œ๋‹ค.
    ์–ธ์–ด๋ณ„๋กœ ๋ถ„๋ฆฌ๋œ ๋„๋ฉ”์ธ์˜ ์‚ฌ์ดํŠธ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ํ•ญ๋ชฉ๋ณ„ ์„ค๋ช…๊ณผ ํ•˜๋‹จ์— ์ง์ ‘ ๋ฐฐ์šด ๋‚ด์šฉ์„ ํ…Œ์ŠคํŠธํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ์งค๋ง‰ํ•œ ํ€ด์ฆˆ๋ฅผ ํ†ตํ•ด ํ•™์Šต์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

    • https://www.learn-js.org/
    • https://www.learn-ts.org/
    • https://www.learnshell.org/

    Headless Component: a pattern for composing React UIs

    ๋“œ๋กญ ๋‹ค์šด ์ปดํฌ๋„ŒํŠธ์˜ ๋ณต์žกํ•œ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋™์‹œ์— ๋‹จ๊ณ„์ ์œผ๋กœ UI ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๋ฉด์„œ ํ—ค๋“œ๋ฆฌ์Šค ํŒจํ„ด์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”์ง€ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค.

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

    Explain DevTools Console errors and source code using Copilot in Edge

    Edge ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์˜ ์ฝ˜์†”๊ณผ ์†Œ์Šค ๋„๊ตฌ์—์„œ Copilot์„ ํ™œ์šฉํ•ด ๊ธฐ๋Šฅ์˜ ์˜ค๋ฅ˜ ๋˜๋Š” ์†Œ์Šค ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๋„์™€์ฃผ๋Š” ์ƒˆ๋กœ์šด ์‹คํ—˜์  ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

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

    ๊ณต์‹ ๋ธ”๋กœ๊ทธ ๊ธ€์—์„œ๋Š” Edge 120๋ถ€ํ„ฐ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ฃผ์†Œ์ฐฝ์„ ํ†ตํ•ด edge://flags๋กœ ์ด๋™ ํ›„ "explain DevTools with AI" ํ•ญ๋ชฉ์„ ๊ฒ€์ƒ‰ํ•ด ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Œ์„ ์•ˆ๋‚ดํ•˜๊ณ  ์žˆ๋‹ค.

    [์ฐธ๊ณ ] ๊ณต์‹ ๋ธ”๋กœ๊ทธ์˜ ์•ˆ๋‚ด์™€๋Š” ๋‹ค๋ฅด๊ฒŒ Edge 120, 121(beta), 122(canary) ๋ฒ„์ „ ๋“ฑ์—์„œ ์ง์ ‘ ํ™•์ธํ•ด ๋ณธ ๊ฒฐ๊ณผ ํ•ด๋‹น ์‹คํ—˜์  ๊ธฐ๋Šฅ์˜ ํ•ญ๋ชฉ์ด ๋…ธ์ถœ๋˜์ง„ ์•Š์•˜๋‹ค.

    Heynote

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

    Oxc

    Oxidation ์ปดํŒŒ์ผ๋Ÿฌ(Oxc)๋ผ๋Š” Rust๋กœ ์ž‘์„ฑ๋œ ๋‹ค์–‘ํ•œ ๋„๊ตฌ๋“ค์˜ ๋ชจ์Œ์„ ์ œ๊ณตํ•œ๋‹ค.
    ๊ธฐ๋ณธ ์ ‘๊ทผ์€ ๋‹จ์ผ ํˆด์ฒด์ธ์„ ํ†ตํ•ด ์ƒํƒœ๊ณ„์— ํ•„์š”ํ•œ ๋„๊ตฌ๋“ค์„ ์ œ๊ณตํ•˜๋Š” Biome์™€ Ruff์˜ ์ฒ ํ•™๊ณผ ๊ถค๋ฅผ ๊ฐ™์ดํ•œ๋‹ค.

    WakaTime

    WakaTime์€ ๊ฐœ๋ฐœ์— ์‚ฌ์šฉ๋˜๋Š” ์‹œ๊ฐ„์„ ๊ธฐ๋กํ•ด ๋‹ค์–‘ํ•œ ์ง€ํ‘œ๋ฅผ ์ œ๊ณตํ•ด ์ฃผ๋Š” ๋„๊ตฌ๋‹ค.

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

    tastejs.com/movies

    ์˜ค๋Š˜๋‚  ์ƒํƒœ๊ณ„์—๋Š” ์ •๋ง ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด๋“ค์„ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ํ•™์Šตํ•˜๊ฑฐ๋‚˜ ๊ฒฝํ—˜ํ•ด ๋ณด๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ๊นŒ?

    ๋ฐ”๋กœ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

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

    Design Systems Database

    ๋‹ค์–‘ํ•œ ๋””์ž์ธ ์‹œ์Šคํ…œ๋“ค๊ณผ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์„ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ณ„๋กœ ์ •๋ฆฌํ•ด ์ œ๊ณตํ•˜๋Š” ๋””์ž์ธ ์‹œ์Šคํ…œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค.

    StyleX

    StyleX๋Š” Meta์—์„œ ๊ฐœ๋ฐœํ•œ ์ตœ์ ํ™”๋œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ„ํ•œ ์Šคํƒ€์ผ์„ ์ •์˜ํ•˜๋Š” CSS-in-JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค.

    import * as React from 'react';
    import * as stylex from '@stylexjs/stylex';
    
    const styles = stylex.create({
        root: {
            width: '100%',
            maxWidth: 800,
            minHeight: 40,
        }
    });
    
    function ReactDiv({ color, isActive, style }) {
      return <div {...stylex.props(
        styles.main,
        // apply styles conditionally
        isActive && styles.active,
        // choose a style variant based on a prop
        colorStyles[color],
        // styles passed as props
        style,
      )} />;
    }
    

    image-dimensions

    ๋‹ค์–‘ํ•œ ๋ชจ๋˜ JavaScript ํ™˜๊ฒฝ(๋ธŒ๋ผ์šฐ์ €์™€ ๋Ÿฐํƒ€์ž„ - Node, Deno, Bun ๋“ฑ)์—์„œ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค.

    // Node.js example
    import {createReadStream} from 'node:fs';
    import {imageDimensionsFromStream} from 'image-dimensions';
    
    const stream = createReadStream('unicorn.png');
    
    console.log(await imageDimensionsFromStream(stream));
    //=> {width: 1920, height: 1080}
    

    joi

    ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์œ ์‚ฌํ•œ ๋„๊ตฌ๋กœ๋Š” Zod, Yup ๋“ฑ์ด ์žˆ๋‹ค.

    [์ฐธ๊ณ ] Yup vs. Zod vs. Joi: A Comprehensive Comparison of JavaScript Validation Libraries

    @arktype/attest

    ๋ณต์žกํ•œ ํƒ€์ž…์€ ์ข…์ข… IDE์™€ type checking tool์˜ ์†๋„๋ฅผ ๊ฐ์†Œ์‹œํ‚จ๋‹ค. @arktype/attest๋Š” ์ด๋Ÿฐ ๋ณต์žกํ•œ ํƒ€์ž…์˜ ํผํฌ๋จผ์Šค๋ฅผ ์ธก์ • ๋ฐ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค.

    // benches.ts
    import { bench } from '@arktype/attest';
    
    // Combinatorial template literals often result in expensive types- let's benchmark this one!
    type makeComplexType<s extends string> = s extends `${infer head}${infer tail}`
      ? head | tail | makeComplexType<tail>
      : s;
    
    bench('bench type', () => {
      return {} as makeComplexType<'defenestration'>;
      // This is an inline snapshot that will be populated or compared when you run the file
    }).types([169, 'instantiations']);
    
    # npx ts-node benches.ts
    โณ attest: Analyzing type assertions...
    โณ Cached type assertions 
    
    ๐ŸŒ๏ธ Result: 177instantiations
    โ›ณ Baseline: 169instantiations
    ๐Ÿ“Š Delta: +4.73%
    

    https://tsdocs.dev/

    JavaScript ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ํƒ€์ž… ์ •์˜ ํŒŒ์ผ(Type Definition)์„ ์ฐพ์•„์ฃผ๋Š” ์„œ๋น„์Šค๋‹ค.

    TypeScript๋กœ ์ž‘์„ฑ๋˜์ง€ ์•Š์€ ํŒจํ‚ค์ง€(์ด ๊ฒฝ์šฐ, DefinitelyTyped์—์„œ ๊ฒ€์ƒ‰)๋‚˜ ํŒจํ‚ค์ง€๊ฐ€ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์—์„œ ํƒ€์ž…์„ ๋‹ค์‹œ ๋‚ด๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ์—๋„ ์ฐพ์•„์ค€๋‹ค.