2023-01 
๋งํฌ & ์ฝ์๊ฑฐ๋ฆฌ
JavaScript Frameworks - Heading into 2023

2022๋ ์ ๋๋์๋ณธ๋ค๋ฉด, ๋ง์ ์น ๊ฐ๋ฐ ๋๊ตฌ/ํ๋ ์์ํฌ๋ค์ด ๋ฆด๋ฆฌ์ค๋์๋ค. Astro์ Sveltekit์ 1.0, SolidStart์ Qwik์ ๋ฒ ํ ๊ทธ๋ฆฌ๊ณ React 18์ Next.js์ Remix๋ฅผ ํตํด ๊ธธ์ ์ฐพ์ ์คํธ๋ฆฌ๋ฐ ์ง์์ ์ถ๊ฐํ๋ค.
Front-end ์์ญ์์ ๋ฌธ์ ํด๊ฒฐ์ ์ํด ๋ฐฉ๋ฒ์ผ๋ก "์๋ฒ์ ๋ณด๋ค ์ง์ค"ํด SPA์ ๋ฌธ์ ์ ๋ค์ ํด๊ฒฐ(SSR์ ํ์ฉํ๋ค๋ ์ง) ํ ์ ์๋ค๋ ์๊ฒฌ์ ๋ง์ด ๋ค์ด๋ดค์ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ํด๊ฒฐ์ฑ ๋ค์ ๋ง๋ณํต์น์ฝ์ด ์๋๋ค.
2023๋ ์ด ์ด์ ๋ง ์์๋์๋ค. 23๋ ์๋ ์ด๋ค ๊ธฐ์ ์ ์ง์คํด์ผ ํ ๊น? ๊ธ์ ํด๋ต์ ์ ์ํ์ง ์๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๋ฌ๋ถ๋ค์๊ฒ ์ถฉ๋ถํ ์๊ฐํด ๋ณผ ์ ์๋ ์ธ์ฌ์ดํธ๋ฅผ ์ ๊ณตํ ๊ฒ์ด๋ค.
Explore the content of your npm packages with the new code explorer
๊ทธ๋์ NPM ํจํค์ง๋ค์ ์ธ๋ถ ๊ตฌ์ฑ์์๋ค์ ํ์ธํ๋ ๊ฒ์ ์ฝ์ง ์์๋ค. ์ปค๋ฎค๋ํฐ์์ ๊ฐ๋ฐํ npmview๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง, ์ง์ ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ๋ ๋ฒ๊ฑฐ๋ก์์ ๊ฐ์๊ฐ ํ์ํ๋ค.
์ด์ npmjs.com์์ ๊ฐ ํจํค์ง ํ์ด์ง ๋ด์ 'code explorer' ํญ์ ํตํด ํจํค์ง ๊ตฌ์ฑ์์๋ค์ ์์ฝ๊ฒ ํ์ธํ ์ ์๊ฒ ๋์๋ค.
React.js: The Documentary
์ด์ Front-end ์ ์์ React๋ "React is everywhere"๋ผ๋ ๋ง์ด ์ด์ธ๋ฆด ๋งํผ ์ฑ์ฅํ๊ณ ํ์ฐ๋์๋ค. ๊ทธ๋ฌ๋ ์ฒ์ ์คํ์์ค๋ก ๊ณต๊ฐ๋์์ ๋น์๋ง ํด๋ ์ฌ๋๋ค์ ๋ฐ์์ ์ด๋ ๊ฒ ์ฑ์ฅํ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ๋ ์ด๋ ๋ง์ง ์์๋ค. ํ์ด์ค๋ถ์ ์๋ ์์์ ๊ฐ๋ฐ์ ๊ทธ๋ฃน์ ๋ ธ๋ ฅ์ ํตํด ์ค๋๋ ๊น์ง ์ด์ด์ง๊ฒ ๋์๋ค.
2์ 10์ผ ๊ณต๊ฐ ์์ ์ธ ๋คํ๋ฉํฐ๋ฆฌ์์๋ React์ ๊ธฐ์๊ณผ ์ธ๋ ํ๋ก์ ํธ์์ ์ธ๊ณ์ ์ผ๋ก ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ํ๋ ์์ํฌ๋ก์ ๋ฐ์ ์ ๋ํด ์คํ ๊ฐ๋ฐ์๋ค๋ก๋ถํฐ ์ง์ ์ด์ผ๊ธฐ๋ฅผ ๋ค์ด๋ณผ ์ ์์ ๊ฒ์ด๋ค.
A React Developer's First Take on Solid
React ๊ฐ๋ฐ์๊ฐ ๋ฐ๋ผ๋ณธ Solid์ ๋ํ ์ฒซ์ธ์์ ์ ๋ฆฌํ ๊ธ๋ก, 2๊ฐ์ ํํธ๋ก ๋๋ ๊ฐ๊ฐ Solid์ SolidStart์ ๋ํด ๋๊ผ๋ ์ ์ ์๊ฐํ๋ค.
Reasons to avoid Javascript CDNs
์ฐ๋ฆฌ๋ ๋ง์ ๊ฒฝ์ฐ, ์ ์ ํ์ผ(.js) ๋ค์ ๋ํด CDN(jsdelivr, unpkg ๋ฑ)์ ํ์ฉํ๋ฉด ๋ณด๋ค ๋น ๋ฅธ ์๋๋ก ์ฝ๋๋ฅผ ๋ก๋ฉํ ์ ์์์ ๋ฐฐ์์์๋ค. ๊ทธ๋ฌ๋ ๋ณด์ ๋ฐ ์์คํ ๋ฆฌ์คํฌ์ ๋ฐ๋ฅธ ๋จ์ ๊ณผ ์ผ๋ถ ์ํฉ์์ ์คํ๋ ค ์๋๊ฐ ๋๋ ค์ง ์๋ ์๋ค๋ ์ ์ ์๋ ค์ค๋ค.
Migrate a 60k LOC TypeScript (NodeJS) repo to ESM and testing become 4x faster

