2023-11 
๐ ๋งํฌ & ์ฝ์ ๊ฑฐ๋ฆฌ
The State of Vite
์ง๋ 10์ 5์ผ ์งํ๋ ViteConf์์ ๋ฐํํ ๋ด์ฉ์ผ๋ก, ์ฅ๊ธฐ์ ์ผ๋ก rollup๊ณผ esbuild๋ฅผ ๋์ฒดํ๋ ๊ฒ์ ๋ํ ๊ณํ์ ๋ฐํํ๋ค. ์ด๋ฅผ ์ํด Rollup์ Rust ํฌํธ์ธ "Rolldown"์ด๋ผ๋ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๊ณ ์๋ค๊ณ ํ๋ค.
[์ฐธ๊ณ ] ๋ค์์ ๋ด์ฉ๋ค๊ณผ ๊ฐ์ด ์ฐธ๊ณ ํด ๋ณด๋ฉด ์ข๋ค.
The State of WebAssembly 2023

2023๋ ์๊ตญ์ ์ํํธ์จ์ด ์ปจ์คํ ํ์ฌ Scott Logic์์ WebAssembly ์กฐ์ฌ๋ฅผ ์ค์ํ์๋ค.
- Rust, JavaScript์ ์ฌ์ฉ์ ๊พธ์คํ ์ฆ๊ฐ ์ค์ด์ง๋ง, ๋ ๋์ ๋๋ ๊ฒ์ Swift์ Zig์ ์ฑํ๋ฅ ์ด ์ฆ๊ฐ์ด๋ค.
- WASM์ Web์์๋ ๋ง์ด ์ฌ์ฉ๋์ง๋ง, Serverless์ Plugin ํ๊ฒฝ์ผ๋ก๋ ์ง์์ ์ผ๋ก ์ฆ๊ฐํ๊ณ ์๋ค.
๋ ์์ธํ ๋ด์ฉ์ด ๊ถ๊ธํ๋ค๋ฉด, ์ฝ์ด๋ณด๊ธฐ๋ฅผ ์ถ์ฒํ๋ค.
The Saga of the Closure Compiler, and Why TypeScript Won
ํ๊ธ ๋ฒ์ญ ํฌ์คํธ๋ก ํธํ๊ฒ ์ฝ์ ์ ์๋ค.
Google์ ํฐ JavaScript Application์ ๋ง๋ค๊ธฐ ์ํด ๊ณผ๊ฑฐ ํ์
์ ์ฒดํฌํ๋ Closure Compiler๋ฅผ ๋ง๋ค์๋ค๊ณ ํ๋ค.
์ข ๋ ์ค๋ช
ํ์๋ฉด, Closure Compiler๋ JSDoc ์คํ์ผ์ ์ฝ๋ฉํธ๋ฅผ ํตํด ํ์
์ ์ถ๊ฐํ๋ ๊ฒ์ด๋ค.
/**
* @param {number} a
* @param {number} b
* @return {number}
*/
function max(a, b) {
return a > b ? a : b;
}
Clouser Compiler์ TypeScript์ ๊ฒฝ์์์ ์ TypeScript๊ฐ ์น๋ฆฌํ๊ฒ ๋์๋์ง ๋ค๋ฃฌ๋ค.
An Interactive Intro to CRDTs

ํ๊ธ ๋ฒ์ญ ํฌ์คํธ๋ก ํธํ๊ฒ ์ฝ์ ์ ์๋ค.
CRDT๋ โConflict-free Replicated Data Typeโ(์ถฉ๋ ๋ฐฉ์ง ๋ณต์ ๋ฐ์ดํฐ ํ์
)์ ์ฝ์๋ก ๋ํ์ ์ธ ์๋ก ํ์
์ฑ(Google Docs, Figma ๋ฑ)์์ ๋คํธ์ํฌ ์์ฒญ ์์ด๋ ์์ฒด ์ํ๋ฅผ ์
๋ฐ์ดํธํ ์ ์๊ฒ ๋ง๋ค์ด ์ฃผ๋ ๊ฐ๋
์ด๋ค.
์ด ๊ธ์์๋ Last Write Wins Register
, Last Write Wins Map
์ ๊ฐ๋
์ ์์๋ณธ๋ค.
์ด ๊ธ์ ์๋ฆฌ์ฆ์ ์ฒซ ๋ฒ์งธ ๊ธ๋ก ํ์ฌ๋ ์๋ ๋ ๊ฐ์ ๊ธ์ด ๋ ๋ฐ๊ฐ๋์๋ค.
The Internals of Deno

