Skip to content

Instantly share code, notes, and snippets.

@leedc0101
Created February 15, 2026 04:13
Show Gist options
  • Select an option

  • Save leedc0101/e17b6da57cb43007e777156ca62385bf to your computer and use it in GitHub Desktop.

Select an option

Save leedc0101/e17b6da57cb43007e777156ca62385bf to your computer and use it in GitHub Desktop.
frontend-briefing-2026-02-15-KST

ESLint v10.0.0 released (๊ธธ์ด์ƒ ์š”์•ฝ ๋ฒˆ์—ญ)

์›๋ฌธ์ด ๋งค์šฐ ๊ธธ์–ด์„œ, ์—…๊ทธ๋ ˆ์ด๋“œ/๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์— ์ง์ ‘ ์˜ํ–ฅ์„ ์ฃผ๋Š” ํ•ต์‹ฌ ์„น์…˜ ์ค‘์‹ฌ์œผ๋กœ ์š”์•ฝ ๋ฒˆ์—ญํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ด๋ผ์ดํŠธ

ESLint v10.0.0์€ ์ฃผ์š”(major) ๋ฆด๋ฆฌ์ฆˆ๋กœ, ์ƒˆ ๊ธฐ๋Šฅ๊ณผ ํŒŒ๊ดด์  ๋ณ€๊ฒฝ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์„ค์น˜

๋ฉ”์ด์ € ๋ฆด๋ฆฌ์ฆˆ๋ผ ์ž๋™ ์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ์•ˆ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

npm i eslint@10.0.0 --save-dev

Node.js ์ง€์› ๋ฒ”์œ„

๊ฒŒ์‹œ ์‹œ์  ๊ธฐ์ค€ Node.js v24.x๊ฐ€ LTS์ด๋ฉฐ, ESLint v10์€ ๋‹ค์Œ์„ ์ง€์› ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

  • Node.js v20.19.0 ๋ฏธ๋งŒ
  • v21.x, v23.x

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ

๋ณ€๊ฒฝ์ ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๊ณต์‹ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

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

์ฃผ์š” ๋ณ€๊ฒฝ์ 

1) ์„ค์ • ํŒŒ์ผ ํƒ์ƒ‰(lookup) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณ€๊ฒฝ

ESLint v10์€ eslint.config.*(flat config)๋ฅผ ์ฐพ์„ ๋•Œ,

  • ๊ธฐ์กด(v9): ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ(CWD) ๊ธฐ์ค€
  • ๋ณ€๊ฒฝ(v10): ๊ฐ ๋ฆฐํŠธ ๋Œ€์ƒ ํŒŒ์ผ์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์‹œ์ž‘ํ•ด์„œ ํƒ์ƒ‰

์ด ๋ณ€๊ฒฝ์€ ํ•œ ๋ฒˆ์˜ ์‹คํ–‰์—์„œ ์—ฌ๋Ÿฌ config๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๊ณ , ๋ชจ๋…ธ๋ ˆํฌ์—์„œ ํŠนํžˆ ์œ ์šฉํ•˜๋‹ค๊ณ  ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

v9์—์„œ ์‹คํ—˜ ํ”Œ๋ž˜๊ทธ v10_config_lookup_from_file๋กœ ์ผค ์ˆ˜ ์žˆ์—ˆ๊ณ , v10์—์„œ๋Š” ๊ธฐ๋ณธ๊ฐ’์ด ๋˜์—ˆ์œผ๋ฉฐ ํ•ด๋‹น ํ”Œ๋ž˜๊ทธ๋Š” ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

2) eslintrc ์‹œ์Šคํ…œ ์ œ๊ฑฐ(์™„์ „ ์‚ญ์ œ)

v10์—์„œ eslintrc ๊ตฌ์„ฑ ์‹œ์Šคํ…œ์ด ์™„์ „ํžˆ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰,

  • .eslintrc.*, .eslintignore๋Š” ๋” ์ด์ƒ ๋™์ž‘ํ•˜์ง€ ์•Š์Œ
  • ESLINT_USE_FLAT_CONFIG ํ™˜๊ฒฝ๋ณ€์ˆ˜๋Š” ๋” ์ด์ƒ ๋ฌด์‹œ๋˜์ง€ ์•Š๊ณ  ๋™์ž‘ํ•˜์ง€ ์•Š์Œ(๋” ์ด์ƒ ์˜๋ฏธ ์—†์Œ)
  • CLI์—์„œ eslintrc ์ „์šฉ ์˜ต์…˜๋“ค(--no-eslintrc, --env, --rulesdir, --ignore-path ๋“ฑ)์ด ์ œ๊ฑฐ
  • /* eslint-env */ ์ฃผ์„์€ ์—๋Ÿฌ๋กœ ๋ณด๊ณ 

API ๋ ˆ๋ฒจ์—์„œ๋„ LegacyESLint ์ œ๊ฑฐ ๋“ฑ ์—ฌ๋Ÿฌ ๋ณ€๊ฒฝ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

3) JSX reference ์ถ”์ 

JSX ์‹๋ณ„์ž๋„ ์Šค์ฝ”ํ”„ ๋ถ„์„์—์„œ ์ฐธ์กฐ๋กœ ์ถ”์ ํ•˜๊ฒŒ ๋˜์–ด,

  • no-unused-vars์˜ ์˜คํƒ/๋ฏธํƒ
  • no-undef์˜ ๋ฏธํƒ

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์ค„์–ด๋“ ๋‹ค๊ณ  ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

4) RuleTester ๊ฐ•ํ™”

ํ”Œ๋Ÿฌ๊ทธ์ธ/๋ฃฐ ์ž‘์„ฑ์ž์šฉ RuleTester๊ฐ€ ๋” ์—„๊ฒฉํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

  • ๋ฉ”์‹œ์ง€/์œ„์น˜/๋ฐ์ดํ„ฐ ๊ฒ€์ฆ์„ ๊ฐ•์ œํ•˜๋Š” ์˜ต์…˜(requireMessage, requireLocation, requireData) ์ถ”๊ฐ€
  • ์‹คํŒจํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์œ„์น˜๋ฅผ ๋” ์ž˜ ์ฐพ์•„์ฃผ๋„๋ก ์Šคํƒ ํŠธ๋ ˆ์ด์Šค ๊ฐœ์„ 

