2023-08 
๐ ๋งํฌ & ์ฝ์ ๊ฑฐ๋ฆฌ
Beyond Browsers: The Longterm Future of JavaScript Standards
๊ทธ๊ฐ JavaScript๋ ์ฃผ๋ก ์น์์์ ์ฌ์ฉ์ ์ํ ์ธ์ด๋ก ๋ฐ์ ํด ์๊ณ , ECMAScript ํ์ค ๋ํ ๋ธ๋ผ์ฐ์ ๋ฒค๋๋ค์ ์๊ตฌ์ ๋ฐ๋ผ ์ฃผ๋๋์ด ์๋ค. ํ์ง๋ง ์ด์ ๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ฒ์ด๋ JavaScript๊ฐ ์ผ๋ฐํ๋๊ณ ์์ง๋ง, ์์ง๋ ๋ฐํ์๋ค์ ๋ธ๋ผ์ฐ์ ์ JavaScript ์์ง์ ์ฌ์ฉํ๊ณ ์๋ค.
์ผ์ฌ์ฐฌ ์์ด๋์ด ์ค ํ๋๋ JavaScript ๋ฐํ์์ ์์ฑํ๊ธฐ ์ํด ํ์ํ ๊ฒ์ ๋งค๊ฐ๋ณ์ํํ๋ ์ฌ์์ ํ์คํํ๋ ๊ฒ์ด๋ฉฐ, ์ด๋ JavaScript ์ฌ์ฉ์ ํ์ฅ๊ณผ ๋ณดํธํ์ ๋ฐ๋ผ ๋ง์ ์ด๋ค์ด ์์ ์ ํน์ ์๊ตฌ ์ฌํญ์ ๋ง๋ ๋ฐํ์(๊ฐ๋ฅํ ๋ ์์)์ ๋ง๋ค๊ณ ์ถ์ด ํ๊ธฐ ๋๋ฌธ์ด๋ค.
Meet Jeff Delaney: The Mastermind Behind Fireship.io
์๋ง๋ youtube์์ ํ ๋ฒ์ฏค์ "100 seconds of Code" ์๋ฆฌ์ฆ๋ก ์ ๋ช ํ Fireship ์ฑ๋์ ์ฝํ ์ธ ๋ฅผ ๋ณธ ๊ฒฝํ์ด ์์ ๊ฒ์ด๋ค.
์งง๊ณ ์ฝ๊ฒ ์ฃผ์ํ ๊ธฐ์ ํธ๋ ๋๋ฅผ ํ์ด๋ด๋ ์ด ์ฑ๋์ ์ด์์์ธ Jeff Delaney์ ์ธํฐ๋ทฐ๋ฅผ ํตํด ํ์ผ๋ฟ๊ณผ ํ๊ณ์ฌ๋ฅผ ๊ฟ๊พธ๋ ๊ทธ๊ฐ ์ด๋ป๊ฒ ๋ ํ์ผ๋ก ์น ๊ฐ๋ฐ์๊ฐ ๋์๋์ง๋ฅผ ๋ค์ด๋ณผ ์ ์๋ค.
Invisible Details of Interaction Design
๋์์ธ์ ๊ณผํ์ด ์๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๊ณ , ์ค์ง ๋๋๊ณผ ์ง๊ด๋ง์ด ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค. ์ธํฐ๋ ์ ๋์์ธ์ ๊ฒ์ํด ๋ณด๋ฉด, ์ฌ์ฉ์ ํ๋ฅด์๋, ์คํ ๋ฆฌ๋ณด๋, UX/UI๋ก ํํ๋ ๋ฒค ๋ค์ด์ด๊ทธ๋จ ๋ฑ๋ง ์๋ฉ ๋ณด๊ฒ ๋๋ค.
์ด ๊ธ์ ์์ฃผ ์ฌ์ฉ๋์ง๋ง ๊ฑฐ์ ์๊ฐ๋์ง ์๋ ๋ช๋ช ์ํธ์์ฉ์ ๋ณด์ด์ง ์๋ ๋ถ๋ถ์ ๋ํ ์ธ๋ถ์ ๊ด์ฐฐ์ ๋ค๋ฃจ๊ณ ์๋ค.
What does the image decoding attribute actually do?
ํ๊ทธ์ "decoding" ์์ฑ์ ์ง์ ํ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์๋๊ฐ?
์ด ์์ฑ์ ์ด๋ฏธ์ง๋ฅผ ์ด๋ป๊ฒ ๋์ฝ๋ฉ ํ๋์ง์ ๋ํ ํํธ๋ฅผ ๊ธฐ์ ํ ์ ์๋๋ฐ, ๋๊ธฐ(sync) ๋๋ ๋น๋๊ธฐ(async) ๊ฐ์ ์ง์ ํ ์ ์๋ค. ๊ธฐ๋ณธ ๊ฐ์ "auto"๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ฅ ์ ํฉํ ๋ฐฉ์์ ์ ํํ๋๋ก ํ๋ค.
์ด๋ฅผ ๊ธฐ๋ฐํด ๋ง์ ๊ณณ์์๋ ํฌ๊ธฐ๊ฐ ํฐ ์ด๋ฏธ์ง๊ฐ ๋ ๋๋ง์ ๋ธ๋ก ์ํฌ ์ ์๊ธฐ ๋๋ฌธ์, ์ด ๊ฒฝ์ฐ
์ ๊ฐ์ด ๋น๋๊ธฐ ๋์ฝ๋ฉ์ ์ฌ์ฉ์ ๊ถ์ฅํ๊ธฐ๋ ํ๋ค.
๊ทธ๋ฌ๋, ๊ณผ์ฐ ๊ทธ๋ฌํ ๊น? ์ด๋ฌํ ๊ถ์ฅ์ ์ด๋ฏธ์ง์ ๋์ฝ๋ฉ์ด ๋ฉ์ธ ์ค๋ ๋์์ ๋ฐ์ํ๋ ์ํฉ์ ๊ฐ์ ํ์ง๋ง, ์ค๋๋ ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๋ค์ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์๋ ๋ณ๋์ ์ค๋ ๋์์ ์ด๋ฏธ์ง๋ฅผ ๋์ฝ๋ฉ ํ๋ค.
Lit Labs: SSR
Web Components ๊ธฐ๋ฐ์ ํ๋ ์์ํฌ์ธ Lit์ ์คํ์ ์ธ SSR ํจํค์ง(@lit-labs/ssr)์ ๋ํ ์๊ฐ ์์์ด๋ค.
[์ฐธ๊ณ ] Reddit์ ์ฐจ๊ธฐ ๋ชจ๋ฐ์ผ ์ ์ฉ UI ๋ฒ์ ์ธ https://sh.reddit.com ์ Lit์ ์ฌ์ฉํด ๊ฐ๋ฐ๋์๋ค.
State Of Npm 2023