Deno๋ ์ ์๋ค์ํผ, Node.js๋ฅผ ๋ง๋ค์๋ Ryan Dhal๋ก๋ถํฐ ์๋กญ๊ฒ ์์๋์๊ณ ๋๋์ง๋ง ๋ฐํ์ ์์ญ์์ ์กด์ฌ๊ฐ์ ํค์๊ฐ๊ณ ์๋ค.
Deno์ ๋ด๋ถ๋ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์ด ์๊ณ , ์ด๋ป๊ฒ ๋์ํ ๊น? ์ด ์ฑ
์ ์ด๋ฌํ ๊ถ๊ธ์ฆ์ ํด์์์ผ ์ค ์ ์์ ๊ฒ์ด๋ค.
[์ฐธ๊ณ ] ์ถ๊ฐ๋ก ๋ค์ ์์๋ Deno ๋ด๋ถ๋ฅผ ์ดํดํ๋ ๋ฐ ๋์ ๋ ์ ์๋ค.
CommonJS์์ ESM์ผ๋ก ์ ํํ๊ธฐ
์นด์นด์ค์ ์๋น์ค ์ฑ๋ฅ์ ๋ถ์ํ๋ ์๋น์ค(lighthouse ๊ธฐ๋ฐ)์ ESM ์ ํ์ ๋ค๋ฃจ๋ ๊ธ๋ก, lighthouse์ CJS -> ESM ์ ํ์ ๋ฐ๋ผ ์๋น์ค๋ ESM ์ผ๋ก ์ ํํ๊ฒ ๋์๋ค๊ณ ํ๋ค.
CommonJS ํ๊ฒฝ์์ ์ด์ํ๋ ์๋น์ค๋ฅผ ESM ํ๊ฒฝ์ผ๋ก ์ ํํ๋ ๊ณผ์ ์ ๋ค๋ฃจ๊ณ , ๊ทธ ๊ณผ์ ์์ ๋ค์ํ ํ๋ค์ ์ ๊ณตํด ์ค๋ค.
HTTP/3 Performance for JS Developers
HTTP/3๋ โ22/6์, ํ์คํ๋ ์ด๋, ๋น ๋ฅด๊ฒ ์ฑํ๋๊ณ ์์ผ๋ฉฐ HTTP/1์ ๋์ด์ฐ๋ค. FE ๊ด์ ์์ ์ด๋ฌํ ํ๋กํ ์ฝ์ ๋ณํ์ ์๋ฏธ๋ ๋ฌด์์ผ๊น?
์ฒซ ๋คํธ์ํฌ ์๋ณต(Round Trip)์ ๋ํ JS ๋ก๋ฉ ์ต์ ํ, ๋ธ๋ผ์ฐ์ ๊ฐ ๋ค๋ฅธ ๋ฆฌ์์ค ์ ํ ๋๋น, JS ์ฐ์ ์์๋ฅผ ์ ํ๋ ๋ฐฉ๋ฒ ๋ฑ์ ์๊ฐํ๋ค. ๋ํ ํ๋กํ ์ฝ๊ณผ fetch()์ ํตํฉ์ ์ดํด๋ณด๊ณ , ๊ณง ์ถ์๋ WebTransport์ ๋ํด์๋ ์ด์ผ๊ธฐํ๋ค.
[์ฐธ๊ณ ] HTTP/3์ ์ฑํ๋ฅ ์ ๋น ๋ฅด๊ฒ ์์นํ๊ณ ์์ผ๋ฉฐ, ์๋ ๋งํฌ๋ฅผ ํตํด 21~23๋ ๊ฐ HTTP ๋ฒ์ ์ ๋ฐ๋ฅธ ์ฌ์ฉ๋ ์งํ๋ฅผ ํ์ธํ ์ ์๋ค.
300ms Faster: Reducing Wikipedia's Total Blocking Time
Wikipedia ๋ชจ๋ฐ์ผ ์ฌ์ดํธ์ ํ์ด์ง ๋ก๋ฉ ์๋๋ฅผ ์ด๋ป๊ฒ ๊ฐ์ ํ๋์ง ์๊ฐํ๋ ๊ธ์ด๋ค.
์ฒ์ ํ์ด์ง๋ฅผ ๋ก๋ํ ๋ 600ms ์ด์ ๊ฑธ๋ฆฌ๋ JS ์์
์ด ์์๋๋ฐ, ๋ ๋จ๊ณ์ ๊ฑฐ์ณ ๊ฐ์ ํ์๊ณ , ๊ทธ ๊ฒฐ๊ณผ ๋ก๋ฉ ์๊ฐ(TBT, Total Blocking Time)์ 300ms ์ ๋ ์ค์ผ ์ ์์๋ค๊ณ ํ๋ค.
The Negative Impact of Mobile-First Web Design on Desktop
๋ง์ ์ต์ ์น์ฌ์ดํธ๋ค์ ๋ชจ๋ฐ์ผ ์ ๊ทผ์ ์นํ์ , ์ฐ์ ์ ์ผ๋ก ์ค๊ณ๋์ด์ค๊ณ ์์ง๋ง, ์ด๋ฌํ ํ์ด์ง๊ฐ ๋ฐ์คํฌํฑ ํ๊ฒฝ์์ ๋ ๋๋ง ๋ ๋ ์ฝํ ์ธ ๊ฐ ์ง๋์น๊ฒ ํฌ๊ณ ๊ธธ๊ฒ ํ์๋ ์ ์๋ค. ํ๋ฉด์ ๊ฐ๋ฆฌ๋ ์ด๋ฏธ์ง, ํฌ๊ณ ๋ถํ๋ ค์ง ํ ์คํธ, ๊ณผ๋ํ ๊ณต๊ฐ์ผ๋ก ์ธํด ํ์ด์ง๊ฐ ๊ธธ์ด์ง๊ณ ๋ชจ๋ ์ฝํ ์ธ ๋ฅผ ์๋นํ๊ธฐ ์ํด ๋ ๋ง์ ์คํฌ๋กค์ด ํ์ํ๊ธฐ๋ ํ๋ค. ์ด๋ฌํ ๋์์ธ ํธ๋ ๋๋ฅผ ์ฝํ ์ธ ๋ถ์ฐ(content dispersion)์ด๋ผ ๋ถ๋ฅธ๋ค.
์ธ๊ณ์ ์ธ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์ปจ์คํ ํ์ฌ์ธ ๋์จ ๋ ธ๋ง์์ ์์ฑํ ์ด ๊ธ์ ์ค๋๋ ์ ๋ชจ๋ฐ์ผ ํผ์คํธ ์น๋์์ธ์ ์ฌ์ฉ์ฑ์ด ์คํ๋ ค ์ฌ์ฉ์์๊ฒ ๋ถ์ ์ ์ธ ์ํฅ์ ์ ๋ฌํด ๋ด์ฉ์ ์ดํดํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋๋ '์ฝํ ์ธ ๋ถ์ฐ'์ ๋ํ ๋ด์ฉ์ ๋ค๋ฃฌ๋ค.
Next.js 14
Next.js 14๋ฒ์ ์ด ๊ณต๊ฐ๋์๋ค. ์ฃผ์ ๋ณ๊ฒฝ์ฌํญ์ ๋ค์๊ณผ ๊ฐ๋ค.
- Server Actions (Stable)
- 13 ๋ฒ์ ์์ ์คํ์ ์ผ๋ก ๊ณต๊ฐ๋ Server Actions๊ฐ 14๋ฒ์ ์์ Stable๋ก ๋ณ๊ฒฝ๋์๋ค.
- turbopack (unstable)
- 53% ๋น ๋ฅธ ๊ฐ๋ฐ(๋ก์ปฌ) ์๋ฒ ์์, 94% ๋นจ๋ผ์ง ์ฝ๋ ๋ฐ์
next dev --turbo
๋ช ๋ น์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ- ํฐ๋ณดํฉ์ ์์ง
90%
์next dev
integeration test๋ง ํต๊ณผํ ์ํ์ด๋ฉฐ, ์ถํ 100% ํต๊ณผ ์stable
๋ก ๋ณ๊ฒฝ๋ ์์ ์ด๋ค.
- Partial Prerendering (Preview)
- ๊ธฐ๋ณธ ์๋ต ๋ฐ์ดํฐ์ ์คํธ๋ฆฌ๋ฐ ๋์ ์ปจํ ์ธ ์ ๋ฌ ๊ธฐ๋ฅ์ React ์ Suspend ๊ธฐ๋ฐ ์์์ ๊ตฌํ.
- Metadata Improvements
- server component์์
viewport
object์generateViewport
function์ exportํด์ ์ฌ์ฉํ ์ ์๋ค. - ๋ค๋ฅธ ๊ธฐ์กด์
metadata
์ต์ ์ ์ ์ง๋๋ค.
- server component์์
The Future of CSS: Easy Light-Dark Mode Color Switching withย light-dark()
๋ผ์ดํธ ๋ชจ๋ ๋๋ ๋คํฌ ๋ชจ๋ ์ฌ์ฉ ์ฌ๋ถ์ ๋ฐ๋ผ ์์ ๋ณ๊ฒฝ์ ์ ์ฉํ๊ธฐ ์ํด ์ผ๋ฐ์ ์ผ๋ก prefers-color-scheme
๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
:root {
--text-color: #333; /* Value for Light Mode */
}
@media (prefers-color-scheme: dark) {
:root {
--text-color: #ccc; /* Value for Dark Mode */
}
}
์ด ์์ ์ ๋ ์ฝ๊ฒ ํ๊ธฐ ์ํด CSS Color Module Level 5์ ์๋ก์ด light-dark()๋ผ๋ ์ ํธ๋ฆฌํฐ ํจ์๊ฐ ์ถ๊ฐ๋์๋ค. ์ด ํจ์๋ ๋ ๊ฐ์ง ์์ ๊ฐ์ ์ธ์๋ก ๋ฐ๊ณ , ์ฌ์ฉ ์ค์ธ ์ ๊ตฌ์ฑํ์ ๋ฐ๋ผ ์ฒซ ๋ฒ์งธ ๋๋ ๋ ๋ฒ์งธ ์์ ๊ฐ์ ํ์ฉํ๊ฒ ๋๋ค.
:root {
/* light-dark() ํจ์ ์ฌ์ฉ์ ์ํด color-scheme ์ ์ธ์ด ํ์ํ๋ค. */
color-scheme: light dark;
}
:root {
/* In Light Mode = return 1st value. In Dark Mode = return 2nd value. */
--text-color: light-dark(#333, #ccc);
}
์์ง์ Firefox 120+์์๋ง ์ง์๋๋ค.
๐น ํํ ๋ฆฌ์ผ
Making Sense of React Server Components
ํ๊ธ ๋ฒ์ญ ํฌ์คํธ๋ก ํธํ๊ฒ ์ฝ์ ์ ์๋ค.
์ง๋ 2020๋
12์ React Server Components๊ฐ ์๊ฐ๋ ์ดํ๋ก ์ฌ์ ํ ์ฌ๋๋ค์ ๋์ ๋ฐฉ์์ ๋ํด์ ํผ๋์ค๋ฌ์ํ๋ค.
์ด ๊ธ์ ๊ทธ๋ฐ ์ฌ๋๋ค์ ์ํด ์ธํฌ๊ทธ๋ํฝ์ ํตํด ์ข ๋ ์ฝ๊ฒ ์ค๋ช
์ ์๋ํ๋ค.
Back/forward cache
์ง๋ 9์ Yahoo! JAPAN์์ bf Cache ์ ์ฉ์ผ๋ก ๋น์ฆ๋์ค์ ์ธ ์ฑ๊ณผ๋ฅผ ๊ฐ์ ธ์๋ค๊ณ ์๊ฐํ์๋ค.
์ด ๊ธ์ ์ค์ ๋ก bfCache๋ฅผ ์ ํฉ์ฑ์ ํ์ธํ๋ ํ๊ณผ ์ค์ ๋ก ํ
์คํธํ๋ ๋ฐฉ๋ฒ ๋ฑ์ ์๋ ค์ค๋ค.
๐ฆ ์ฝ๋์ ๋๊ตฌ
React Agent
ReactAgent๋ GPT-4 ์ธ์ด ๋ชจ๋ธ์ ์ฌ์ฉํด ์ฌ์ฉ์ ์คํ ๋ฆฌ์์ React ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๊ณ ๊ตฌ์ฑํ๋ ์คํ์ ์ธ ์์ด์ ํธ๋ก ์์ ์ ์๊ฐํ๊ณ ์๋ค.
React, TailwindCSS, Typescript, Radix UI, Shandcn UI ๋ฐ OpenAI API๋ฅผ ํ์ฉํด ์ฝ๋๋ฅผ ์์ฑํ๋ค.
Lit React 1.0
import React from 'react';
import {createComponent} from '@lit/react';
import {MyElement} from './my-element.js';
export const MyElementComponent = createComponent({
tagName: 'my-element',
elementClass: MyElement,
react: React,
events: {
onactivate: 'activate',
onchange: 'change',
},
});
๊ตฌ๊ธ์ Web Components Framework Lit์ด v3.0์ ๋ฆด๋ฆฌ์คํ๋ค.
์ฌ๋ฌ ๋ณ๊ฒฝ์ฌํญ ์ค ๊ฐ์ฅ ๋๋๋ฌ์ง๋ ๋ณํ๋ @lit/react
์ด๋ค. @lit/react
๋ Web Components๋ฅผ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ก ๋ํํ๋ฉฐ ์๊ธฐ๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ์ค๋ค.
patch-package
์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ ํด์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด์ ๋ฒ๊ทธ๊ฐ ์์ด์ ์ ์ํ ์์ ์ด ํ์ํ๊ฑฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ง์ํ์ง ์๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
BlockNote
Notion์ฒ๋ผ ๋ธ๋ก ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ ํ์ฅ ๊ฐ๋ฅํ Text Editor์ด๋ค.
๋ฐ๋ชจ ํ์ด์ง์์ ํ
์คํธํด ๋ณผ ์ ์๋ค.