์š”์•ฝ

  • v10์€ flat config ์ „ํ™˜ + eslintrc ์™„์ „ ์ œ๊ฑฐ๊ฐ€ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋…ธ๋ ˆํฌ๋Š” ํŒŒ์ผ ๊ธฐ์ค€ config ํƒ์ƒ‰์œผ๋กœ ๋ฉ€ํ‹ฐ config ์‹คํ–‰์ด ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.
  • ์—…๊ทธ๋ ˆ์ด๋“œ๋Š” ๊ณต์‹ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์ง„ํ–‰ํ•˜๋Š” ๊ฒŒ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

Roadmap 2026 (webpack)

๊ฐœ์š”

webpack TSC๋Š” 2026๋…„์— ๋‹จ์ˆœ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ๋„˜์–ด, ์„ค์ •/์˜์กด์„ฑ ๋ณต์žก๋„๋ฅผ ์ค„์ด๊ณ  ํ˜„๋Œ€ ๋Ÿฐํƒ€์ž„(์›น/Node/Bun/Deno ๋“ฑ)์— ๋Œ€๋น„ํ•˜๋Š” ๊ฐœ์„ ์„ ์ถ”์ง„ํ•œ๋‹ค๊ณ  ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

2026๋…„์— ์ง‘์ค‘ํ•˜๋Š” ์ฃผ์š” ํ•ญ๋ชฉ

ํ”Œ๋Ÿฌ๊ทธ์ธ ์—†์ด CSS Modules ์ง€์›

experiments.css ์˜ต์…˜์œผ๋กœ ์ œ๊ณต๋˜๋˜ ๋„ค์ดํ‹ฐ๋ธŒ CSS ์ง€์›์„ ๋” ์ง„์ „์‹œ์ผœ,

  • 2~3์›”์ฏค ์ฝ”์–ด ํฌํ•จ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ 
  • ํ•œ๋™์•ˆ ์‹คํ—˜ ์ƒํƒœ๋กœ ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ๋ฅผ ๋ฐ›๋‹ค๊ฐ€
  • webpack 6์—์„œ๋Š” ๋” ์ด์ƒ ์‹คํ—˜์ด ์•„๋‹ˆ๋ฉฐ ๊ด€๋ จ ํ”Œ๋Ÿฌ๊ทธ์ธ(์˜ˆ: mini-css-extract-plugin)์ด ํ•„์š” ์—†์–ด์ง€๋Š” ๋ฐฉํ–ฅ์„ ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

universal ํƒ€๊นƒ(ํฌ๋กœ์Šค ๋Ÿฐํƒ€์ž„ ํ˜ธํ™˜)

Node, ์›น, Bun, Deno ๋“ฑ ๋‹ค์–‘ํ•œ ๋Ÿฐํƒ€์ž„์—์„œ ๋Œ์•„๊ฐ€๋„๋ก

  • ๊ฒฐ๊ณผ๋ฌผ์ด ์ˆœ์ˆ˜ ESM์ด ๋˜๋„๋ก ๋ž˜ํ•‘/์ถœ๋ ฅ์„ ์ •๋ฆฌํ•˜๊ณ 
  • ๋Ÿฐํƒ€์ž„ ๋น„์ข…์†์ ์ธ ๋นŒ๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” universal ํƒ€๊นƒ ์•„์ด๋””์–ด๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

๋กœ๋” ์—†์ด TypeScript ๋นŒ๋“œ

์ตœ๊ทผ TypeScript paths ํ•ด์„์„ ์ฝ”์–ด์— ๋„ฃ์–ด ํ”Œ๋Ÿฌ๊ทธ์ธ ์˜์กด์„ ์ค„์˜€๊ณ , ๋‹ค์Œ์œผ๋กœ๋Š” ts-loader ๊ฐ™์€ ๋กœ๋” ์—†์ด webpack ์ž์ฒด์—์„œ TS ํŠธ๋žœ์ŠคํŒŒ์ผ๊นŒ์ง€ ์ง€์›ํ•ด ์˜์กด์„ฑ์„ ๋” ์ค„์ด๋ ค๋Š” ๋ฐฉํ–ฅ์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

HTML entry(ํ”Œ๋Ÿฌ๊ทธ์ธ ์—†์ด)

html-webpack-plugin ์—†์ด๋„ HTML ํŒŒ์ผ์„ importํ•˜๊ณ  entry๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‹คํ—˜ ์˜ต์…˜์œผ๋กœ ์ฝ”์–ด์— ๋„ฃ๋Š” ์•„์ด๋””์–ด๋ฅผ ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

Webpack Everywhere

Node ๋‚ด๋ถ€ ์˜์กด(Buffer ๋“ฑ)๊ณผ ๊ฒฐํ•ฉ์„ ์ค„์ด๊ณ , Node ์ „์šฉ ๋ชจ๋“ˆ(node:fs) ๊ฐ™์€ ์˜์กด์ด ์žˆ์–ด๋„ ๋ธŒ๋ผ์šฐ์ €/๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋Ÿฐํƒ€์ž„-์ค‘๋ฆฝ ๊ตฌ์กฐ๋ฅผ ๊ฐ•ํ™”ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Lazy Barrel Optimization ํ‰๊ฐ€

Rspack์˜ lazy barrel ์ตœ์ ํ™”์ฒ˜๋Ÿผ, side-effect ์—†๋Š” barrel(์žฌexport ๋ฌถ์Œ)์—์„œ ์‹ค์ œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ชจ๋“ˆ์€ ๋นŒ๋“œํ•˜์ง€ ์•Š๋Š” ์ „๋žต์„ ๊ฒ€ํ† ํ•ด ๋นŒ๋“œ ์‹œ๊ฐ„์„ ์ค„์ด๋ ค๋Š” ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค.

