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

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

    2023-10

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

    Bun 1.0

    Bun 1.0 stable ๋ฒ„์ „์ด ๋ฆด๋ฆฌ์Šค๋˜์—ˆ๋‹ค.

    Bun์€ Webkit ๊ธฐ๋ฐ˜์˜ JavaScript, TypeScript ํˆด ์ฒด์ธ์ด๋ฉฐ Zig๋กœ ์ž‘์„ฑ๋˜์—ˆ๋‹ค. ์ƒ๋‹นํžˆ ๋น ๋ฅธ ๋ฒค์น˜๋งˆํฌ ์†๋„๋ฅผ ๋ณด์—ฌ์„œ ํฐ ๊ด€์‹ฌ์„ ๋ฐ›๊ณ  ์žˆ๋‹ค. Node.js, npx, Babel, esbuild, swc, webpack, Jest, Vitest, npm, Yarn, pnpm ๋“ฑ์˜ ํ”„๋ŸฐํŠธ์—”๋“œ ๋„๊ตฌ๋“ค์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๊ธฐ์กด ๋„๊ตฌ์™€์˜ ํ˜ธํ™˜์„ฑ์ด ๋›ฐ์–ด๋‚˜๊ณ , ESM/CJS๋ฅผ ํ˜ผํ•ฉ ์‚ฌ์šฉ์„ ์ง€์›ํ•ด์„œ drop-in-replace ๋ฐฉ์‹์œผ๋กœ ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    Bun vs Node.js: Everything you need to know

    Bun์ด Node.js์˜ ๊ธฐ๋Šฅ๊ณผ ๋น„๊ตํ•˜๋ฉด์„œ ์„ค๋ช…ํ•œ๋‹ค.
    Node.js๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด, ์ฝ”๋“œ ๋น„๊ต๋ฅผ ํ†ตํ•ด Bun์˜ ์‚ฌ์šฉ๋ฒ•์„ ์‰ฝ๊ฒŒ ์ตํž ์ˆ˜ ์žˆ๋‹ค.
    Runtime, Package Manager, Bundler, Test Runner๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ๋‹ค๋ฃฌ๋‹ค.

    Is Bun really much faster than Node.js?

    Bun์€ Node.js๋ณด๋‹ค ์ƒ๋‹นํžˆ ๋น ๋ฅธ ๋ฒค์น˜๋งˆํฌ ์†๋„๋ฅผ ๋ณด์—ฌ์„œ ํฐ ๊ด€์‹ฌ์„ ๋ฐ›๊ณ  ์žˆ๋‹ค.

    ๊ด€์‹ฌ์˜ ํฌ์ธํŠธ๋ฅผ ์ง์ ‘ ์‹คํ—˜์„ ํ•œ ๋‚ด์šฉ์œผ๋กœ, Node.js v20.6.1(fastify) vs Bun v1.0.2(elysia) ๋Œ€๊ฒฐ์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ์ž ์‹œ ์‚ดํŽด๋ณผ๋งŒ ํ•˜๋‹ค.

    ๊ฒฐ๋ก ๋งŒ ์ด์•ผ๊ธฐํ•˜์ž๋ฉด, ๊ฐ„๋‹จํ•œ ์ž‘์—…์—์„œ๋Š” ํฐ ์šฐ์œ„๋ฅผ ๋ณด์˜€๋˜ Bun์ด ๋ณต์žกํ•œ ์ž‘์—…์—์„œ๋Š” ๋” ๋А๋ ค์ง€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    ํƒˆ TypeScript?

    Ruby on Rails์˜ ๊ฐœ๋ฐœ์ž ๋ฐ์ด๋น„๋“œ ํ•˜์ด๋„ค๋งˆ์ด์–ด ํ•ธ์Šจ(์ดํ•˜ DHH)์˜ Turbo 8 is Dropping TypeScript ํฌ์ŠคํŠธ๊ฐ€ ํ™”์ œ๋ฅผ ๋ชจ์•˜๋‹ค.

    ์ตœ๊ทผ์—, svelte ๋˜ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐœ๋ฐœ ์‹œ TypeScript๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ „ํ™˜ํ•˜๊ธฐ๋„ ํ•ด์„œ ๋”์šฑ ๋ˆˆ๊ธธ์ด ๊ฐ€๋Š” ์†Œ์‹์ด๋‹ค.

    ์šฐ๋ฆฌ๋„ TypeScript๋ฅผ ๋ฒ—์–ด๋‚˜์•ผ ํ•  ๋•Œ์ผ๊นŒ? ์˜์ƒ์„ ํ†ตํ•ด์„œ ํ™•์ธํ•ด ๋ณด์ž.

    TypeScript Origins: The Documentary

    TypeScript์˜ core contributors์™€ ์‚ฌ์šฉ์ž, Microsoft ๊ด€๊ณ„์ž๋“ค์˜ ์ด์•ผ๊ธฐ๋“ค์„ ๋ชจ์•„์„œ ๋งŒ๋“  ๋‹คํ๋ฉ˜ํ„ฐ๋ฆฌ๋‹ค. Microsoft๊ฐ€ TypeScript๋ฅผ ์ถ”๊ตฌํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ๋А๋‚€ ์ด์œ ๋ฅผ ๋น„๋กฏํ•˜์—ฌ TypeScript์˜ ์ฐฝ์ž‘ ๋™๊ธฐ์™€ ๊ณผ์ •์— ๋Œ€ํ•ด ์ž์„ธํžˆ ๋‹ค๋ฃฌ๋‹ค.

    Bringing forward the End-of-Life Date for Node.js 16

    ์ž‘๋…„ 6์›”, Node.js์—์„œ๋Š” LTS 16 ๋ฒ„์ „์˜ ์ง€์› ์ข…๋ฃŒ ์ผ์ž๋ฅผ 2023๋…„ 9์›” 11์ผ๋กœ ์•ž๋‹น๊ธด๋‹ค๊ณ  ๋ฐœํ‘œํ–ˆ๋‹ค. ๊ณต์‹์ ์ธ ์ง€์› ์ข…๋ฃŒ์ผ์€ 2024๋…„ 4์›”์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ง€์› ์ข…๋ฃŒ์ผ์ด 7๊ฐœ์›”์ด๋‚˜ ์•ž๋‹น๊ฒจ์ง„ ๊ฒƒ์ด๋‹ค.

    Node.js 16 ๋ฒ„์ „์˜ ๊ณต์‹ ์ง€์› ์ข…๋ฃŒ์ผ์ด ์•ž๋‹น๊ฒจ์ง„ ์ด์œ ๋Š” Node.js ๋‚ด๋ถ€์— ํฌํ•จ๋œ OpenSSL์ด๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ง€์› ์ข…๋ฃŒ ์ผ์ž ๋•Œ๋ฌธ์ด๋‹ค.

    ์–ด๋А์ƒˆ ์ง€์› ๊ธฐ๊ฐ„์ด ์ข…๋ฃŒ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ€๋Šฅํ•˜๋ฉด LTS 18์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์•„ ๋ณด์ธ๋‹ค.

    FECONF 2023

    ๊ตญ๋‚ด ์ตœ๋Œ€ ํ”„๋ŸฐํŠธ์—”๋“œ ๊ฐœ๋ฐœ ์ฝ˜ํผ๋Ÿฐ์Šค์ธ FEConf๊ฐ€ ์˜ฌํ•ด์—๋„ ๋‹ค์‹œ ๋Œ์•„์˜จ๋‹ค. 10์›” 21์ผ ํ† ์š”์ผ์— ์ž ์‹ค ๋กฏ๋ฐํƒ€์›Œ์—์„œ ์ง„ํ–‰๋˜๋ฉฐ, 10์›” 5์ผ ๋ชฉ์š”์ผ ์ผ๋ฐ˜ ํ‹ฐ์ผ“์˜ ํ‹ฐ์ผ€ํŒ…์„ ์‹œ์ž‘ํ•œ๋‹ค. ๋„ค์ด๋ฒ„ ์˜ˆ์•ฝ์„ ํ†ตํ•ด์„œ ์˜ˆ๋งคํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์˜ฌํ•ด์˜ ๋ฐœํ‘œ ์ฃผ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    • React ๋ฐ”๊นฅ์˜ ํ”„๋ก ํŠธ์—”๋“œ - ์‹ ์˜ํ•˜ ยท ํฌํŠธ์›
    • ์›น ๊ธฐ๋ฐ˜ ๊ทธ๋ž˜ํ”ฝ ํŽธ์ง‘๊ธฐ์˜ ๊ตฌ์กฐ์™€ 7๊ฐ€์ง€ ๋””์ž์ธ ํŒจํ„ด - ์‹ฌํฅ์šด ยท Naver
    • use ํ›…์ด ๋ฐ”๊ฟ€ ๋ฆฌ์•กํŠธ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ๋ฏธ๋ž˜ ๋ง›๋ณด๊ธฐ - ๋ฌธํƒœ๊ทผ ยท ๋ฐ๋ธŒ์‹œ์Šคํ„ฐ์ฆˆ
    • SSR ํ™˜๊ฒฝ(Node.js) ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋””๋ฒ„๊น… ๊ฐ€์ด๋“œ - ๋ฐ•์ง€ํ˜œ ยท ํ† ์Šคํ”Œ๋ ˆ์ด์Šค
    • ๋ช‡ ์ฒœ ํŽ˜์ด์ง€์˜ ์œ ์ € ๊ฐ€์ด๋“œ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค๋ฉฐ - ์ด์ฐฌํฌ ยท AB180
    • Vue+express์˜€๋˜ ์„œ๋น„์Šค๊ฐ€ ์ด์„ธ๊ณ„์—์„  Next.js? (ํ”„๋ ˆ์ž„์›Œํฌ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜) - ์ •์ง€๋งŒ ยท ์ˆจ๊ณ 
    • ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์›น๋ทฐ ํ”„๋ ˆ์ž„์›Œํฌ ์„ค๊ณ„์™€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒํƒœ๊ณ„ ๋งŒ๋“ค๊ธฐ - ์›์ง€ํ˜ ยท ๋‹น๊ทผ
    • React Native, Metro๋ฅผ ๋„˜์–ด์„œ - ๋ฐ•์„œ์ง„ ยท ํ† ์Šค
    • ๋Œ€ํ˜• ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ Micro Frontends ์ „ํ™˜๊ธฐ - ๊น€์ข…ํ˜ ยท flex
    • ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋””์ž์ธ ์‹œ์Šคํ…œ, 1.5๋…„์˜ ๊ธฐ๋ก. - ํ•˜ํƒœ์˜ ยท ๋‹น๊ทผ

    WebKit Features in Safari 17.0

    ์• ํ”Œ์ด ์ƒˆ๋กœ์šด ์šด์˜์ฒด์ œ iOS 17, macOS Sonoma๋ฅผ ์„ ๋ณด์˜€๋‹ค. ์ด์— ๋งž์ถฐ์„œ safari๋„ ์ƒˆ๋กœ์›Œ์กŒ๋‹ค.

    ๋ฐ์Šคํฌํ†ฑ PWA ์ง€์›, ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€, Storage API fully support ๋“ฑ์˜ ๋ณ€ํ™”๊ฐ€ ๋ˆˆ์— ๋ˆ๋‹ค.

    Dan Abramov joins Bluesky

    ์ง€๋‚œ 7๋…„๊ฐ„ React์˜ ์•„์ด์ฝ”๋‹‰ ํ•œ ๊ฐœ๋ฐœ์ž๋กœ ํ™œ๋™ํ–ˆ๋˜ Dan Abramov๊ฐ€ Meta๋ฅผ ๋– ๋‚˜๊ณ , bluesky์— ํ•ฉ๋ฅ˜ํ•œ๋‹ค๋Š” ์†Œ์‹์„ ์ „ํ–ˆ๋‹ค.

    Expo(React-Native) ๊ธฐ๋ฐ˜์˜ cross-platform ์„œ๋น„์Šค ์•ฑ์„ ๊ฐœ๋ฐœํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

    Astro 3.0

    Astro 3.0์ด ๋ฆด๋ฆฌ์Šค๋˜์—ˆ๋‹ค. View Transition API๋ฅผ ํ†ตํ•ด์„œ ์œ ๋ คํ•œ ํŽ˜์ด์ง€ ์ „ํ™˜์„ ์ง€์›ํ•˜๋Š”๋ฐ, Astro 3.0์€ View Transition API๋ฅผ ์ง€์›ํ•˜๋Š” ์ตœ์ดˆ์˜ Major ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๊ณ  ํ•œ๋‹ค.

    ์ด์™ธ์—๋„, ์—ฌ๋Ÿฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํฌํ•จํ•œ๋‹ค.

    • ์ด๋ฏธ์ง€ ์ตœ์ ํ™”(stable)
    • ๋นจ๋ผ์ง„ ๋ Œ๋”๋ง ์„ฑ๋Šฅ: Astro ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋ Œ๋”๋ง ์†๋„ 30-75% ํ–ฅ์ƒ
    • ์„œ๋ฒ„๋ฆฌ์Šค๋ฅผ ์œ„ํ•œ SSR ํ–ฅ์ƒ: ํ˜ธ์ŠคํŒ… ํ”Œ๋žซํผ์— ์—ฐ๊ฒฐํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ• ์ œ๊ณต
    • JSX๋ฅผ ์œ„ํ•œ HMR ํ–ฅ์ƒ: React ๋ฐ Preact๋ฅผ ์œ„ํ•œ HMR ์ง€์›.
    • ์ตœ์ ํ™”๋œ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ

    Introducing runes

    ์ง€๋‚œ 9์›”, ์ฐจ๊ธฐ ๋ฉ”์ด์ € ๋ฆด๋ฆฌ์Šค์ธ Svelte 5์— ํฌํ•จ๋  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์œผ๋กœ, ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ ๋ฐ˜์‘์„ฑ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ ์…‹์ธ โ€œrunesโ€์„ ๊ณต๊ฐœํ–ˆ๋‹ค.

    โ€˜Runeโ€™์€ ์‹ ๋น„์ฃผ์˜๋‚˜ ๋งˆ๋ฒ•์˜ ์ƒ์ง•์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ์ž๋‚˜ ํ‘œ์‹œ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ํ•จ์ˆ˜ ๊ตฌ๋ฌธ์„ ํ™œ์šฉํ•ด ๋ฐ˜์‘์„ฑ์„ ๋‹ฌ์„ฑํ•˜๋„๋ก ํ•œ๋‹ค.

    ๊ธฐ์กด์˜ svelte ์ฝ”๋“œ๋Š” (์ปดํŒŒ์ผ๋œ ํ›„) ์‚ฌ์šฉ์ž์˜ ์ด๋ฒคํŠธ์— ๋”ฐ๋ผ ๋ฐ˜์‘๋˜๋„๋ก ๊ตฌ์„ฑ๋˜์ง€๋งŒ, ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๋ฉด ์–ด๋–ค ๊ฐ’์ด ๋ฐ˜์‘ํ˜•์ธ์ง€ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ๊ณผ ๋ช‡๋ช‡ ์ƒํ™ฉ์—์„œ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์ƒํ™ฉ๋“ค์„ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜์‘์„ฑ์„ ํŒŒ์ผ ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด ํ™•์žฅ๋˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

    Preview ์‚ฌ์ดํŠธ๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋˜๋Š” ๋ฌธ์„œ์™€ REPL์„ ํ†ตํ•ด ์ง์ ‘ ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    [์ฐธ๊ณ ] Rune ๋ฌธ์ž๋Š” ๋™์กฑ์˜ ์•ŒํŒŒ๋ฒณ๋“ค์ด๋ฉฐ ๋‹ค์–‘ํ•œ ๊ฒŒ๋ฅด๋งŒ์–ดํŒŒ์—์„œ ๋ผํ‹ด ์•ŒํŒŒ๋ฒณ์œผ๋กœ ๋Œ€์ฒด๋˜๊ธฐ ์ „์ด๋‚˜ ํŠน์ˆ˜ํ•œ ๋ชฉ์  ๋“ฑ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ์ž์ด๋‹ค

    Announcing Biome

    Babel์„ ๊ฐœ๋ฐœํ–ˆ๋˜ Sebastian McKenzie๊ฐ€ ์›น์„ ์œ„ํ•œ ๋‹จ์ผ ํˆด์ฒด์ธ์„ ์ง€ํ–ฅํ•˜๋ฉฐ ๊ฐœ๋ฐœํ•ด์˜ค๋˜ Rome์— ๋Œ€ํ•ด์„œ ์•Œ๊ณ  ์žˆ์„์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค. Meta OSS์˜ ์ผ์›์œผ๋กœ ์‹œ์ž‘๋˜์—ˆ๋˜ ํ”„๋กœ์ ํŠธ๋Š” ์ดํ›„, Rome Tools Inc. ํšŒ์‚ฌ๋กœ ๋ฐœ์ „๋˜์—ˆ๋‹ค.

    ๊ทธ๋Ÿฌ๋‚˜, ์•„์‰ฝ๊ฒŒ๋„ ํ˜„์žฌ Rome์˜ ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์€ ์ค‘๋‹จ๋˜์—ˆ์œผ๋ฉฐ ํšŒ์‚ฌ์— ์†ํ•œ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋Š” ํ•ด๊ณ ๋˜์—ˆ๋‹ค.

    Rome ํ’€ํƒ€์ž„ ๊ฐœ๋ฐœ์ž๋กœ ์ผํ–ˆ์—ˆ๋˜ Emanuele Stoppa(ํ˜„ Astro ๊ฐœ๋ฐœํŒ€ ์†Œ์†)๋Š” โ€˜์›น์„ ์œ„ํ•œ ๋‹จ์ผ ํˆด์ฒด์ธโ€™ ๋ฏธ์…˜์„ ๊ณ„์Šนํ•˜๊ธฐ ์œ„ํ•ด Rome์„ ํฌํฌํ•œ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ์ธ Biome๋ฅผ ๊ณต๊ฐœํ–ˆ๋‹ค.

    v0

    v0์€ AI๋กœ ๊ตฌ๋™๋˜๋Š” Vercel์˜ ์ƒ์„ฑํ˜• ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์‹œ์Šคํ…œ์œผ๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กฌํ”„ํŠธ๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” shadcn/ui ๋ฐ Tailwind CSS ๊ธฐ๋ฐ˜์˜ copy-and-paste ์นœํ™”์ ์ธ React ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. (๋˜๋Š” CLI๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ์— ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.)

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

    [์ฐธ๊ณ ] ์‹ค ์‚ฌ์šฉ ๋ฐ๋ชจ๋Š” ๋‹ค์Œ ์˜์ƒ์„ ํ†ตํ•ด ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    Laws Of UX

    ์ธ๊ฐ„์˜ ์ƒ๊ฐ๊ณผ ํ–‰๋™๋ฐฉ์‹์„ ๊ฐœ๋…์ ์œผ๋กœ ์ •๋ฆฌํ•œ ์‹ฌ๋ฆฌํ•™ ๋ฒ•์น™์€ UX ๋””์ž์ธ์— ์ค‘์š”ํ•œ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฒ•์น™๋“ค์ด ์žˆ๋‹ค.
    • Jakobโ€™s Law: ๊ธฐ์กด์— ์‚ฌ์šฉํ•ด์™”๋˜ ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ ๋‹ค๋ฅธ ๊ฒƒ๋„ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธ.
    • Fitts's Law: ๋Œ€์ƒ์˜ ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ ๋Œ€์ƒ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ์™€ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.
    • Hick's Law : ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ ์„ ํƒ์ง€์˜ ์ˆ˜์™€ ๋ณต์žก์„ฑ์— ๋น„๋ก€ํ•œ๋‹ค.

    ์œ„ ์‚ฌ์ดํŠธ์—์„œ๋Š” ๊ฐ๊ฐ์— ๋Œ€ํ•œ ๋ฒ•์น™๋“ค์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ UI/UX ์  ์˜ˆ์‹œ, ๊ทธ๋ฆฌ๊ณ  ๊ด€๋ จํ•ด์„œ ์ฝ์œผ๋ฉด ์ข‹์„ ๋งŒํ•œ ์•„ํ‹ฐํด ๋งํฌ๋“ค์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.

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

    Quit Your YAP-ing

    ์ปดํฌ๋„ŒํŠธ์˜ ์—ญํ• ์ด ์ปค์ง€๋ฉด์„œ ์ ์  ๋งŽ์€ props๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์ €์ž๋Š” ์ด๋ฅผ YAP(Yet Another Prop)๋ผ๊ณ  ๋ช…ํ•˜๊ณ , YAP์„ ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ„๋‹จํ•œ ์นด๋“œ UI๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์†Œ๊ฐœํ•œ๋‹ค.

    asChild Pattern

    Headless UI library์ธ Radix์— ์‚ฌ์šฉ๋˜๋ฉด์„œ ์œ ๋ช…ํ•ด์ง„ asChild ํŒจํ„ด์„ TypeScript๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•œ๋‹ค.

    Decoupling UI and Logic in React: A Clean Code Approach with Headless Components

    ํ•œ๊ธ€ ๋ฒˆ์—ญ ํฌ์ŠคํŠธ๋กœ ํŽธํ•˜๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค

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

    CSS Diner

    ์žฌ๋ฏธ์žˆ๋Š” ๊ฒŒ์ž„์˜ ํ˜•ํƒœ๋กœ CSS ์„ ํƒ์ž๋ฅผ ๋ฐฐ์šฐ๊ณ  ์—ฐ์Šตํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    ์œ ์‚ฌํ•œ ๊ฒŒ์ž„์˜ ํ˜•ํƒœ๋กœ flexbox๋ฅผ ๋ฐฐ์›Œ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋‹ค์Œ ์‚ฌ์ดํŠธ๋„ ์ฐธ๊ณ ํ•ด ๋ณด๊ธฐ ๋ฐ”๋ž€๋‹ค.

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

    create-t3-app

    next.js, tRPC, tailwind css, prisma, next-auth ๋“ฑ์˜ ๊ธฐ์ˆ ์„ ์กฐํ•ฉํ•ด์„œ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ full-stack web app์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” CLI ๋„๊ตฌ์ด๋‹ค.

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

    T3 Stack Tutorial - FROM 0 TO PROD FOR $0 t3-app์„ ๋งŒ๋“  Theo๊ฐ€ ์ง์ ‘ ๋งŒ๋“  ํŠœํ† ๋ฆฌ์–ผ ์˜์ƒ์ด ์žˆ๋‹ค

    create-chrome-ext

    ํฌ๋กฌ ์ต์Šคํ…์…˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๋น ๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•ด ์ฃผ๋Š” scaffolding ๋„๊ตฌ์ด๋‹ค. ์—ฌ๋Ÿฌ ์›น ํ”„๋ ˆ์ž„์›Œํฌ, HMR, ๋‹คํฌ ๋ชจ๋“œ ๋“ฑ์„ ์ง€์›ํ•œ๋‹ค.

    van js

    ์„ธ์ƒ์—์„œ ๊ฐ€์žฅ ์ž‘์€ reactive UI framework๋ผ๊ณ  ์Šค์Šค๋กœ๋ฅผ ์†Œ๊ฐœํ•˜๋Š” JavaScript ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค.

    const Counter = () => {
      const counter = van.state(0);
      return div(
        'โค๏ธ ',
        counter,
        ' ',
        button({ onclick: () => ++counter.val }, '๐Ÿ‘'),
        button({ onclick: () => --counter.val }, '๐Ÿ‘Ž')
      );
    };
    
    van.add(document.body, Counter());
    

    0.9kB์˜ ์ž‘์€ ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ๊ฐ€ ํŠน์ง•์ด๋ฉฐ, React์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด์„œ React์— ์ต์ˆ™ํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ„๋‹จํ•˜๊ฒŒ Vanilla ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์œ ์šฉํ•ด ๋ณด์ธ๋‹ค.