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

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

    2022-08

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

    Fresh 1.0

    Fresh๋Š” Deno์—์„œ ๋™์ž‘ํ•˜๋Š” ์ƒˆ๋กœ์šด full-stack ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋กœ Deno ๊ฐœ๋ฐœํŒ€์—์„œ ๊ฐœ๋ฐœํ–ˆ๋‹ค. Next.js์™€ ์œ ์‚ฌํ•œ ํŒŒ์ผ์‹œ์Šคํ…œ ๋ผ์šฐํŒ…์ด ์ง€์›๋˜๋ฉฐ, ๋นŒ๋“œ ๊ณผ์ •์ด ์—†๊ณ  ๋””ํดํŠธ๋กœ ์–ด๋– ํ•œ JavaScript ์ฝ”๋“œ๋„ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ด์ง€ ์•Š๋Š”๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋ Œ๋”๋ง์€ ์„œ๋ฒ„์—์„œ ์ด๋ค„์ง€๋ฉฐ, ํด๋ผ์ด์–ธํŠธ๋Š” ์ƒํ˜ธ์ž‘์šฉ์„ ์œ„ํ•ด ์ž‘์€ ์˜์—ญ๋“ค(small islands - Island ์•„ํ‚คํ…์ฒ˜)์— ๋Œ€ํ•œ ์žฌ๋ Œ๋”๋ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

    ์‚ฌ์‹ค์ƒ Next.js์˜ Deno ๋ฒ„์ „์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, Preact๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

    ์ฐธ๊ณ  ๋งํฌ

    Between the Wires: An interview with developer and entrepreneur Guillermo Rauch

    Next.js๋ฅผ ๊ฐœ๋ฐœ(๋˜ํ•œ socket.io, Mongoose๋„ ๊ฐœ๋ฐœ)ํ•œ Vercel์˜ ์ฐฝ์—…์ž์ธ Guillermo Rauch์— ๋Œ€ํ•œ 2017๋…„ ์ธํ„ฐ๋ทฐ ๋‚ด์šฉ์ด๋‹ค. ์•„๋ฅดํ—จํ‹ฐ๋‚˜ ์ˆ˜๋„์ธ ๋ถ€์—๋…ธ์Šค์•„์ด๋ ˆ์Šค ๊ทผ๊ต์—์„œ ์„ฑ์žฅํ–ˆ๊ณ , ์Šคํƒ€ ํŠธ๋ ‰๊ณผ ์—”์ง€๋‹ˆ์–ด๋ง์— ๊ด€์‹ฌ์ด ๋งŽ๋˜ ์•„๋ฒ„์ง€๋กœ ์ธํ•ด 7์‚ด ๋•Œ ์ปดํ“จํ„ฐ๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

    ์ดํ›„ 16์‚ด์ด ๋˜์—ˆ์„ ๋•Œ, ๋‹น์‹œ ์œ ๋ช…ํ–ˆ๋˜ MooTools ์ฝ”์–ด ๊ฐœ๋ฐœ์ž๋กœ ํ•ฉ๋ฅ˜ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ  ๊ทธ ๋‹ค์Œ ํ•ด ์Šค์œ„์Šค ์Šคํƒ€ํŠธ์—…์˜ Front-end ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์ง€์›์„ ์œ„ํ•ด ์ฑ„์šฉ๋˜์—ˆ๊ณ , ์ดํ›„ ์ƒŒํ”„๋ž€์‹œ์Šค์ฝ” ์‚ฌ๋ฌด์‹ค์„ ์—ด๊ฒŒ ๋จ์— ๋”ฐ๋ผ ๋ฏธ๊ตญ์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ  ์ดํ›„ ์ฐฝ์—…์„ ํ†ตํ•ด ์˜ค๋Š˜๋‚ ์— ์ด๋ฅด๊ฒŒ ๋˜์—ˆ๋‹ค๊ณ  ํšŒ๊ณ ํ•œ๋‹ค.

    ์˜ค๋Š˜๋‚  Front-end ์”ฌ์—์„œ ์˜ํ–ฅ๋ ฅ์„ ๊ฐ–๋Š” ์ด์˜ ๊ถค์ ์„ ์—ฟ๋ณด๋Š” ๊ฒƒ์€ ์–ธ์ œ๋‚˜ ํฅ๋ฏธ๋กญ๋‹ค.

    ์ถ”๊ฐ€๋กœ ๋‹ค์Œ์˜ ํŒŸ์บ์ŠคํŠธ ์ธํ„ฐ๋ทฐ๋„ ๊ฐ™์ด ๋“ค์–ด๋ณด๊ธฐ ๋ฐ”๋ž€๋‹ค.

    Remix Conf 2022

    ์ง€๋‚œ 5์›” 24~25์ผ, ์ฒ˜์Œ ๊ฐœ์ตœ๋œ Remix ์ฝ˜ํผ๋Ÿฐ์Šค ์„ธ์…˜๋“ค์„ ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    The new wave of React state management

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

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

    Nate Moore: WebAssembly in the JavaScript Ecosystem

    ์˜ค๋Š˜๋‚  JavaScript ๊ฐœ๋ฐœ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์˜์กด์„ฑ๋“ค ์ค‘ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์˜์—ญ์—์„œ wasm์„ ๋ฐฐํ›„์—์„œ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ์•ˆ๋‹ค๋ฉด ๋†€๋ž„ ๊ฒƒ์ด๋‹ค.

    ์ด ๋™์˜์ƒ์€ JavaScript์™€ TypeScript ์ƒํƒœ๊ณ„์—์„œ wasm์˜ ์ฃผ๋ชฉํ•  ๋งŒํ•œ ์šฉ๋„๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์™„์ „ํ•œ ๋„ค์ดํ‹ฐ๋ธŒ ๋˜๋Š” ์™„์ „ JavaScript ํ•ด๋ฒ•๊ณผ ๋น„๊ตํ•ด ํ•˜์ด๋ธŒ๋ฆฌ๋“œ wasm/JS ๋„๊ตฌ์˜ ์ด์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•œ๋‹ค.

    Front-end Web Performance: The Essentials

    ์‹œ๋ฆฌ์ฆˆ๋กœ ๊ตฌ์„ฑ๋œ(์•„์ง ์™„์„ฑ๋˜์ง€ ์•Š์€) ๊ธ€์„ ํ†ตํ•ด ์ €์ž๋Š” ์›น ์„ฑ๋Šฅ์„ ์œ„ํ•ด ์ดํ•ดํ•ด์•ผ ํ•˜๋Š” ๋ณธ์งˆ์  ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ ์„ค๋ช…ํ•œ๋‹ค.

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

    ๋‘ ๋ฒˆ์งธ ์‹œ๋ฆฌ์ฆˆ ๊ธ€:

    Bun

    Bun์€ ์ƒˆ๋กœ์šด JavaScript ๋Ÿฐํƒ€์ž„์ด๋ฉด์„œ ๋™์‹œ์— ๋ฒˆ๋“ค๋Ÿฌ, ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ ๊ทธ๋ฆฌ๊ณ  ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” all-in-one ๋„๊ตฌ์ด๊ธฐ๋„ ํ•˜๋‹ค.

    ์†๋„์— ์ดˆ์ ์„ ๋งž์ถฐ Node.js๋‚˜ Deno์™€๋Š” ๋‹ค๋ฅด๊ฒŒ WebKit์˜ JavaScriptCore ์—”์ง„์„ ํ™œ์šฉํ•œ๋‹ค. ์ฃผ์š”ํ•œ Front-end ์ƒํƒœ๊ณ„์˜ ๋„๊ตฌ์™€ ํ™˜๊ฒฝ์„ ๋ชจ๋‘ ์ง€์›ํ•˜๋ฉฐ, TypeScript์™€ JSX, Jest-like ํ…Œ์ŠคํŠธ ๋Ÿฌ๋„ˆ๋„ ๋นŒํŠธ์ธ ๋˜์–ด ๊ธฐ๋ณธ ์ง€์›๋œ๋‹ค. Bun์€ ๋กœ์šฐ ๋ ˆ๋ฒจ ์–ธ์–ด์ธ Zig๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ, ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์€ ์‹œ๊ฐ„์„ ํˆฌ์žํ•ด ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ์ตœ์ ํ™” ๊ทธ๋ฆฌ๊ณ  Zig์˜ ์ˆ˜๋™ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ํŠน์„ฑ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•ด ๋ณด๋‹ค ๋‹จ์ˆœํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

    [์ฐธ๊ณ ]

    How I Estimate NPM Package Market Share (and how Redux usage compares to other libraries)

    ์ €์ž๋Š” ์ตœ๊ทผ ๋ช‡ ๋…„๊ฐ„ "Redux๋Š” React ์•ฑ์—์„œ 45~50% ์ •๋„ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค"์™€ "Redux๋Š” React ์•ฑ์—์„œ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ์ด๋‹ค"๋ผ๋Š” ์˜๊ฒฌ์„ ์–˜๊ธฐํ•ด ์™”์—ˆ๊ณ , ์–ด๋–ป๊ฒŒ ๊ทธ๋Ÿฌํ•œ ๊ฒฐ๋ก ์„ ๋„์ถœํ•ด ๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ ‘๊ทผ ๋ฐฉ๋ฒ•(๋‹ค์–‘ํ•œ ์ฐธ๊ณ  ์ง€ํ‘œ๋“ค)์„ ์†Œ๊ฐœํ•œ๋‹ค.

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

    The Best Solution to Burnout Weโ€™ve Ever Heard

    Slack, Netfliy ๊ทธ๋ฆฌ๊ณ  Ambassador Labs์—์„œ ์ผํ•˜๋Š” ์—”์ง€๋‹ˆ์–ด๋“ค๊ฐ„์˜ ํ† ๋ก  ์„ธ์…˜ ํŒŸ์บ์ŠคํŠธ๋กœ ๋ฒˆ์•„์›ƒ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ์ข‹์€ ํ•ด๋ฒ•์ด ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•œ ์–˜๊ธฐ๋ฅผ ๋“ค์–ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

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

    <popup> element explainer

    MS Edge ์›น ํ”Œ๋žซํผ ํŒ€์˜ Melanie Richardson์€ 21๋…„ 1์›” ์ƒˆ๋กœ์šด <popup> ์š”์†Œ์— ๋Œ€ํ•œ ์ œ์•ˆ๊ณผ ๊ทธ์— ๋Œ€ํ•œ ์„ค๋ช…(explainer) ๋ฌธ์„œ๋ฅผ ๊ณต๊ฐœํ–ˆ์—ˆ๋‹ค.

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

    ํ•ด๋‹น ์ œ์•ˆ์€ ์ถ”๊ฐ€์ ์ธ ๋…ผ์˜ ์ง„ํ–‰์„ ํ†ตํ•ด ๋ณ„๋„ ์š”์†Œ๊ฐ€ ์•„๋‹Œ, ๊ธฐ์กด ์š”์†Œ์˜ ์†์„ฑ ํ˜•ํƒœ๋กœ ์ œ๊ณต๋˜๋Š” ์ƒˆ๋กœ์šด ์ œ์•ˆ(Pop Up API (Explainer))์œผ๋กœ ๋…ผ์˜๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด ์ง„ํ–‰ ์ค‘์— ์žˆ๋‹ค.

    ์ด์— ๋Œ€ํ•œ chromium ๊ตฌํ˜„ ์ง„ํ–‰์ƒํ™ฉ์€ Tracking bug for implementation of popup attribute/API์„ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    CSS in 2022

    ํ•œ๊ธ€๋ฒˆ์—ญ

    2022๋…„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”(๋˜๋Š” ์ง€์›๋  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€) ๋‹ค์–‘ํ•œ ์ƒˆ๋กœ์šด CSS ๊ธฐ์ˆ ๋“ค์„ ์†Œ๊ฐœํ•œ๋‹ค.

    • Container Queries: ์ปจํ…Œ์ด๋„ˆ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์Šคํƒ€์ผ ์ ์šฉ
    • Cascade Layers: @layer๋ฅผ ์‚ฌ์šฉํ•ด ๋ ˆ์ด์–ด ๋‹จ์œ„๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •
    • Color Functions: ์ƒ๋Œ€์  ์ƒ‰์ƒ ๊ฐ’, ์ƒ‰์ƒ ํ˜ผํ•ฉ, ๋Œ€๋น„ ์ƒ‰์ƒ์„ ์ง€์ •ํ•˜๋Š” ํ•จ์ˆ˜๋“ค
    • New Viewport Units: ์ƒˆ๋กœ์šด ๋ทฐํฌํŠธ ๋‹จ์œ„
      • svw/svh: Short Viewport
      • lvw/lvh: Large Viewport
      • dvw/dvh: Dynamic Viewport
    • :has(): ํŠน์ • ์ž์‹์ด ์žˆ๋Š” ๋ถ€๋ชจ ์š”์†Œ๋ฅผ ์„ ํƒ
    • overscroll Behavior: overscroll ํ•  ๋•Œ์˜ ๋™์ž‘์„ ์ œ์–ด
    • Subgrid: ๋ถ€๋ชจ ๊ทธ๋ฆฌ๋“œ์™€ ๊ฐ™์ด ์ •๋ ฌ
    • Accent Color: input ์š”์†Œ์— ์ƒ‰์ƒ์„ ์ง€์ •
    • Media Query Ranges: ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ์˜ ์ตœ๋Œ€/์ตœ์†Œ ๋„ˆ๋น„ ๋ฒ”์œ„๋ฅผ ์ง€์ •

    CSS Day 2022

    ์ง€๋‚œ 6์›” 9~10์ผ ์•”์Šคํ…Œ๋ฅด๋‹ด์—์„œ ์ง„ํ–‰๋œ CSS๋งŒ์„ ๋‹ค๋ฃจ๋Š” ์ฝ˜ํผ๋Ÿฐ์Šค๋‹ค.

    Neubrutalism is taking over the web

    19๋…„๋„๋ถ€ํ„ฐ ์ž์ฃผ ์–ธ๊ธ‰๋˜๋˜ ๋‰ด๋ชจํ”ผ์ฆ˜(Newmorphism)์€ ์ฃผ์š”ํ•œ UI ํŠธ๋ Œ๋“œ๊ฐ€ ๋˜์—ˆ๋‚˜ ๋ฌผ์€๋‹ค๋ฉด ๊ทธ ๋Œ€๋‹ต์€ ์•„์ง๊นŒ์ง€๋Š” "NO" ์ผ ๊ฒƒ์ด๋‹ค. (FE-news 2020๋…„ 4์›” ํ˜ธ - "๋‰ด๋ชจํ”ผ์ฆ˜์€ ์ƒˆ๋กœ์šด UI ํŠธ๋ Œ๋“œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์„๊นŒ" ์ฐธ๊ณ ) ๊ทธ๋ ‡๋‹ค ๋‰ด๋ชจํ”ผ์ฆ˜๊ณผ ๊ธ€๋ž˜์Šค๋ชจํ”ผ์ฆ˜(Glassmorphism)์€ UI๋ฅผ ์ƒˆ๋กœ์šด ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋Œ๊ณ ์ž ํ–ˆ์ง€๋งŒ ํฌ๊ฒŒ ํฅํ•˜์ง€๋Š” ๋ชปํ–ˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ตœ๊ทผ์—๋Š” ์œ„ ๋””์ž์ธ๊ณผ ์ƒ๋‹นํžˆ ๋Œ€๋น„๋˜๋Š” ํŠน์ง•์˜ ๋‰ด๋ธŒ๋ฃจํƒˆ๋ฆฌ์ฆ˜(Neubrutalism)์ด ๋– ์˜ค๋ฅด๊ณ  ์žˆ๋‹ค. ํŠน์ดํ•˜๋ฉด์„œ ์ฑ„๋„ ๋†’์€ ์ƒ‰์ƒ, ์ƒ‰์ƒ ๊ฐ„ ๊ณ ๋„ ๋Œ€๋น„์™€ ๊ธฐ๋ฐœํ•œ ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ, ๊ทธ๋ฆฌ๊ณ  ์ „ํ†ต์ ์ธ ๋ ˆ์ด์•„์›ƒ์ด๋ผ๋Š” ํ†กํ†ก ํŠ€๋Š” ๊ฐœ์„ฑ์„ ๊ฐ€์ง€๋Š” ๋‰ด๋ธŒ๋ฃจํƒˆ๋ฆฌ์ฆ˜์€ ์ƒˆ๋กœ์šด UI ํŠธ๋ Œ๋“œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์„๊นŒ?

    [์ฐธ๊ณ ] ๋‰ด๋ธŒ๋ฃจํƒˆ๋ฆฌ์ฆ˜์˜ ๋‹ค์–‘ํ•œ ์‚ฌ์ดํŠธ๋“ค์„ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ ๊ธ€์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

    Why Efficient Hydration in JavaScript Frameworks is so Challenging

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

    ์ด ๊ธ€์€ ๋ณด๋‹ค ํšจ์œจ์ ์ธ hydration์„ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์ด ์ฑ„ํƒํ•˜๊ณ  ์žˆ๋Š” ์ ‘๊ทผ ๋ฐฉ๋ฒ•๋“ค์„ ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋‹ค.

    ํŠœํ† ๋ฆฌ์–ผ

    Get started analyzing runtime performance

    ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ๋‚ด์˜ Performance ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ์„ ๋ถ„์„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค.

    ๋‹ค์Œ ๋ฐ๋ชจ์—์„œ ๋ณด์ด๋Š” ๋А๋ฆฟํ•˜๊ฒŒ ์‹คํ–‰๋˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์—์„œ ๋ณ‘๋ชฉ์ง€์ ์„ ํ”„๋กœํŒŒ์ผ๋ง์„ ํ†ตํ•ด ํ™•์ธํ•˜๊ณ , ์†Œ์Šค ๋ ˆ๋ฒจ์—์„œ ๋ณ‘๋ชฉ์ง€์ ์„ ์ฐพ๋Š” ๊ณผ์ •์„ ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    ๋ฐ๋ชจ

    The System Design Primer

    ์‹œ์Šคํ…œ ์„ค๊ณ„๋Š” ๊ด‘๋ฒ”์œ„ํ•œ ์ฃผ์ œ์ง€๋งŒ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šด๋‹ค๋ฉด ๋” ๋‚˜์€ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

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

    Roll your own JavaScript runtime

    ์ด ํŠœํ† ๋ฆฌ์–ผ์€ runjs๋ผ ๋ถˆ๋ฆฌ๋Š” ์•„์ฃผ ๋‹จ์ˆœํ™”๋œ Deno์™€ ๊ฐ™์€ JavaScript ๋Ÿฐํƒ€์ž„์„ ์ง์ ‘ ๋งŒ๋“ค์–ด ๋ณด๋Š” ๋‚ด์šฉ์„ ์„ค๋ช…ํ•œ๋‹ค.

    ๊ฐœ๋ฐœ๋œ ๋Ÿฐํƒ€์ž„์€ CLI๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์˜ ์ฝ๊ธฐ, ์“ฐ๊ธฐ, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” API๊ฐ€ ์ œ๊ณต๋˜๋ฉฐ, ๊ทธ๋ฆฌ๊ณ  ์‹ฌํ”Œํ•œ console API๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

    Build your own X

    ์ด ์ €์žฅ์†Œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ข‹์•„ํ•˜๊ฑฐ๋‚˜ ๋งค์ผ ํ™œ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋งŒ๋“ค์–ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค๋“ค์— ๋Œ€ํ•œ ๋ชจ์Œ์„ ์ œ๊ณตํ•œ๋‹ค.

    Adding Custom GitHub Badges to Your Repo

    GitHub ํ”„๋กœ์ ํŠธ readme ํŒŒ์ผ์— ์ปค์Šคํ…€ ๋ฐฐ์ง€(badge)๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๋“ค์„ ์†Œ๊ฐœํ•œ๋‹ค.

    CSS Specificity Demo

    CSS specifity๋Š” CSS ์„ ํƒ์ž์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ€์ค‘์น˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

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

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

    Qwik

    HTML ์šฐ์„  ์ฃผ์˜๋ฅผ ํ‘œ๋ฐฉํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, AngularJS๋ฅผ ๊ฐœ๋ฐœํ•œ Miลกko Hevery์™€ Stencil์„ ๊ฐœ๋ฐœํ–ˆ๋˜ Manu Almeida ๊ทธ๋ฆฌ๊ณ  Ionic/Stencil ๊ฐœ๋ฐœ์— ์ฐธ์—ฌํ–ˆ๋˜ Adam Bradley๊ฐ€ ์ฐธ์—ฌํ–ˆ๋‹ค.

    ํŠน์ง•์œผ๋กœ๋Š” ๋น„ hydration, ์ž๋™ lazy-loading ์ง€์›, SSR/SSG๋กœ ์ƒ์„ฑ๋œ HTML๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ํฌํ•จ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ์–ธ์ œ๋“  ์‹คํ–‰์„ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ๋Š”(resumable) ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค.

    JSX๋ฅผ ๊ธฐ๋ณธ ์ง€์›ํ•˜๋ฉฐ, React๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

    [์ฐธ๊ณ ] ๋ณด๋‹ค ๊นŠ๊ฒŒ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด, ๋‹ค์Œ์˜ ๋งํฌ๋“ค์„ ์ถ”๊ฐ€๋กœ ์ฐธ๊ณ ํ•˜๋ผ.

    fnm (Fast Node Manager)

    Rust๋กœ ์ž‘์„ฑ๋œ node ๋ฒ„์ „ ๋งค๋‹ˆ์ €๋กœ ๋‹จ์ผ ํŒŒ์ผ๋กœ ์ œ๊ณต๋œ๋‹ค. ํฌ๋กœ์Šค ํ”Œ๋žซํผ์ด ๊ธฐ๋ณธ ์ง€์›๋˜๋ฉฐ, .node-version๊ณผ .nvmrc ์„ค์ • ํŒŒ์ผ๊ณผ ํ˜ธํ™˜๋œ๋‹ค.

    Snake in Favicon

    ์ž์‹ ์—๊ฒŒ ์ฃผ์š” ์žฅ์• ๋ฌผ์ด ๋˜๋Š” ์„ฑ์žฅํ•˜๋Š” ๋ผ์ธ์„ ์กฐ์ข…ํ•˜๋Š” ๊ฒŒ์ž„ ์žฅ๋ฅด์ธ ์Šค๋„ค์ดํฌ ๊ฒŒ์ž„์„ ๋ธŒ๋ผ์šฐ์ €์˜ favicon ์˜์—ญ์—์„œ ํ”Œ๋ ˆ์ดํ•  ์ˆ˜ ์žˆ๋‹ค.

    wayne

    Service Worker๋Š” HTTP ์š”์ฒญ์„ ์บ์‹ฑ ํ•ด ์˜คํ”„๋ผ์ธ ์ƒํƒœ์—์„œ๋„ ์•ฑ์ด ๋™์ž‘ํ•˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ, wayne์€ ๋งˆ์น˜ express.js์™€ ๊ฐ™์ด Service Worker ์š”์ฒญ๋“ค์„ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋ผ์šฐํŒ… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

    act

    GitHub Actions๊ฐ€ ํŽธ๋ฆฌํ•˜๋‹ค๋Š” ๊ฒƒ์€ ๋‹ค๋“ค ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ GitHub Actions๋ฅผ ๊ฐœ๋ฐœ/ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ๋งค๋ฒˆ GitHub Repo์— commit ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์—ฌ๊ฐ„ ๊ท€์ฐฎ์€ ์ผ์ด ์•„๋‹ˆ๋‹ค.

    act๋ฅผ ์ด์šฉํ•˜๋ฉด ๋กœ์ปฌ์—์„œ docker๋ฅผ ์ด์šฉํ•ด GitHub Actions๋ฅผ ์‹คํ–‰ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    Flexbox Playground

    CSS๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ๋ ˆ์ด์•„์›ƒ ์ค‘ ํ•˜๋‚˜์ธ flexbox๋Š” ์ฒ˜์Œ์— ์ต์ˆ™ํ•ด์ง€๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š๋‹ค. ์ต์ˆ™ํ•˜์ง€ ์•Š์„ ๋•Œ Flexbox Playground๋ฅผ ํ™œ์šฉํ•ด ์•„์ดํ…œ์„ ์ด๊ณณ์ €๊ณณ ๋ฐฐ์น˜ํ•ด ๋ณด๋ฉฐ ํ•™์Šตํ•ด ๋ณด์ž.

    ๐ŸŽ† Fireworks.js 2.0

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

    Million.js

    ์›Œ์‹ฑํ„ด ์ง€์—ญ ๊ณ ๋“ฑํ•™๊ต์— ์žฌํ•™ ์ค‘์ธ Aden Bai๊ฐ€ ๊ฐœ๋ฐœํ•œ Million.js๋Š” 1kb ๋ฏธ๋งŒ์˜ VDOM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ๋ถˆํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•ด ๋” ์ž‘์€ ํฌ๊ธฐ์˜ ๋ฒˆ๋“ค์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๋˜ํ•œ React์™€ ์œ ์‚ฌํ•œ API๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์–ด, ๊ธฐ์กด React ์‚ฌ์šฉ์ž๋ผ๋ฉด ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

    [์ฐธ๊ณ ] VDOM๊ณผ Million.js ๊ฐœ๋ฐœ์˜ ๊ธฐ์ˆ ์  ๋ฐฐ๊ฒฝ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ ๊ธ€์„ ์ถ”๊ฐ€๋กœ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹๋‹ค.