์ž์‚ฐ(minimizer) ์„ค์ • ๋‹จ์ˆœํ™”

ํ˜„์žฌ๋Š” JS/CSS/HTML/JSON minimizer ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฐ๊ฐ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ํ†ตํ•ฉํ•œ ๋‹จ์ผ minimizer ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์ •๋ฆฌํ•ด ์„ค์ •๊ณผ ์œ ์ง€๋ณด์ˆ˜ ๋ถ€๋‹ด์„ ์ค„์ด๋ ค๋Š” ๋ฐฉํ–ฅ์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

Dev Experience ๊ฐœ์„ 

  • dev-middleware/hot-middleware ๋ณ‘ํ•ฉ, dev-server overlay ์ถ”์ถœ ๋“ฑ ๋‚ด๋ถ€ ์ •๋ฆฌ
  • webpack-cli ์œ ์ง€๋ณด์ˆ˜/์‚ฌ์šฉ์„ฑ ๊ฐœ์„ (ํŒจํ‚ค์ง€ ํ†ตํ•ฉ, help/subcommand ๋ฆฌํŒฉํ† ๋ง ๋“ฑ)

๋ฌธ์„œ ์ •ํ™•์„ฑ

ํƒ€์ž…/์Šคํ‚ค๋งˆ์—์„œ API/์„ค์ • ๋ฌธ์„œ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•ด ๋ฌธ์„œ-๋™์ž‘ ๋ถˆ์ผ์น˜๋ฅผ ์ค„์ด๋Š” ๋ชฉํ‘œ๋ฅผ ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ๋ฌด๋ฆฌ

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

Interop 2025: A year of convergence (WebKit)

Interop 2025 ์š”์•ฝ

Interop ํ”„๋กœ์ ํŠธ๋Š” Apple, Bocoup, Google, Igalia, Microsoft, Mozilla ๋“ฑ์ด ํ•จ๊ป˜ ์›น ํ”Œ๋žซํผ์—์„œ ์ƒํ˜ธ์šด์šฉ์„ฑ์ด ์ค‘์š”ํ•œ ์˜์—ญ์„ ์ •ํ•˜๊ณ (ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ๊ธฐ๋ฐ˜), ๋ธŒ๋ผ์šฐ์ € ๊ฐ„ ๊ตฌํ˜„์„ ๋งž์ถ”๋Š” ํ˜‘์—…์ž…๋‹ˆ๋‹ค.

2025๋…„์€ ์ง€๊ธˆ๊นŒ์ง€ ๊ฐ€์žฅ ์•ผ์‹ฌ์ฐฌ ํ•ด์˜€๋‹ค๊ณ  ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  • ํฌ์ปค์Šค ์˜์—ญ 19๊ฐœ + ์กฐ์‚ฌ(investigation) ์˜์—ญ 5๊ฐœ
  • ์—ฐ์ดˆ์—๋Š” ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋™์‹œ์— ํ†ต๊ณผํ•˜๋Š” ํ…Œ์ŠคํŠธ ๋น„์œจ์ด 29%์˜€๋Š”๋ฐ,
  • ์—ฐ๋ง์—๋Š” Interop ์ ์ˆ˜๊ฐ€ 97% ํ†ต๊ณผ์œจ์— ๋„๋‹ฌ
  • ์‹คํ—˜ ๋ธŒ๋ผ์šฐ์ €(Chrome Canary/Edge Dev/Firefox Nightly/Safari TP) ๋ชจ๋‘ 99% ๋‹ฌ์„ฑ

Safari๊ฐ€ 43 โ†’ 99๋กœ ๊ฐ€์žฅ ํฐ ํญ์œผ๋กœ ์ƒ์Šนํ–ˆ๋‹ค๊ณ  ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค.

์˜ฌํ•ด ๋‹ค๋ฃฌ ์˜์—ญ(์˜ˆ์‹œ)

CSS/UI ์ชฝ

  • Anchor Positioning
  • View Transitions
  • @scope
  • backdrop-filter
  • text-decoration
  • writing modes
  • layout(Flexbox/Grid)
  • <details> element

API/ํ”Œ๋žซํผ ๊ธฐ๋Šฅ

  • Navigation API
  • Storage Access API
  • URLPattern
  • JS Modules
  • scrollend event
  • WebRTC
  • WebAssembly

ํ˜ธํ™˜์„ฑ/๊ฑด๊ฐ• ์˜์—ญ

  • Core Web Vitals
  • Pointer/Mouse events
  • Mutation events ์ œ๊ฑฐ
  • ์ „๋ฐ˜์ ์ธ web compatibility

์กฐ์‚ฌ ์˜์—ญ

  • ์ ‘๊ทผ์„ฑ ํ…Œ์ŠคํŠธ, Gamepad API ํ…Œ์ŠคํŠธ, ๋ชจ๋ฐ”์ผ ํ…Œ์ŠคํŠธ, ํ”„๋ผ์ด๋ฒ„์‹œ ํ…Œ์ŠคํŠธ, WebVTT

ํŠนํžˆ ์˜๋ฏธ ์žˆ์—ˆ๋˜ 3๊ฐ€์ง€ ํฌ์ปค์Šค

1) Anchor positioning

JS ํฌ์ง€์…”๋‹ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—†์ด๋„ CSS๋งŒ์œผ๋กœ popover/tooltip/menu๋ฅผ ๊ธฐ์ค€ ์š”์†Œ์— ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋ฉฐ, ์—ฌ๋Ÿฌ ํ•ด ๋™์•ˆ ๊ฐ€์žฅ ์š”์ฒญ์ด ๋งŽ๋˜ CSS ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์˜€๊ณ  โ€œ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ƒํ˜ธ์šด์šฉ ๊ฐ€๋Šฅโ€ํ•˜๊ฒŒ ๋๋‹ค๊ณ  ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

