2023-07 
๐ ๋งํฌ & ์ฝ์ ๊ฑฐ๋ฆฌ
CommonJS is hurting JavaScript
JavaScript๊ฐ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋์ด ์๋ฒ๋ก ํ์ฅ๋๊ธฐ ์์ํ๋ฉด์, ํ์ฌ ์ฝ๋์ ๋ค๋ฅธ ๋ชจ๋์ ํฌํจ์ํค๋ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค. ์ด์ ๋ํด 2009๋ Mozilla์ Kevin Dangoor๊ฐ CommonJS๋ผ๋ ํ์ค์ ์ ์ํ๊ณ , ๋ชจ๋๊ฐ ์๊ณ ์๋ฏ์ด Node.js ์ฑํ์ผ๋ก ์ธํด ์ฌ์ค์ ํ์ค์ด ๋์๋ค.
2015๋ ES6๋ฅผ ํตํด ํ์ค ๋ชจ๋ ์์คํ ์ธ ESM์ ๋์ ํ์ง๋ง, Node.js๋ CJS์ ESM ๋ชจ๋๋ฅผ ์ง์ํ๋ฉฐ ์ค๋๋ ๊น์ง๋ 2๊ฐ์ ๋ชจ๋ ์์คํ ์ด ๊ณต์กดํ๊ณ ์๋ค.
๋ง์ ์ด๋ค์ ๋ชจ๋์ ์ค์นํ๊ณ ๋น๋ ๋จ๊ณ ์์ด, ์๋ฒ์์ ๊ทธ๋ฆฌ๊ณ ๋ธ๋ผ์ฐ์ ์์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ์ํ์ง ์์๊น?
[์ฐธ๊ณ ] Deno์ ๊ฒฌํด์๋ ๋ฐ๋๋ก, Bun์ 5/29์ผ ๋ฆด๋ฆฌ์ค๋ v0.6.5์์ ๋ค์ดํฐ๋ธ CJS ์ง์์ ์ถ๊ฐํ๋ค.
npm-esm-vs-cjs
npm ๋ ์ง์คํธ๋ฆฌ์์ ESM๊ณผ CJS์ ์ ์ ์จ์ ๋ํ ๋ฐ์ดํฐ๋ก, ์ฃผ๋น 1M ๋ค์ด๋ก๋์ 500+๊ฐ ์ด์์ ํ๋ก์ ํธ๊ฐ ์์กดํ๋ ํจํค์ง๋ค์ ๋ํด ๋ถ์ํ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ค.
'23/5์ ๊ธฐ์ค, CJS๊ฐ 70.7%
๋ฅผ ์ฐจ์งํ๊ณ ์์ผ๋ฉฐ, ๋ค์ํ ESM ์ง์ ๋ฐฉ์๋ค์ด 29.3%
๋ฅผ ์ฐจ์งํ๊ณ ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ๋ค.
์ด ๊ฒฐ๊ณผ์ ๋ฐ๋ฅด๋ฉด, Deno์ ๋ฐ๋จ๊ณผ๋ ๋ค๋ฅด๊ฒ๋ ์์ง ์ฐ๋ฆฌ๋ CJS ์ธ์์ ์ด๊ณ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค.
The Cost of JavaScript 2023
Chrome ๋ธ๋ผ์ฐ์ ํ์์ ์ผํ๊ณ ์๋ Addy Osmani์ ๋ฐํ ์๋ฃ๋ก, ์น์์ JavaScript๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ์์ด ๋๋๋ก ์ฝ๊ฒ ์ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ ์กํ๋ ๊ฒ์ ๋ํ ๋น์ฉ์ ์ง๋ถํ๋ ๊ฒ, ํนํ ๋ชจ๋ฐ์ผ๊ณผ ์ ์ฌ์ ๋ฐ์คํฌํฑ์์ ์ด๋ป๊ฒ JavaScript๊ฐ ๊ฐ์ฅ ๋น์ผ ๋ฆฌ์์ค๋ก ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ๊ณผ ๊ทธ ์ด์ ๋ฅผ ์ค๋ช ํ๋ค.
๋ฐํ์์ ๋ค๋ฃจ๋ ์ฃผ์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ฌด๊ฑฐ์ด JavaScript๋ก ์ธํด ๋ฐ์ํ๋ ์ฃผ์ ๋น์ฉ
- ํ๊ท ์ ์ธ ํ๋์จ์ด์ ๋ฌด๊ฑฐ์ด JavaScript๊ฐ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ฏธ์น๋ ์ํฅ
- JavaScript ๋น์ฉ์ ์ค์ด๊ณ , ์ฅ์๊ฐ ์์ ์ ์ค์ด๋ฉฐ, ํต์ฌ Web Vitals ์งํ๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํ ํ๊ณผ ์๋ น
- ํ๋ ์์ํฌ์ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก JavaScript ๋น์ฉ์ ์ค์ด๊ธฐ ์ํด ์๋ํ๋ ๊ฒ๋ค
- ์๋ก์ด ์ฑ๋ฅ ์งํ๊ฐ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ๊ฐ์ ํ๊ธฐ ์ํด JavaScript๋ฅผ ์ต์ ํํ ์์น๋ฅผ ์ถ๋ก ํ๋ ๋ฐ ๋์์ด ๋๋ ๋ฐฉ๋ฒ
๋ฐํ ์์์ผ๋ก ๋ด์ฉ๋ณด๊ธฐ
The Costs & Benefits of React Server Components
์ํ๋์์ค์ฝ์์ ์ด๋ฆฐ Reactathon 2023 ์ฝํผ๋ฐ์ค์์ ๋ฐํ๋ ์ธ์ ์ผ๋ก, RSC๋ฅผ ์ดํดํ๊ธฐ ์ํด ๊ธฐ์กด์ ๋ฐฉ์์ธ SPA โ SSR ๋ฑ์ ๋ํ ๋ฐฐ๊ฒฝ์ ์๊ฐ๋ฅผ ํตํด ์ ๊ทผํ๋ค.
๊น์ ๋ด์ฉ์ด๋ผ๊ธฐ๋ณด๋จ, ๊ฐ๊ฐ์ ์ ๊ทผ ๋ฐฉ๋ฒ๋ค์ ๋ํ ๊ฐ๋ ์ ์ธ ์ดํด์ ํจ๊ป RSC๊ฐ ์ด๋ค ๊ฒฝ์ฐ์ ๋์์ด ๋ ์ ์์์ง๋ฅผ ์ค๋ช ํ๋ค.
[์ฐธ๊ณ ] ๋ฐฐ๊ฒฝ์ ์ค๋ช ์ด ํ์ ์๋ค๋ฉด, ์์ ๊ฑด๋๋ฐ๊ณ RSC๋ฅผ ๋ค๋ฃจ๋ ๋ถ๋ถ๋ถํฐ ์ฐธ๊ณ ํ๋ผ.
Picking the Right Tool for Maneuvering JavaScript's Event Loop
์์ ์ ๋ฐ๋ผ Event Loop ์๋ช ์ฃผ๊ธฐ์ ์ฌ๋ฌ ๋ถ๋ถ์ ๊ฑธ์ณ ์์ ์ ์์ฝํ๋ ๊ฒ์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ์ํด ์ฌ์ฉํ ์ ์๋ ๋ช ๊ฐ์ง ๋๊ตฌ๋ฅผ ์ค๋ช ํ๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ JavaScript์ ์ด๋ฒคํธ ๋ฃจํ์ ๋ํด ๊น์ด ์๊ฐํ์ง ์๊ณ ๋ ์ ์ฌ์ฉํ ์ ์๋ค. ํ์ง๋ง ๋ ๋๋ง ํ๋ก์ธ์ค ๋ฐ ๋น๋๊ธฐ ์์ ๊ณผ ๊ฐ์ ์์ ์ ํ์ฉํ๊ธฐ ์์ํ๋ฉด, ์๋ ๋ฐฉ์๋ฟ๋ง ์๋๋ผ ์ด๋ฅผ ๊ฐ์ฅ ์ ํ์ฉํ ์ ์๋ ๋ค์ํ ๋๊ตฌ๋ฅผ ์๋ ๊ฒ์ด ํธ๋ฆฌํ๋ค.
Event Loop์ "์กฐ์"์ด๋ "๋ฐ๋ณต์ ํน์ ๋ถ๋ถ ๋๋ ๋ค๋ฅธ ๋ฐ๋ณต์์ ์คํ๋๋๋ก ์ฝ๋๋ฅผ ์์ฝํ๋ ๊ฒ"์ ์๋ฏธํ๋ฉฐ, ์ํฉ์ ๋ฐ๋ผ ์ด๋ค ๋๊ตฌ๋ฅผ ์ ํํ๋๋์ ๋ฐ๋ผ ์ฝ๋์ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
test262.fyi
ECMAScript์ ๊ณต์ ํ ์คํธ ์ ์ธ test262๋ฅผ ๋งค์ผ ๋ค์ํ JavaScript ์์ง์ ๋์์ผ๋ก ํ ์คํธ๋ฅผ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ์ฉํ ์ผ์ด ๋ง์ง ์๊ฒ ์ง๋ง, ์์ง๋ค์ ํธํ์ฑ๊ณผ ํ์ค์ ๋ํ ์ค์๋ฅผ ํ์ธํ ์ ์๋ค.
์๋ก ๋ฐ๋ ๋ค์ด๋ฒ ๋ฉ์ธ ํ์ณ๋ณด๊ธฐ
๋ค์ด๋ฒ PC ๋ฉ์ธ์ด 5์ 17์ผ, 3๋ ๋ง์ ์๋กญ๊ฒ ๊ฐํธ๋์๋ค. ๊ฐํธ๋ ๋ฐ์คํฌํฑ์ฉ ๋ฒ์ ์ ์ด๋ค ๊ธฐ์ ๋ก ๋ง๋ค์ด์ก๋์ง Chrome ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ํตํด ๋ถ์ํ๋ค.
์ด ๊ธ์ ๋ค์ด๋ฒ์ ๊ณต์์ ์ธ ์๊ฒฌ์ ์๋๋ฉฐ, ์๋ ์๊ฐ์ ๊ฒฝ๊ณ ๋ ํจ๊ป ์๊ฐํ๋ค.
๋ค์ด๋ฒ ๋ฉ์ธ ๊ฐ๋ฐ์๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์ง์ง ๊ทธ๋ฅ ์น์ฌ์ดํธ๋ง ๋ณด๊ณ ๋ฐฐ์ด ๊ฒ๋ค๋ง ์ ์ด๋๋ค. ์ค์ ๊ฐ๋ฐ ๋ด์ฉ๊ณผ๋ ๋ค๋ฅผ ์ ์๋ค๋ ์ ์ ๋ฏธ๋ฆฌ ๊ฒฝ๊ณ ํ๋ค.
๐น ํํ ๋ฆฌ์ผ
Hands on with the Node.js test runner
Node.js๋ v18์ ์คํ์ ์ธ ํ ์คํธ ๋ฌ๋๋ฅผ ์ถ๊ฐํ๊ณ , v20์ ์ ์์ผ๋ก ๋ฆด๋ฆฌ์คํ๋ค.
๋นํธ์ธ ํ ์คํธ ๋ฌ๋๊ฐ ํ์ํ ์ด์ ๋ ๋ฌด์์ผ๊น?
- ์๋ํํฐ์ ๋ํ ์ข ์์ฑ ์์ด ํ๋ก์ ํธ๋ฅผ ํ ์คํธํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ ํ๋ ํ ์คํธ ๊ธฐ๋ฅ ์ธํธ๋ฅผ ์ ๊ณตํ๊ณ
- ํ ์คํธ ํ๋ ์์ํฌ๊ฐ ํ์คํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ณธ ํ๋ฆฌ๋ฏธํฐ๋ธ ์ธํธ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด๋ค.
์ด ๊ธ์ ๋นํธ์ธ ํ ์คํธ ๋ฌ๋๋ฅผ ์ฌ์ฉํด ํ์ํ ํ ์คํธ๋ฅผ ์์ฑํ๊ณ ์คํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๋ค.
[์ฐธ๊ณ ] Deno์ Bun ๋ํ ๋นํธ์ธ ํ ์คํธ ๋ฌ๋๋ฅผ ์ ๊ณตํ๊ณ ์๋ค.
React Bits
React๋ฅผ ํ์ฉํ ํจํด, ๊ธฐ์ , ํ ๋ฐ ํธ๋ฆญ์ ๋ํ ๋ชจ์์ ์ฝ๋ ์์ ์ ํจ๊ป ์ ๊ณต๋๋ฉฐ, Gitbook ํฌ๋งท์ผ๋ก๋ ์ ๊ณต๋๋ค.
[์ฐธ๊ณ ] ํ๊ตญ์ด ๋ฒ์ ๋งํฌ๋ ์์ง๋ง, ๋๋ถ๋ถ ๋ฒ์ญ๋์ง ์์ ์ํ์ฌ์ ์๋ฌธ ๋ฒ์ ์ ํ์ธํ๊ธฐ ๋ฐ๋๋ค.
How I built my first Open Source project with ChatGPT and Next.js. 10k users in 24 hours ๐คฏ
ํ ๋ฒ๋ ์ฝ๋ฉ์ ํด๋ณธ ๊ฒฝํ์ด ์๋ ๊ฐ๋ฐ์๊ฐ ChatGPT์ Next.js๋ฅผ ์ฌ์ฉํด 24์๊ฐ ๋ง์ 1๋ง ๋ช ์ ์ฌ์ฉ์๋ฅผ ํ๋ณดํ ๊ฒฝํ์ ๊ณต์ ํ๋ค.
LinkedIn Post Generator ํ๋ก์ ํธ๋ LinkedIn์ ์ด์ธ๋ฆฌ๋ ๊ธ์ ์๋์ผ๋ก ์นดํ ๊ณ ๋ฆฌ์ ๋ง์ถฐ ์๋์ผ๋ก ์์ฑํด ์ฃผ๋ฉฐ, ํด์ํ๊ทธ, ์ด๋ชจํฐ์ฝ, URL ๋ฑ๊ณผ ๊ฐ์ ์์๋ฅผ ๊ณ ๋ คํ๋ ๊ณ ์ ํ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ฐ์ผ๋ก ๊ธ์ ์์ฑ๋๋ฅผ ํ๊ฐํด ์ค๋ค.
What is REST?
API ํ๋ซํผ ๋๊ตฌ๋ฅผ ์๋น์คํ๋ Postman์์ ํธ์ ์ค๋ ๋๋ฅผ ํตํด REST์ ๊ฐ๋ ์ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ์๊ฐํ๋ค.
[์ฐธ๊ณ ] ์ต๊ทผ ํธ์ํฐ์ ๋น๋ก๊ทธ์ธ ๊ฒ์๋ฌผ ์ด๋ ์ ํ ์ ์ฉ์ ๋ฐ๋ผ, ํธ์ ํ์ธ์ ์ํด ๋ก๊ทธ์ธ์ด ํ์ํ ์ ์๋ค.
Creating a seamless multi-language user interface in React