2๊ฐ์ ์๋ฆฌ์ฆ๋ก ๊ตฌ์ฑ๋ ๊ธ์์๋ npm์ ํ์ฌ ์ํ์ ๋ ์ง์คํธ๋ฆฌ์ ๋ํ ํฅ๋ฏธ๋ก์ด ๋ค์ํ ํต๊ณ ๋ฑ์ ํ์ธํด ๋ณผ ์ ์๋ค.
I feel bittersweet sharing iโm leaving my job at meta in a few weeks
์ง๋ 7๋ ๊ฐ React์ ์์ด์ฝ๋ ํ ๊ฐ๋ฐ์๋ก ํ๋ํ๋ Dan Abramov๊ฐ Meta์์ ํด์ฌํ ๊ณํ์ด๋ผ๊ณ ๋ฐํ๋ค.
์ง๋ ๋ช ๋ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ๋ณด๋จ ๊ฐ๋ฐํ๊ณผ ์ปค๋ฎค๋ํฐ, ์ํ๊ณ๋ฅผ ์๋ ๊ฐ๊ต ์ญํ ์ ์ง์คํด ์์์ง๋ง ์ด๋ ์๊ฐ ์ฌ๋ฏธ๋ฅผ ์์๋ค๊ณ ํ๋ค. ๋ ๋ง์ ๋ด์ฉ์ ํธ์ ์ค๋ ๋๋ฅผ ํตํด ์ํ๋ฅผ ์ฝ์ด๋ณผ ์ ์๋ค.
JSNation 2023
์ง๋ 6์ 1~5์ผ, ๋ค๋๋๋ ์์คํ ๋ฅด๋ด์์ ์ด๋ ธ๋ JSNation 2023 ์ฝํผ๋ฐ์ค์ ๋ชจ๋ ์ธ์ ์ ๋ํ ๋์์์ด ๊ณต๊ฐ๋์๋ค.
SolidJS ๊ฐ๋ฐ์์ธ Ryan Carnato, Webpack๊ณผ Turbopack ๊ฐ๋ฐ์์ธ Tobias Koppers, Angular ๊ฐ๋ฐ์์ธ Miลกko Hevery ๋ฑ ์ ๋ช ํ ๊ฐ๋ฐ์๋ค์ ๋ฐํ๋ฅผ ๋ค์ด๋ณผ ์ ์๋ค.
UX/UI ๋ ๋ฒจ ํ ์คํธ