2) Same-document View Transitions

๋ธŒ๋ผ์šฐ์ € ๋„ค์ดํ‹ฐ๋ธŒ๋กœ UI ์ƒํƒœ ๊ฐ„ ์ „ํ™˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ œ๊ณตํ•˜๋Š” API์ด๋ฉฐ, Safari 18.x์—์„œ ์ง€์›์„ ์ œ๊ณตํ–ˆ๊ณ , Interop์„ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ € ๊ฐ„ ํ˜ธํ™˜์ด ๋งž์•„๊ฐ€๋ฉด์„œ "์ด์ œ ์“ธ ์ค€๋น„๊ฐ€ ๋๋‹ค"๋Š” ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค.

3) Navigation API

history.pushState()์˜ ํ˜„๋Œ€์  ๋Œ€์•ˆ์œผ๋กœ, SPA์—์„œ ์ธํ„ฐ์…‰ํŠธ/ํŠธ๋ž˜๋ฒ„์„ค/์—”ํŠธ๋ฆฌ ๋“ฑ ๋„ค๋น„๊ฒŒ์ด์…˜์„ ๋” ์ œ๋Œ€๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. Safari 26.2์—์„œ ์ง€์›ํ–ˆ๊ณ , ์ดˆ๊ธฐ๋ถ€ํ„ฐ ์ƒํ˜ธ์šด์šฉ์„ฑ ์žˆ๊ฒŒ ๋“ค์–ด์˜จ ์ ์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

๊ทธ๋ž˜ํ”„๊ฐ€ ๋ณด์—ฌ์ฃผ๋Š” ํ•ต์‹ฌ์€ โ€œ๋ชจ๋“  ์—”์ง„์ด ์œ„๋กœ ์ˆ˜๋ ด(convergence)ํ–ˆ๋‹คโ€๋Š” ๊ฒƒ์ด๋ฉฐ, ์ด ์ˆ˜๋ ด์ด ๊ฐœ๋ฐœ์ž๊ฐ€ "ํ•œ ๋ฒˆ ์“ฐ๊ณ  ์–ด๋””์„œ๋‚˜ ๋™์ž‘"์„ ๋” ๋ฏฟ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค๊ณ  ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Interop 2025 ๊ฒฐ๊ณผ๋Š” ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์ „์ฒด ํฌ์ปค์Šค ์˜์—ญ๋ณ„ ์ ์ˆ˜๊นŒ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

A Broken Heart (Safari์—์„œ โค๏ธ ํ•˜๋‚˜๋กœ 100๋ฐฐ ๋А๋ ค์ง„ ์‚ฌ๋ก€)

์š”์•ฝ

๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ์›๋ž˜ 1์ดˆ ๋‚ด์™ธ๋กœ ๋กœ๋“œ๋˜๋‹ค๊ฐ€ ๊ฐ‘์ž๊ธฐ 10์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ , ์กฐ์‚ฌํ•ด๋ณด๋‹ˆ Safari์—์„œ๋งŒ ์žฌํ˜„๋˜๋Š” ์„ฑ๋Šฅ ๋ฌธ์ œ์˜€๋‹ค๋Š” ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค.

์ดˆ๊ธฐ ๊ฐ€์„ค๊ณผ ๋ฐ˜์ „

์ž‘์„ฑ์ž๋Š” ์ฒ˜์Œ์—” React ๋ฌธ์ œ(๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”, memo ๋ˆ„๋ฝ ๋“ฑ)๋ฅผ ์˜์‹ฌํ–ˆ๊ณ , ์ฝ”๋”ฉ ์—์ด์ „ํŠธ์—๊ฒŒ React ์ด์Šˆ๋ฅผ ์ฐพ์•„ ๊ณ ์น˜๊ฒŒ ํ–ˆ์ง€๋งŒ ํฐ ๊ฐœ์„ ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋ง์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Safari ์„ฑ๋Šฅ ์ธ์ŠคํŽ™ํ„ฐ๋ฅผ ๋ณด๋ฉด ๋„คํŠธ์›Œํฌ/JS ํŒŒ์‹ฑ/์Šคํƒ€์ผ ๊ณ„์‚ฐ์ด ์•„๋‹ˆ๋ผ, CPU์˜ ๋Œ€๋ถ€๋ถ„(94%)์ด Layout์— ์“ฐ์ด๊ณ  ์žˆ์—ˆ๊ณ , ํ•œ ๋ฒˆ์˜ Layout ํŒจ์Šค๊ฐ€ 1600ms ์ด์ƒ ๊ฑธ๋ฆฌ๋Š” ๋“ฑ ๋น„์ •์ƒ์ ์œผ๋กœ ๋А๋ ธ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ”์ด๋„ˆ๋ฆฌ ์„œ์น˜๋กœ ์ตœ์†Œ ์žฌํ˜„

์›์ธ์„ ์ฐพ๊ธฐ ์œ„ํ•ด "๋ฐ”์ด๋„ˆ๋ฆฌ ์„œ์น˜" ๋ฐฉ์‹(์›์ธ์ด ๋  ๋งŒํ•œ ์š”์†Œ๋ฅผ ์ ˆ๋ฐ˜์”ฉ ์ œ๊ฑฐ/๋˜๋Œ๋ฆฌ๋ฉฐ ์ตœ์†Œ ์žฌํ˜„์„ ์ฐพ๋Š” ๋ฐฉ์‹)์„ ์ ์šฉํ–ˆ๊ณ , 10๋ถ„ ์ •๋„ ๋งŒ์— ๋ฒ”์ธ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

๋ฒ”์ธ์€ ๋ฒ„ํŠผ์— ์ถ”๊ฐ€ํ–ˆ๋˜ ํ•˜ํŠธ ์ด๋ชจ์ง€(โค๏ธ) ์˜€์Šต๋‹ˆ๋‹ค.

  • ํ•˜ํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด Layout์ด 2ms
  • ๋‹ค์‹œ ๋„ฃ์œผ๋ฉด Layout์ด 1600ms