react-i18next
์ ํ์ฉํด ๋ค๊ตญ์ด๋ฅผ ์ง์ํ๋ ๋ ์จ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค์ด๋ณด์. ๋ง์ฝ ๊ตญ์ ํ(i18n) ์ค์ ์ ๋๋ด๊ณ ์๋ํ๋ฅผ ํ๊ณ ์ถ๋ค๋ฉด ์ง๋ ํธ์ ์ค๋ฆฐ ๊ตญ์ ํ(i8n) ์๋ํ ๊ฐ์ด๋๋ ์ข์ ์ฐธ๊ณ ์๋ฃ๊ฐ ๋ ๊ฒ์ด๋ค.
๐ฆ ์ฝ๋์ ๋๊ตฌ
esm.sh
URL(npm ํจํค์ง ๋๋ GitHub ์ ์ฅ์๋ฅผ ์ง์ )์์ ESM์ import ํ ์ ์๋ CDN ์๋น์ค์ด๋ค.
NPM ๋ ์ง์คํธ๋ฆฌ์ GitHub ์ ์ฅ์์ ์๋ ๋ชจ๋์ import ํ๋ ๊ฒฝ์ฐ, ์๋์ ๊ฐ์ ํ์์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
// NPM ๋ ์ง์คํธ๋ฆฌ ๊ธฐ์ค
import React from "https://esm.sh/react@18.2.0";
// GitHub ์ ์ฅ์ ๊ธฐ์ค
import tslib from "https://esm.sh/gh/microsoft/tslib@2.5.0";
๋๋ ๋ชจ๋์ ์ค์นํ์ง ์๊ณ ๋ค์๊ณผ ๊ฐ์ด ๋น๋ํ ์๋ ์๋ค.
import { esm } from "https://esm.sh/build";
const mod = await esm`
export const foo: string = "bar";
`;
console.log(mod.foo); // "bar"
[์ฐธ๊ณ ] ์ ์ฌํ ์๋น์ค๋ก๋ Skypack์ด ์๋ค.
Anime.js