๊ฐ๋จํ UX/UI ๋์์ธ ์ฌ๋ก๋ค์ ๋ํ ์ ํ์ ํตํด ์์ ์ UX/UI ๋ ๋ฒจ์ ํ ์คํธํด ๋ณผ ์ ์๋ค. ๊ฐ ํญ๋ชฉ๋ณ๋ก ์ข์ UX/UI๊ฐ ๋ฌด์์ธ์ง์ ๋ํ ์ค๋ช ์ ๋ณผ ์ ์๋ค.
Polymorphic ํ React ์ปดํฌ๋ํธ ๋ง๋ค๊ธฐ
<PolymorphicButton as="a" href="https://naver.com">
I am anchor
</PolymorphicButton>
<PolymorphicButton as="button" onClick={handleClick}>
I am button
</PolymorphicButton>
<PolymorphicButton as="span">
I am span
</PolymorphicButton>
MUI, Mantine ๋ฑ์ components library์์ ์ ๊ณตํ๋ ๊ฒ์ฒ๋ผ polymorphicํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์์๋ณธ๋ค.
[์ฐธ๊ณ ] Polymorphic: ๋คํ์ฑ. ์ฌ๋ฌ ๊ฐ์ ํํ๋ฅผ ๊ฐ์ง๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ์ง ๊ทธ๋ฆฌ์ค์ด์์ ์ ๋๋ ๋จ์ด.
Polymorphic ํ ์ปดํฌ๋ํธ๋ ๋ค์ํ Semantic์ ํํํ ์ ์๋, ๋ค์ํ ์์ฑ์ ๊ฐ์ง ์ ์๋, ๋ค์ํ ์คํ์ผ์ ๊ฐ์ง ์ ์๋ ์ปดํฌ๋ํธ๋ก ํด์ํ ์ ์๋ค.
Multiple Layers of Abstraction in Design Systems