๋” ๊นŠ์€ ์›์ธ: Noto Color Emoji + Safari

๋ฒ„๊ทธ ๋ฆฌํฌํŠธ๋ฅผ ์œ„ํ•ด ์ตœ์†Œ ์žฌํ˜„ HTML์„ ๋งŒ๋“ค๋‹ค ๋ณด๋‹ˆ, ์ง„์งœ ๋ฌธ์ œ๋Š” ์ด๋ชจ์ง€ ์ž์ฒด๋ผ๊ธฐ๋ณด๋‹ค ํฐํŠธ์˜€๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ HTML์ด Safari 26.2์—์„œ Layout์— 1600ms๊ฐ€ ๊ฑธ๋ฆผ:

<!DOCTYPE html>
<html>
<head>
  <link href="https://fonts.googleapis.com/css2?family=Noto+Color+Emoji" rel="stylesheet">
  <style>
    body { font-family: "Noto Color Emoji"; }
  </style>
</head>
<body>
  ๐Ÿ’”
</body>
</html>

Noto Color Emoji๋Š” COLRv1 ์ปฌ๋Ÿฌ ํฐํŠธ ๊ธฐ์ˆ ์„ ์“ฐ๋Š”๋ฐ, Safari์—์„œ๋Š” SVG fallback ๊ฒฝ๋กœ์—์„œ CoreSVG ์ชฝ์ด ๋งค์šฐ ๋А๋ฆฐ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์‘/๊ถŒ์žฅ ์‚ฌํ•ญ

์ž‘์„ฑ์ž๋Š” โ€œApple ํ”Œ๋žซํผ์—์„œ Noto Color Emoji๋ฅผ ์“ฐ์ง€ ๋ง๊ณ , ํฐํŠธ ๋ชฉ๋ก์—์„œ Apple Color Emoji๋ฅผ ๋จผ์ € ๋‘๋ผโ€๋Š” ์‹ค๋ฌด ํŒ์„ ๋‚จ๊น๋‹ˆ๋‹ค(๋ฒ„๊ทธ๊ฐ€ ๊ณ ์ณ์งˆ ๋•Œ๊นŒ์ง€).

๋˜ํ•œ ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๊ฐ€ ์›์ธ ๊ฒฉ๋ฆฌ/์ตœ์†Œ ์žฌํ˜„ ์ œ์ž‘์— ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์˜€๋‹ค๋Š” ๊ฒฝํ—˜๋‹ด์œผ๋กœ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ : WebKit ๋ฒ„๊ทธ ํŠธ๋ž˜์ปค์—๋„ ์ด ์ด์Šˆ๊ฐ€ ๋“ฑ๋ก๋๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Whatโ€™s New in ViteLand: January 2026 Recap (VoidZero)

  • ์›๋ฌธ ์ œ๋ชฉ: Whatโ€™s New in ViteLand: January 2026 Recap
  • ์›๋ฌธ ๋งํฌ: https://voidzero.dev/posts/whats-new-jan-2026
  • ๋ฒˆ์—ญ ์ƒ์„ฑ์ผ: 2026-02-15 (KST)

๊ฐœ์š”

VoidZero๋Š” Vite/Vitest/Rolldown/Oxc๋ฅผ ํ•˜๋‚˜์˜ ํ†ตํ•ฉ ํˆด์ฒด์ธ์œผ๋กœ ๋ฌถ์–ด ๊ฐœ๋ฐœ์ž ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๊ฒ ๋‹ค๋Š” ๋ฐฉํ–ฅ์„ ์„ค๋ช…ํ•˜๊ณ , 2026๋…„ 1์›”์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์š”์•ฝํ•ฉ๋‹ˆ๋‹ค.

Unified by Design

๊ฐ ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ฐœ๋ณ„ ์‹œ๊ฐ ์ •์ฒด์„ฑ์„ ์œ ์ง€ํ•˜๋˜ ๊ฒƒ์„, voidzero.dev / vite.dev / vitest.dev / rolldown.rs / oxc.rs ๋“ฑ ์ „๋ฐ˜์—์„œ ํ†ตํ•ฉ๋œ ๋””์ž์ธ/๋ธŒ๋žœ๋”ฉ์œผ๋กœ ๊ฐœํŽธํ–ˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹จ์ˆœ ์™ธํ˜•์ด ์•„๋‹ˆ๋ผ, Vite 8์ด Rolldown/Oxc๋ฅผ ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ , Oxlint/Oxfmt๋„ ๊ฐ™์€ ํŒŒ์„œ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋“ฑ โ€œ์‹ค์ œ ํ†ตํ•ฉโ€์ด ์ง„ํ–‰ ์ค‘์ด๋ผ๋Š” ๋ฉ”์‹œ์ง€๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

Project Updates

Vite

  • Vite ๋ˆ„์  npm ๋‹ค์šด๋กœ๋“œ๊ฐ€ 30์–ต์„ ๋„˜์—ˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.
  • React Server Components ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์ด ์ปค์Šคํ…€ ํ™˜๊ฒฝ์„ ๋” ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์กฐ์ •๋˜์—ˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Vitest

  • Vitest 4.1 ๋ฒ ํƒ€๊ฐ€ ์‹œ์ž‘.
  • Test Tags ๊ธฐ๋Šฅ(ํƒœ๊ทธ ๊ธฐ๋ฐ˜์œผ๋กœ ํ…Œ์ŠคํŠธ ํ•„ํ„ฐ๋ง/ํƒ€์ž„์•„์›ƒ ๋“ฑ ์„ค์ •)์„ ์†Œ๊ฐœ.
  • Vite ์—†์ด Vitest๋ฅผ ๋Œ๋ฆฌ๋Š” ๋ฐฉํ–ฅ(์˜ต์…˜ ๋„๊ธฐ ๋“ฑ) ๋…ผ์˜๊ฐ€ ์ง„ํ–‰ ์ค‘.
  • ํ…Œ์ŠคํŠธ ์ปจํ…์ŠคํŠธ ํ™•์žฅ์— builder ํŒจํ„ด์„ ๋„์ž…ํ•ด ํƒ€์ž… ์ถ”๋ก ์„ ๊ฐœ์„ .