2ํธ์ผ๋ก ๊ตฌ์ฑ๋ ๊ธ์ ํตํด ์ ์๋ ์ธ ๋ฒ์งธ ์๋ ๋์ CJS ๋ชจ๋๋ค์ ๋ค์ดํฐ๋ธ ESM์ผ๋ก ์ ํ์ ์ฑ๊ณตํ๊ณ ์ด๋ก ์ธํด ๋จ์ ํ ์คํธ ์ํ์ ๋ฐ๋ฅธ CI ์ํ ์๊ฐ์ 4๋ฐฐ ํฅ์ํ ๊ฒฝํ์ ์๊ฐํ๊ณ ์๋ค.
Concepts behind modern frameworks
์ด์ ๋ง Front-end์ ์ง์ ํ๋ ๊ฐ๋ฐ์๋ค์ "์ด๋ค ํ๋ ์์ํฌ๋ฅผ ๋ฐฐ์์ผ ํ๋๊ฐ?"์ "ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ด๋ ๋งํผ JS/TS๋ฅผ ๋ฐฐ์์ผ ํ๋๊ฐ?"๋ผ๋ ์ง๋ฌธ์ ํ๋ค. ๊ทธ๋ฌ๋ ์๋ง์ ๊ธ๋ค์ ์ด๋ค์๊ฒ ์ ๋ณด์ ์ ๊ฐํ ๊ฒฐ์ ์ํ ๊ฐ๋ ๋์ ๊ธ์ ์ ์๊ฐ ์ ํธํ๋ ํ๋ ์์ํฌ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฅ์ ์ ํ๋ณดํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
์ด ๊ธ์ ํ๋ ์์ํฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ธฐ๋ณธ ๊ธฐ์ ๊ฐ๋ ๋ค์ ์ดํดํ ์ ์๋๋ก ๋์์ฃผ๊ณ , ๋ ์ ์ค์ค๋ก ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ดํดํ ์ ์๋๋ก ๋์์ค๋ค.
๋น์ ์ด ๋ชจ๋ฅด๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฉ๋ชจ๋ฆฌ ๋์์ ๋น๋ฐ
์น ๊ฐ๋ฐ ์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ ๊ฒํด ๋ณธ ์ ์ด ์๋๊ฐ? CPU ๋ฐ ๋คํธ์ํฌ ์ฑ๋ฅ ์ธก์ ์ ํํ ์ ๊ฒ์ด์ง๋ง, ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ ๊ฒํ๋ ์ผ์ ๋๊ฐ ํ์น ์์ ๊ฑฐ๋ผ ์๊ฐํ๋ค. ๋ณธ ๊ธ์์๋ ํฌ๋กฌ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ ๊ฒํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ณ , ๋ค์ฏ ๊ฐ์ง์ ์ฌ๋ก๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ํด์ํ๋ ์์ ๋ฅผ ์ดํด๋ณธ๋ค.
ํํ ๋ฆฌ์ผ
Draw SVG rope using JavaScript
SVG path๋ฅผ ์ด์ฉํด ์ฌ์ค์ ์ธ ๋ฐง์ค์ ๊ทธ๋ฆฌ๋ ๊ณผ์ ๊ณผ ์ฌ์ค์ ๊ตฌํ์ ์ํ ์ ๊ทผ์ ๋ํ ๊ณ ๋ฏผ๋ค๋ ํจ๊ป ์ดํด๋ณผ ์ ์๋ค.
Webhooks 101 - How I Use Discord Webhooks to Get My Personal Notifications