๋์์ธ ์์คํ ์ปดํฌ๋ํธ, ํน์ ๊ณตํต ์ปดํฌ๋ํธ๋ผ๋ฉด ์๋ง์ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑ ์์ผ์ผ ํ๋ฉฐ, ์์ผ๋ก ๋ ๋ง์ ์๊ตฌ์ฌํญ ๋ฐ์ ๋ฐ ๊ธฐ๋ฅ ๊ตฌํ์ ์ง๋ฉดํ๊ฒ ๋ ์ ์๋ค. ์ด๊ฒ์ ์ ํด๊ฒฐํด ๋๊ฐ๋ ค๋ฉด '์ด๊ฒ ์๋๋ฉด ์ ๊ฒ'์ด๋ผ๋ ์ ๊ทผ ๋ฐฉ์์ผ๋ก๋ ์ถฉ๋ถํ์ง ์๋ค.
์ด ๊ธ์์ ์ ์ํ ํด๊ฒฐ์ฑ ์ ํ ๋ฒ์ ์ฌ๋ฌ ๊ณ์ธต์ ์ถ์ํ๋ฅผ ์ ๊ณตํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ํจ์ฑํ๊ณ ๋ ๋๋ง ํ๋ config ๋ฐฉ์, ํน์ ์ปดํฌ๋ํธ๋ฅผ ์ ๋ฌํ๋ slot ๋ฐฉ์, ํ์ ์ปดํฌ๋ํธ ๋ฐ ์คํ์ผ๋ง์ ์ง์ ์์ํ๋ custom ๋ฐฉ์ ์ด ์ธ ๊ฐ์ง์ ์ถ์ ๊ณ์ธต์ผ๋ก ์ปดํฌ๋ํธ์ ํ์ฉ๋์ ์ฌ์ฌ์ฉ์ฑ์ ํฅ์์ ๊ฐ์ ธ์ฌ ์ ์๋ค๊ณ ํ๋ค.
๐น ํํ ๋ฆฌ์ผ
Demystifying React Server Components with NextJS 13 App Router
RSC๋ฅผ ์ฒ์ ์ ํ๊ฑฐ๋ ๋๋ RSC๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง์ ๋ํด ๋ ๋ง์ด ์ดํดํ๊ณ ์ ํ๋ ๊ฐ๋ฐ์๋ฅผ ๋์์ผ๋ก Next.js 13์ ์๋ฒ ์ปดํฌ๋ํธ ๊ฐ๋ ๊ณผ ์ฝ๋๋ฅผ ๋จ๊ณ๋ณ๋ก ์ดํดํด ๋ณผ ์ ์๋ ํํ ๋ฆฌ์ผ์ด๋ค.
What is Hydration
Hydration์ ์ค๋๋ ํ๋ ์์ํฌ๋ค์์ ๋น๋ฒํ๊ฒ ํ์ฉ๋๋ ๊ฐ๋ ์ด๋ค. ์ด๊ฒ์ด ๋ฌด์์ด๋ฉฐ, ์ด๋ป๊ฒ ์ฌ๊ธฐ๊น์ง ๋ฐ์ ํด ์๋์ง๋ฅผ Angular์ ๊ฐ๋ฐ์์๋ Miลกko Hevery๊ฐ ์ค๋ช ํ๋ ํํ ๋ฆฌ์ผ์ ํตํด ํ์ธํด ๋ณผ ์ ์๋ค.
[์ฐธ๊ณ ] ์ถ๊ฐ์ ์ผ๋ก ๋ค์ ๋งํฌ๋ฅผ ํตํด Dehydrate์ hydrate์ ๋ํด ๋ณด๋ค ์ฝ๊ฒ ๊ฐ๋ ์ ์ดํดํ ์ ์๋ค.
๐ช๐ต๐ฎ๐ ๐ต๐ฎ๐ฝ๐ฝ๐ฒ๐ป๐ ๐๐ต๐ฒ๐ป ๐๐ผ๐ ๐๐๐ฝ๐ฒ ๐ฎ ๐จ๐ฅ๐ ๐ถ๐ป๐๐ผ ๐๐ผ๐๐ฟ ๐ฏ๐ฟ๐ผ๐๐๐ฒ๐ฟ?
๋ธ๋ผ์ฐ์ ์ URL์ ์ ๋ ฅํ๋ฉด ์ด๋ค ๊ณผ์ ์ด ์ผ์ด๋ ๊น? ํธ์์ ํฌํจ๋ ๊ทธ๋ฆผ๊ณผ ์ค๋ช ์ ํตํด ๋น ๋ฅด๊ฒ ์ดํดํด ๋ณผ ์ ์๋ค.
Understanding SVG Paths
์ด์ ์ SVG ์ฝ๋๋ฅผ ์ดํด๋ณธ ์ ์ด ์๋ค๋ฉด, <path>
์์์ d
์์ฑ์ ์ ์๋ ์ฌ๋ฌ ๊ฐ์ ๊ฒฝ๋ก ๊ฐ์ ํตํด ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง๋ค๋ ์ฌ์ค์ ์๊ณ ์์ ๊ฒ์ด๋ค.
์ธํฐ๋ํฐ๋ธํ ์ด ํํ ๋ฆฌ์ผ์์๋ ๋ค์ํ path
๊ตฌ์ฑ๊ณผ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง๋ ๊ณผ์ ์ ๋ฐฐ์ธ ์ ์๋ค.
๐ฆ ์ฝ๋์ ๋๊ตฌ
ComponentizeJS
ComponentizeJS๋ ์คํ์ ๋๊ตฌ๋ก ์๋ฒ ๋ ๋ SpiderMonkey JS ์์ง์ ์ฌ์ฉํด, JavaScript ์ฝ๋๋ฅผ WebAssembly Component๋ก ์์ฑํด ์ค๋ค.
import { componentize } from '@bytecodealliance/componentize-js';
import { writeFile } from 'node:fs/promises';
const { component } = await componentize(
// WIT์ ๋ถํฉํ๋ JS ์ฝ๋
`export function fn () {}`,
// Wasm Interface Type(WIT) ํ์์ ์ธํฐํ์ด์ค๋ฅผ ์ ์
// https://github.com/WebAssembly/component-model/blob/main/design/mvp/WIT.md
`default world test {
export fn: func()
}
`);
// wasm ํ์ผ๋ก ์ปดํ์ผ
await writeFile('test.component.wasm', component);
dnt - Deno to Node transform
dnt๋ Deno ํ์์ ๊ฐ๋ฐํ ํจํค์ง ๋น๋ ๋๊ตฌ๋ก, ์ค๋๋ ์ ํจํค์ง๋ค์ด ์ง์ํด์ผ ํ๋ ๋ค์ํ ํ๊ฒฝ๋ค(๋ชจ๋ ์ง์: CJS/ESM, ๋ฐํ์ ์ง์: Node/Deno ๋๋ ๋ธ๋ผ์ฐ์ )๋ก ์ธํด ํจํค์ง ๋น๋ ๊ณผ์ ์ ๋ณต์ก๋(๋ณต์กํ ๋น๋ ํ์ดํ๋ผ์ธ ๊ตฌ์ฑ ๊ฐ์)์ ์ด๋ฅผ ์ํ ์์ค ์ฝ๋ ๊ด๋ฆฌ ๋ฑ์ ์ด๋ ค์์ ํด๊ฒฐํด ์ฃผ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ค.
TypeScript๋ก ์์ฑ๋ ํจํค์ง๋ dnt ๋ชจ๋์ ์ฌ์ฉํ๋ ๋น๋ ์คํฌ๋ฆฝํธ ์์ฑ์ ํตํด ๋ค์ํ ํ๊ฒฝ์์ ์ฌ์ฉ๋ ์ ์๋๋ก ํ๊ฒํ ํ ์ ์๋ค.
// build_npm.ts
import { build, emptyDir } from "https://deno.land/x/dnt@0.37.0/mod.ts";
// output ๋๋ ํ ๋ฆฌ ์ง์
await emptyDir("./npm");
await build({
entryPoints: ["./ํจํค์ง_์์ค์ฝ๋_entry_point_ํ์ผ๋ช
.ts"],
outDir: "./npm",
shims: {
deno: true,
},
package: {
// package.json ํ์ผ์ ์ถ๊ฐ๋ ํญ๋ชฉ์ ๊ธฐ์ ํ๋ค.
name: "ํจํค์ง๋ช
",
version: Deno.args[0],
...
},
// ๋น๋ ์ดํ, ์ํํ ์์
์ ๊ธฐ์ ํ๋ค. (๋ผ์ด์ผ์ค์ README ํ์ผ์ ๋ณต์ฌ ๋ฑ)
postBuild() {
Deno.copyFileSync("LICENSE", "npm/LICENSE");
Deno.copyFileSync("README.md", "npm/README.md");
},
});
๋น๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ํํด ๋ฒ์ ๋๊ณผ ํ ์คํธ(ํ ์คํธ ์ฝ๋ ์์ฑ ํ์)๊ฐ ๊ฐ์ด ์ํ๋๊ฒ ํ๋ค.
$ deno run -A build_npm.ts 0.0.1
[์ฐธ๊ณ ] ๋ณด๋ค ์์ธํ ๋ด์ฉ์ ๋ค์์ ์๊ฐ ๊ธ์ ์ฐธ๊ณ ํ๋ผ.
Animotion

Animotion์ ๋ฉ์ง ์ฌ๋ผ์ด๋๋ฅผ ๋ง๋ค๊ณ ์ฝ๋๋ก ์์ด๋์ด๋ฅผ ์๊ฐํํ ์ ์๋ ํ๋ ์ ํ ์ด์ ํ๋ ์์ํฌ์ด๋ค. Svelte, Reveal.js and Tailwind CSS๋ฅผ ์ง์ํ๋ค.
valibot

๊ตฌ์กฐ์ ๋ฐ์ดํฐ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๊ธฐ ์ํ ์คํค๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
[์ฐธ๊ณ ] ์ ์ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก๋ Zod, Ajv, Joi, Yup ๋ฑ์ด ์๋ค.
// email ์ ํจ์ฑ ๊ฒ์ฌ
import { email, endsWith, parse, string } from 'valibot';
const EmailSchema = string([email(), endsWith('@example.com')]);
parse(EmailSchema, null); // throws error
parse(EmailSchema, 'foo'); // throws error
parse(EmailSchema, 'jane@example.com'); // returns 'jane@example.com'
// ํ์
์ถ๋ก
import { type Output, email, minLength, object, string } from 'valibot';
const LoginSchema = object({
email: string([email()]),
password: string([minLength(8)]),
});
type LoginData = Output<typeof LoginSchema>; // { email: string; password: string }
[์ฐธ๊ณ ] ๋ณด๋ค ์์ธํ ๋ด์ฉ์ ๊ฐ๋ฐ์์ ์๊ฐ ๊ธ์ ์ฐธ๊ณ ํด ๋ณด๋ฉด ์ข๋ค.
Radix
์ ๊ทผ์ฑ, ์ปค์คํฐ๋ง์ด์ง ๋ฐ ๊ฐ๋ฐ์ ๊ฒฝํ์ ์ค์ ์ ๋ ๋ก์ฐ ๋ ๋ฒจ UI ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋์์ธ ์์คํ ์ ๊ธฐ๋ณธ ๋ ์ด์ด๋ก ์ฌ์ฉ๋ ์ ์๋๋ก ์คํ์ผ์ด ์ง์ ๋์ง ์์ ์ปดํฌ๋ํธ๋ฅผ ์ ๊ณตํ๋ค.
Tiptap
ProseMirror ๊ธฐ๋ฐ์ ํ ์คํธ ์๋ํฐ์ด๋ค. ๋ฐ๋ชจ์์ ๋์์ ํ์ธํ ์ ์๋ค.
์ต์คํ ์ ์ ํตํด์ ์๋ํฐ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๊ณ , ์ฝ๊ฒ ์ต์คํ ์ ์ ๋ง๋ค ์ ์๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํ๋ค.
LocatorJS
๊ฐ๋ฐ ์ค์ธ ์ปดํฌ๋ํธ ์์ค ์ฝ๋๋ฅผ ์์ฝ๊ฒ ์ฐพ์์ฃผ๋ ๋๊ตฌ์ด๋ค. ์น ํ์ด์ง์์ ๊ฐ๋จํ ํด๋ฆญํ๋ ๊ฒ๋ง์ผ๋ก IDE ๋ด์ ์ปดํฌ๋ํธ ์์ค ์ฝ๋๋ก ์ด๋ํ๊ฒ ํด์ค๋ค. Chrome ์ต์คํ ์ ์ ์ด์ฉํ๊ฑฐ๋ Babel ํ๋ฌ๊ทธ์ธ์ ์ค์นํ์ฌ ์ด์ฉํ ์ ์๋ค.
ํ์ฌ React, Preact, Solid, Vue, Svelte๋ฅผ ์ง์ํ๋ค๊ณ ํ๋ค.