Rolldown

  • Rolldown์ด RC(๋ฆด๋ฆฌ์ฆˆ ํ›„๋ณด) ๋‹จ๊ณ„์— ๋„๋‹ฌ, ์‹คํ—˜ ๊ธฐ๋Šฅ์„ ์ œ์™ธํ•˜๋ฉด API ํŒŒ๊ดด์  ๋ณ€๊ฒฝ์ด ์—†์„ ๊ฑฐ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • Lazy Barrel Optimization ๋„์ž…: barrel ํŒŒ์ผ์—์„œ ์‹ค์ œ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“ˆ๋งŒ ์ปดํŒŒ์ผ.
    • ์‹ค์‚ฌ๋ก€๋กœ AntDesign์—์„œ Button ํ•˜๋‚˜๋งŒ importํ•  ๋•Œ ์ปดํŒŒ์ผ ๋ชจ๋“ˆ ์ˆ˜ 92% ๊ฐ์†Œ, ๋นŒ๋“œ 2๋ฐฐ ๋นจ๋ผ์ง์„ ์–ธ๊ธ‰.
  • ์ฒญํ‚น ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ์„ ์œผ๋กœ ๋ถˆํ•„์š”ํ•œ chunk ์ƒ์„ฑ์„ ์ค„์ž„.
  • tsdown v0.20 ๋ฆด๋ฆฌ์ฆˆ(๋กค๋‹ค์šด RC ์ง€์›/์„ฑ๋Šฅ ๊ฐœ์„  ๋“ฑ)

Oxc

  • Oxlint๊ฐ€ ๋™์  config(์˜ˆ: oxlint.config.ts)๋ฅผ ์ง€์›.
  • ๋„ค์ดํ‹ฐ๋ธŒ ๋ฃฐ ์ถ”๊ฐ€(์˜ˆ: prefer-const).
  • tsgolint๊ฐ€ tsconfig ํƒ์ƒ‰ ๋™์‹œํ™”๋กœ 20% ๋นจ๋ผ์ง.
  • Oxfmt์— Tailwind class sorting(์‹คํ—˜) ๋„์ž….
  • import ๊ทธ๋ฃน ์ •๋ ฌ ๊ธฐ๋ณธ ์ˆœ์„œ RFC ๊ณต๊ฐœ.
  • Oxfmt๊ฐ€ Prettier์™€ 100% ์ปจํฌ๋จผ์Šค(ํ˜ธํ™˜) ๋‹ฌ์„ฑ, ๊ทธ ๊ณผ์ •์—์„œ Prettier ์—…์ŠคํŠธ๋ฆผ ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ/์ˆ˜์ •.

์ปค๋ฎค๋‹ˆํ‹ฐ/๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‚ฌ๋ก€

  • Turborepo๊ฐ€ ESLint/Prettier์—์„œ Oxlint/Oxfmt๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ–ˆ๊ณ , ๊ฐ€์ด๋“œ๋„ ์ถ”๊ฐ€.
  • Hugging Face, Lichess ๋“ฑ๋„ Prettier โ†’ Oxfmt, ESLint โ†’ Oxlint ์ „ํ™˜ ์‚ฌ๋ก€๊ฐ€ ์–ธ๊ธ‰๋ฉ๋‹ˆ๋‹ค.

์š”์•ฝํ•˜๋ฉด, VoidZero ์ƒํƒœ๊ณ„๋Š” โ€œ๋ฒˆ๋“ค๋Ÿฌ/๋ฆฐํ„ฐ/ํฌ๋งคํ„ฐโ€๋ฅผ ํ†ตํ•ฉํ•˜๊ณ  ์†๋„/DX๋ฅผ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋น ๋ฅด๊ฒŒ ์ง„์ฒ™ ์ค‘์ด๋ผ๋Š” ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

WCAG 3.0 overview and update (Feb 2026)

WCAG 3.0๋Š” ๋ฌด์—‡์ธ๊ฐ€

WCAG 3.0๋Š” W3C๊ฐ€ ๋งŒ๋“œ๋Š” ์ฐจ์„ธ๋Œ€ ๋””์ง€ํ„ธ ์ ‘๊ทผ์„ฑ ๊ฐ€์ด๋“œ๋ผ์ธ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด WCAG 1.0~2.2๊ฐ€ โ€œWeb Content Accessibility Guidelinesโ€์˜€๋‹ค๋ฉด, WCAG 3.0์—์„œ๋Š” ์•ฝ์–ด์˜ ์˜๋ฏธ๊ฐ€ โ€œW3C Accessibility Guidelinesโ€๋กœ ๋ฐ”๋€Œ์–ด ์›น ํŽ˜์ด์ง€๋งŒ์ด ์•„๋‹ˆ๋ผ ๋” ๋„“์€ ๋ฒ”์œ„๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉํ–ฅ์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค.

์™œ ์ƒˆ ํ‘œ์ค€์ด ํ•„์š”ํ•œ๊ฐ€

์›น ์ฝ˜ํ…์ธ ๋ฅผ ๋„˜์–ด์„œ๋Š” ๋ฒ”์œ„

WCAG 2.2๊ฐ€ ์ฃผ๋กœ ์›น ํŽ˜์ด์ง€์— ์ ์šฉ๋˜์—ˆ๋‹ค๋ฉด, WCAG 3.0์€ ๋‹ค์Œ๋„ ์ง€์› ๋Œ€์ƒ์œผ๋กœ ์‚ผ์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋ฐ”์ผ ์•ฑ/์†Œํ”„ํŠธ์›จ์–ด
  • ๋ฌธ์„œ(PDF ๋“ฑ)
  • CMS ๊ฐ™์€ ์ €์ž‘ ๋„๊ตฌ
  • ๋ธŒ๋ผ์šฐ์ €/๋ณด์กฐ๊ณตํ•™(์œ ์ € ์—์ด์ „ํŠธ)
  • VR/XR ํ™˜๊ฒฝ ๋“ฑ