Anime.js๋ ๊ฐ๋จํ๋ฉด์๋ ๊ฐ๋ ฅํ API๋ฅผ ๊ฐ์ถ ๊ฒฝ๋ JavaScript ์ ๋๋ฉ์ด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก CSS, SVG, DOM ๋ฐ JavaScript ๊ฐ์ฒด์ ํจ๊ป ์๋ํ๋ค.
์ฌ์ฉ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๊ฒ ๋์ ์์๋ฅผ ์ง์ ํ ํ, ํ์ํ ์์ฑ์ ์ง์ ํ๋ฉด ๋๋ค. ๋ฌธ์๊ฐ ์ ์ ๋ฆฌ๋์ด ์์ด ๋น๊ต์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
import anime from 'animejs/lib/anime.es.js';
anime({
targets: 'div',
translateX: 250,
rotate: '1turn',
backgroundColor: '#FFF',
duration: 800
});
background-removal-js
์ด๋ฏธ์ง์์ ๋ฐฐ๊ฒฝ์ ์ ๊ฑฐํด ์ฃผ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค. ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ๋์ํ๊ธฐ ๋๋ฌธ์ ์๋ฒ ๋น์ฉ, ํ๋ผ์ด๋ฒ์ ๋ฌธ์ ๋ฅผ ๊ฑฑ์ ํ์ง ์์๋ ๋๋ค. ๋ฐ๋ชจ ํ์ด์ง์์ ๊ฐ๋จํ๊ฒ ์คํํด ๋ณผ ์ ์๋ค.
novel

Notion ์คํ์ผ์ WYSIWYG ์๋ํฐ์ด๋ค. AI ๊ธฐ๋ฐ ์๋ ์์ฑ์ด ์ง์๋๋ค. ๋ฐ๋ชจ ํ์ด์ง์์ ++๋ฅผ ์ ๋ ฅํด์ AI ์๋์์ฑ ๊ธฐ๋ฅ์ ์จ๋ณผ ์ ์๋ค.