์นํ ์ ์ค์๊ฐ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ ํต์ ํ๋๋ก ๋์์ฃผ๋ ๊ฐ๋ ฅํ ๋๊ตฌ๋ก, ์๋์ ์ธ ๊ฐ์ ์์ด ์๋ฆผ์ด๋ ์ํ์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ์๋ ค์ฃผ๋๋ฐ ํ์ฉ๋๋ค.
๊ธฐ๋ณธ์ ์ธ REST API์ ๋ํ ์์ฒญ์ ํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์๋ค๋ฉด, ์นํ ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ด๋ ต์ง ์์ผ๋ฉฐ, ์ด ๊ธ์ ํตํด Discord ์นํ ์ ํ์ฉํด ๊ฐ์ธ ์๋ฆผ์ Discord ์๋ฒ๋ก ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ๋ณผ ์ ์๋ค.
Master Notifications With ChatGPT, React and NodeJS
์ด ํํ ๋ฆฌ์ผ์ ํตํด ChatGPT๋ก ์์ฑ๋ ์๋ฆผ์ React์ Node.js๋ฅผ ํตํด ์ฌ์ฉ์์๊ฒ ๋ณด๋ผ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ณผ ์ ์๋ค.
Build your Own Virtual Scroll - Part I - DEV Community ๐ฉโ๐ป๐จโ๐ป

์น ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ virtual scroll ๊ฐ๋ ์ ์๊ฐํ๊ณ ์ด๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๊ฐ๋ตํ ์์๋ณธ๋ค.
์ฝ๋์ ๋๊ตฌ
tRPC
tRPC๋ ์คํค๋ง ๋๋ ์ฝ๋ ์์ฑ ์์ด ํ์ ์ธ์ดํ ํ API๋ฅผ ๋น๋ํ๊ณ , ์ด๋ฅผ ์ฝ๊ฒ ์๋นํ ์ ์๋๋ก ๋ง๋ค์ด ์ค๋ค.
modern-errors
modern-errors๋ ์ค๋ฅ๋ค์ ์ฝ๊ณ ์์ ์ ์ด๊ฒ, ๊ทธ๋ฆฌ๊ณ ์ผ๊ด๋๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋ง๋ค์ด ์ค๋ค.
// 1) ์ค๋ฅ๋ฅผ ํธ๋ค๋งํ ํด๋์ค๋ฅผ ์์ฑํ๋ค.
import ModernError from 'modern-errors';
const BaseError = ModernError.subclass('BaseError');
export const InputError = BaseError.subclass('InputError', {
plugins: [modernErrorsSerialize], // ์ ๊ณต๋๋ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ ์๋ ์๋ค.
});
// 2) ์ค๋ฅ ๋ฐ์ ์ฝ๋๋ฅผ try...catch๋ก ๊ฐ์ผ๋ค.
try {
// ...
} catch (cause) {
// ์ค๋ฅ์ ๋ํ ์ธ๋ถ ์์ฑ์ ์ค์
throw new InputError('Could not read the file.', { cause })
}
GraphJin, Build APIs in 5 minutes not weeks
๋น ๋ฅด๊ณ ์์ ํ๊ฒ ์ฝ๋ ์์ ์์ด GraphQL API๋ฅผ ๋ง๋ค ์ ์๋ค. GraphQL ์ฟผ๋ฆฌ๋ฅผ ํตํด API๋ฅผ ์ ์ํ๋ฉด, GraphJin์ด ์๋์ผ๋ก ์์ ํ ๊ธฐ๋ฅ์ ๊ฐ์ถ API๋ก ์์ฑํด ์ค๋ค.
Canvas Confetti
๋ค์ํ ์์ข ์ด ํญ์ฃฝ ํจ๊ณผ๋ฅผ ๋ง๋ค ์ ์๋ค.
Multiline Structural Search - CodeQue
VSCode ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ฌธ๋ฒ์ ์ดํดํด ๊ตฌ์กฐ์ ์ผ๋ก ์ฝ๋๋ฅผ ๊ฒ์ํ ์ ์๋๋ก ๋์์ค๋ค.
Dittytoy
๊ฐ๋จํ JavaScript API๋ฅผ ํ์ฉํด ์จ๋ผ์ธ์ผ๋ก ์์ ์ ๋ง๋ค์ด ๋ณผ ์ ์๋ค.
๋งคํด ํฌ๋ฆฌ์ค๋ง์ค ์์ฆ๋ง๋ค ๋ฃ๋ All I want for Christmas Is You ๋ค์ด๋ณด๊ธฐ