์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด์„ฑ

ํ‘œ์ค€ ๊ฐœ์ •์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๋ฌธ์ œ๋ฅผ ์ค„์—ฌ, ๋” ์ž์ฃผ ์—…๋ฐ์ดํŠธ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋ฅผ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

๋” ํฌ๊ด„์ ์ธ ํฌ์šฉ

๊ฐ๊ฐ/์‹ ์ฒด๋ฟ ์•„๋‹ˆ๋ผ ์ธ์ง€ ์žฅ์•  ๋“ฑ ๋” ๋„“์€ ์‚ฌ์šฉ์ž๊ตฐ์„ ์ปค๋ฒ„ํ•˜๋ ค๋Š” ๋ฐฉํ–ฅ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ ‘๊ทผ์„ฑ ํ‘œ์ค€๊ณผ์˜ ๊ด€๊ณ„

์—ฌ๋Ÿฌ ํ‘œ์ค€(ATAG/UAAG/WCAG ๋“ฑ)์ด ํฉ์–ด์ ธ ์žˆ๋˜ ๊ฒƒ์„ WCAG 3.0์—์„œ ๋” ์กฐํ™”๋กญ๊ฒŒ ํ†ตํ•ฉํ•˜๋ ค๋Š” ๋ชฉํ‘œ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ WCAG 3.0์ด ๋‚˜์˜จ๋‹ค๊ณ  WCAG 2.2๊ฐ€ ์ฆ‰์‹œ ํ๊ธฐ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ๋ฒ•/๊ทœ์ •์— ๋‚ด์žฅ๋œ 2.2๊ฐ€ ํ•œ๋™์•ˆ ๋ณ‘ํ–‰๋  ๊ฒƒ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์–ธ์ œ ์™„์„ฑ๋˜๋‚˜

2016๋…„๋ถ€ํ„ฐ ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ, ๋ฌธ์„œ ๊ธฐ์ค€์œผ๋กœ๋Š” 2028๋…„ ์ด์ „ ์ตœ์ข… ํ™•์ •์ด ์–ด๋ ต๋‹ค๋Š” ์ „๋ง์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

  • Working Draft(ํ˜„์žฌ)
  • Candidate Recommendation(์˜ˆ์ƒ: 2027๋…„ Q4)
  • W3C Recommendation(์ตœ์ข…, 2028๋…„ ์ดํ›„ ๊ฐ€๋Šฅ)

WCAG 3.0์˜ ํฐ ๋ณ€ํ™”

์Šค์ฝ”ํ”„

โ€œํŽ˜์ด์ง€(URI)โ€ ์ค‘์‹ฌ์—์„œ ๋ฒ—์–ด๋‚˜,

  • view(๋ทฐํฌํŠธ์—์„œ ์‹ค์ œ ์ƒํ˜ธ์ž‘์šฉ ๊ฐ€๋Šฅํ•œ ํ™”๋ฉด)
  • process(์—ฌ๋Ÿฌ ๋ทฐ์˜ ํ๋ฆ„)

๋‹จ์œ„๋กœ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๋ฐฉํ–ฅ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ ํ•ฉ์„ฑ(Conformance)

WCAG 2.x์˜ pass/fail ์ด๋ถ„๋ฒ•์—์„œ ๋ฒ—์–ด๋‚˜,

  • Foundational requirements
  • Supplemental requirements
  • Assertions

๋กœ ๋‚˜๋ˆ„๊ณ , ์ ์ˆ˜/๋ ˆ๋ฒจ ๊ฐ™์€ ๋” ์œ ์—ฐํ•œ ๋ชจ๋ธ์„ ์ค€๋น„ ์ค‘์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋” ์‰ฌ์šด ๋ฌธ์„œ(plain language)

๊ธฐ์ˆ  ๋ฌธ์„œ๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ต๋‹ค๋Š” ๋ฌธ์ œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด plain language ์š”์•ฝ์„ ํฌํ•จํ•˜๋ ค๋Š” ๋ฐฉํ–ฅ์„ ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

์ค€๋น„ ๋ฐฉ๋ฒ•

ํ˜„์žฌ๋Š” WCAG 2.2๋ฅผ ์‚ฌ์‹ค์ƒ์˜ ๊ธฐ์ค€์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒŒ ๋งž๊ณ , WCAG 3.0์€ ์•„์ง ๋ณ€๋™์ด ํฌ๋ฏ€๋กœ โ€œํ˜„์žฌ ์ดˆ์•ˆ๋งŒ ๋งž์ถ˜๋‹ค๊ณ  ์ตœ์ข… ์ ํ•ฉ์„ ๋ณด์žฅํ•˜์ง„ ์•Š๋Š”๋‹คโ€๊ณ  ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ์—, ํฌ์šฉ์  ๋””์ž์ธ๊ณผ ์‹ค์ œ ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ์„ ํฌํ•จํ•˜๋Š” ์ ‘๊ทผ์€ ์ง€๊ธˆ๋ถ€ํ„ฐ๋„ ๋„์›€์ด ๋˜๋ฉฐ WCAG 3.0 ๋ฐฉํ–ฅ์„ฑ๊ณผ๋„ ์ถฉ๋Œํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Bun v1.3.9

  • ์›๋ฌธ ์ œ๋ชฉ: Bun v1.3.9
  • ์›๋ฌธ ๋งํฌ: https://bun.sh/blog/bun-v1.3.9
  • ๋ฒˆ์—ญ ์ƒ์„ฑ์ผ: 2026-02-15 (KST)

bun run --parallel / --sequential

์—ฌ๋Ÿฌ package.json ์Šคํฌ๋ฆฝํŠธ๋ฅผ

  • ๋™์‹œ์—(--parallel) ๋˜๋Š”
  • ์ˆœ์ฐจ๋กœ(--sequential) ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

bun run --parallel build test
bun run --sequential build test
bun run --parallel --filter '*' build lint test
bun run --sequential --workspaces build

๊ฐ ์ถœ๋ ฅ ๋ผ์ธ์— ์Šคํฌ๋ฆฝํŠธ ์ด๋ฆ„/ํŒจํ‚ค์ง€ ์ด๋ฆ„ ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ๋ถ™์—ฌ(ํฌ์–ด๋งจ ์Šคํƒ€์ผ) ์–ด๋–ค ์ž‘์—…์—์„œ ๋‚˜์˜จ ๋กœ๊ทธ์ธ์ง€ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋‚˜๊ฐ€ ์‹คํŒจํ•˜๋ฉด ๋‚˜๋จธ์ง€๋ฅผ ์ค‘๋‹จํ•˜๊ณ , ๋ชจ๋‘ ๋๋‚ด๊ณ  ์‹ถ์œผ๋ฉด --no-exit-on-error๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ --filter/--workspaces์™€ ํ•จ๊ป˜ ์“ธ ์ˆ˜ ์žˆ๊ณ , pre/post ์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฉ”์ธ ์Šคํฌ๋ฆฝํŠธ์™€ ํ•จ๊ป˜ ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋กœ ๋ฌถ์—ฌ ์‹คํ–‰๋œ๋‹ค๊ณ  ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

net.Server โ†’ HTTP/2 ์—…๊ทธ๋ ˆ์ด๋“œ ํŒจํ„ด ์ˆ˜์ •

net.Server์—์„œ ๋ฐ›์€ raw TCP ์—ฐ๊ฒฐ์„ Http2SecureServer๋กœ ๋„˜๊ธฐ๋Š” ํŒจํ„ด์ด ์ด์ œ ์ •์ƒ ๋™์ž‘ํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

mock()/spyOn()์— Symbol.dispose ์ง€์›

mock() / spyOn()์ด Symbol.dispose๋ฅผ ๊ตฌํ˜„ํ•ด์„œ using ํ‚ค์›Œ๋“œ๋กœ ์Šค์ฝ”ํ”„๋ฅผ ๋ฒ—์–ด๋‚  ๋•Œ ์ž๋™์œผ๋กœ ๋ณต๊ตฌ๋˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import { spyOn, expect, test } from "bun:test";

test("auto-restores spy", () => {
  const obj = { method: () => "original" };

  {
    using spy = spyOn(obj, "method").mockReturnValue("mocked");
    expect(obj.method()).toBe("mocked");
  }

  expect(obj.method()).toBe("original");
});

NO_PROXY ๋™์ž‘ ๊ฐœ์„ 

์ด์ „์—” ํ”„๋ก์‹œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์˜ต์…˜์œผ๋กœ ๋„˜๊ธฐ๋ฉด NO_PROXY๊ฐ€ ๋ฌด์‹œ๋˜์—ˆ๋Š”๋ฐ, ์ด์ œ๋Š” ๋ช…์‹œ์  ํ”„๋ก์‹œ ์˜ต์…˜์„ ์“ฐ๋”๋ผ๋„ NO_PROXY๋ฅผ ํ•ญ์ƒ ์ฒดํฌํ•˜๋„๋ก ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

--cpu-prof-interval

CPU ํ”„๋กœํŒŒ์ผ ์ƒ˜ํ”Œ๋ง ๊ฐ„๊ฒฉ์„ ๋งˆ์ดํฌ๋กœ์ดˆ ๋‹จ์œ„๋กœ ์ง€์ •ํ•˜๋Š” --cpu-prof-interval ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค(Node์™€ ์œ ์‚ฌ).

--compile์—์„œ ESM bytecode ์ง€์›

--bytecode์™€ --format=esm ์กฐํ•ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ARMv8.0์—์„œ SIGILL ํฌ๋ž˜์‹œ ์ˆ˜์ •

๊ตฌํ˜• ARM64(Cortex-A53, Raspberry Pi 4 ๋“ฑ)์—์„œ ๋ฐœ์ƒํ•˜๋˜ illegal instruction(SIGILL) ํฌ๋ž˜์‹œ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ๊ฐœ์„ (์ผ๋ถ€)

  • Markdownโ†’HTML ๋ Œ๋”๋ง(ํŠน์ˆ˜๋ฌธ์ž ์Šค์บ” SIMD ์ตœ์ ํ™”)
  • bun.markdown.react()์—์„œ ๋ฌธ์ž์—ด ์บ์‹ฑ์œผ๋กœ ํ• ๋‹น ๊ฐ์†Œ
  • AbortSignal์— ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์—†์„ ๋•Œ ๋ถˆํ•„์š”ํ•œ ์ด๋ฒคํŠธ ์ƒ์„ฑ ํšŒํ”ผ

JavaScriptCore ์—…๊ทธ๋ ˆ์ด๋“œ ํ•˜์ด๋ผ์ดํŠธ(์ผ๋ถ€)

์ •๊ทœ์‹ SIMD ๊ฐ€์†, ํŠน์ • ํŒจํ„ด JIT ๊ฐœ์„ , startsWith/Map.size/Set.size/trim/defineProperty ๋“ฑ์˜ ์—”์ง„ ์ตœ์ ํ™”๊ฐ€ ์†Œ๊ฐœ๋ฉ๋‹ˆ๋‹ค.

๋ฒ„๊ทธ ์ˆ˜์ •(์ผ๋ถ€)

Node ํ˜ธํ™˜์„ฑ, bun API/Web API ํฌ๋ž˜์‹œ/ํ–‰(hang) ๋ฌธ์ œ, ๋ณด์•ˆ ๊ด€๋ จ ์ˆ˜์ •(์š”์ฒญ ์Šค๋จธ๊ธ€๋ง ๊ฐ€๋Šฅ์„ฑ) ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment