๋ฏธ๊ตญ์ ์ ๋ช ํ ๋ฒค์ฒ ์บํผํธ์ธ ์ธ์ฟผ์ด์ ์บํผํธ ์น์ฌ์ดํธ์ ๊ณต๊ฐ๋ Ryan Dhal์ ์ธํฐ๋ทฐ ๋ด์ฉ์ด๋ค.
์ง๊ธ์ Node.js์ Deno๋ฅผ ๊ฐ๋ฐํ ๊ฐ๋ฐ์๋ก ์ ๋ช ํ์ง๋ง, ๊ณผ๊ฑฐ ์์ด ๊ฐ์ฌ๋ก ๋จ์๋ฉ๋ฆฌ์นด์์ ์ํ์ ํ๋ค ๊ฒฝ์ ์ ์ด์ ๋ก ์ธํด ์ฌ์ดํธ ๊ตฌ์ถ ์ผ์ ํ๋ฉด์ Front-end ๊ฐ๋ฐ์ ์์ํ๊ฒ ๋์๋ค๊ณ ํ๋ค.
์ดํ, 2008๋ 9์ ๊ตฌ๊ธ์ V8 ์์ง ๊ณต๊ฐ๋ฅผ ๊ธฐ์ ์ผ๋ก ๋ ์ผ ์พฐ๋ฅธ์ ์คํ๋ฒ ์ค์์ 6๊ฐ์๊ฐ ๊ฐ๋ฐํ ๋์ Node.js๊ฐ ํ์๋์๋ค๋ ์ผํ ๋ฑ์ ์ฝ์ด ๋ณผ ์ ์๋ค.
Node.js์ version 20์ด ์ถ์๋์๋ค.
Node.js 20์์๋ Permission Model, Stable Test Runner์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์๊ณ , V8๋ 11.3์ผ๋ก ์
๊ทธ๋ ์ด๋๋์๋ค.
Node.js 0.10๋ฒ์ ๋ถํฐ ์ฌ์ฉํ ์๊ฐ๋ ์ด๋ฐ ๋ณํ๋ค์ ๋ํด ์กฐ๊ธ ๋ ์์ธํ๊ณ ์ข ๋ ์ฝ๊ธฐ ํธํ๊ฒ ์๊ฐํ๋ค.
npm์ ๋ฐฐํฌ๋ ํจํค์ง๋ค์ ํ
์ ํตํด ์ค์น ๊ณผ์ (pre/post install)์์ ์คํฌ๋ฆฝํธ๋ค์ ์ํ์ํฌ ์ ์๋ค.
์ฆ, ํจํค์ง๊ฐ ์ค์น๋ ๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์กฐ์ฉํ ์คํฌ๋ฆฝํธ๋ค์ด ์คํ๋ ์ ์๋ค๋ ๋ง์ด๊ธฐ๋ ํ๋ค.
npm ๋ฉ์จ์ด ํจํค์ง๋ค์ ์ฌ๋ก๋ฅผ ํตํด ์ด๋ค ์์ผ๋ก ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํ์ทจํ๋์ง๋ฅผ ์ดํด๋ณธ๋ค.
[์ฐธ๊ณ ] ์ถ๊ฐ์ ์ผ๋ก ๋ค์์ ๊ธ๋ ๊ฐ์ด ์ฐธ๊ณ ํด ๋ณด๊ธฐ ๋ฐ๋๋ค.
Next.js์ ๊ฐ๋ฐ์ฌ Vercel์์ ๋ค์ํ Storage ์๋น์ค๋ค์ ๊ณต๊ฐํ๋ค. ๊ณต๊ฐํ ์๋น์ค๋ค์ ์๋์ ๊ฐ๋ค.
- Vercel KV: ์๋ฒ๋ฆฌ์ค Redis, powered by Upstash
- Vercel Postgres: ์๋ฒ๋ฆฌ์ค pgSQL database, powered by Neon
- Vercel Blob(Private Beta): ์ฃ์ง ์ปดํจํ ์ ํ์ฉํ ํ์ผ ์ ๋ก๋ ๋ฐ ์๋น, powered by Cloudflare R2
Wasm์ ๋ค์ํ ์ธ์ด์ ํจ์จ์ ์ด๊ณ ์์ ํ ๋ฐํ์์ ์ ๊ณตํ๋ ํฌํฐ๋ธ ์ปดํจํ ์ ๋ฏธ๋๋ฅผ ๋ํํ๋ค. ์ง๋ ํ ํด ๋์ ๊ด๋ฆฌํ ํ๋ซํผ, ํด๋ง, WASI์ ๋ํ ์ถ๊ฐ ํ์คํ ์์ ๋ฑ ๋ฐฑ์๋์์ Wasm์ ์ฑ์ฅ์ด ํญ๋ฐ์ ์ผ๋ก ์ฆ๊ฐํ๋ค.
์ด๋ ๋ฏธ๋์ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ์ํคํ ์ฒ๋ฅผ ๋ฐ๋ผ๋ณผ ๋ ๋ค์์ ์ง๋ฌธ๋ค์ ๋ ์ฌ๋ฆฌ๊ฒ ๋ง๋ ๋ค.
- ์ธ์ Wasm์ด ์ฌ๋ฐ๋ฅธ ์ ํ์ธ๊ฐ?
- ํนํ ๊ธฐ์กด ์ํฐํ๋ผ์ด์ฆ ์ํคํ ์ฒ์ Kubernetes ์ธํ๋ผ์ ๋๊ท๋ชจ๋ก ํฌ์ํ ์กฐ์ง์ ๊ฒฝ์ฐ ์ธ์ ์ํคํ ์ฒ๋ฅผ ์ ํํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ๊น?
- K8s ๋ด์์ Wasm ์ํฌ ๋ก๋๋ฅผ ์คํํ์ฌ ๊ธฐ์กด ํด๋ฌ์คํฐ ๋ฆฌ์์ค์ ์ด์์ ํจ์จ์ ์ผ๋ก ํ์ฉํจ์ผ๋ก์จ ์ค๋ฒํค๋๋ฅผ ์ค์ผ ์ ์์๊น?
์ด ๊ฐ์ฐ์ Adobe๊ฐ K8s ๋ด๋ถ์ ๋ฐฑ์๋์์ Wasm์ ํ์ฉํ๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ํด ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ๋ฉฐ, ๊ธฐ์กด K8s ํด๋ฌ์คํฐ ๋ด์์ Wasm ํด๋ผ์ฐ๋๋ฅผ ์คํํ๊ธฐ ์ํ ์ํคํ ์ฒ์ Wasm ๋ฉํฐํ ๋์๋ฅผ ์ํด ์ทจํ๊ณ ์๋ ๋จ๊ณ๋ฅผ ์๊ฐํ๋ค.
์ด ๊ธ์ v8.dev์ Understanding the ECMAScript spec, part 1๋ฅผ ๋ฒ์ญํ ๊ธ์ด๋ค.
ECMAscript spec์ ๋ณด๊ฒ ๋๋ฉด, ์ต์ํ์ง ์์ ํ๊ธฐ๋ฒ์ผ๋ก ์ธํ์ฌ ๋ฌธ์๋ฅผ ์ฝ๊ธฐ๋ฅผ ํฌ๊ธฐํ๋ ์ฌ๋๋ค์ด ๋ง๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฐ ์ฌ๋๋ค์ ๋๊ณ ์ ์ด ๊ธ์ ์์ฑ๋์๋ค.
1๋ถ์์๋ hasOwnProperty์ ๋ช
์ธ๋ถํฐ ์ดํดํ๊ธฐ ์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํด ์ค๋ค.
์ ์ฒด๋ฅผ ์ ์ ์๋ CORS ์๋ฌ๋ฅผ ๋ง๋๋ฉด์ ๊ธ์ด ์์๋๋ค.
์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฐพ์ "์ฃผ๋จน๊ตฌ๊ตฌ์ ๋ฐฉ๋ฒ"์ผ๋ก ๋ฌธ์ ๋ฅผ ๋ฆฌ์คํธ์
ํ๊ณ ํ๋ํ๋ ์ฐพ์๊ฐ๋ค.
๊ทธ๋ฌ๋ ์ค ํน์ React ์ปดํฌ๋ํธ ๋ด๋ถ์์ require๋ก css ํ์ผ์ ๊ฐ์ง๊ณ ์ค๋ ์ฝ๋๋ฅผ ๋ณด๊ณ import ๊ตฌ๋ฌธ์ผ๋ก ๋ณ๊ฒฝํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
์ด ๊ธ์ ์ฌ๊ธฐ์๋ถํฐ ๋ณธ๋ก ์ด๋ค.
๋ ๊ทผ๋ณธ์ ์ธ ์์ธ์ ์ฐพ์ ์ฝ๋๋ฅผ ๋ถ์ํ๊ณ ์ํ์ฐฉ์ค๋ฅผ ๊ฒช์ผ๋ฉฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ณผ์ ์ ๊ณต์ ํ๋ค.
ํ๊ธ์ ์์, ์ค์ฑ, ์ข
์ฑ์ ์กฐํฉ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ด ์กฐํฉ ์ค์๋ ๊ฒ์์ด ์๋์ง ์๋ ๋ฌธ์ ๊ฐ ์๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง๋ ํ๊ธ ์ ๊ท์ ์์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์๊ฐํ๊ณ , ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ํด์ ์ค๋ช
ํ๋ค.
UI๋ฅผ ๊ฐ์ ํ ์ ์๋ 30๊ฐ์ง์ ๊ฐ๋จํ ํ์ ์ค๋ช
ํ๊ณ ์๋ค.
์ฝ๊ฒ ๋์
ํด ๋ณผ ์ ์๋ ๋ด์ฉ์ด ๋ง์์ ์ํฐํด์ ์ฝ์ด๋ณด๊ณ ๊ฐ์ ํ ์ ์๋ ๋ถ๋ถ์ ๊ณง๋ฐ๋ก ์ ์ฉํด ๋ณด๋ ๊ฒ์ ์ด๋จ๊น?
- ์์ํ ๊ฒ์ ์์ ์ฌ์ฉํ์ง ์๊ธฐ
- ๊ท ์ผํ ๊ฐ๊ฒฉ(8์ ๋ฐฐ์ ์ฌ์ฉ)
- ๋์๋ฌธ์์ ์ ์ ํ ์ฌ์ฉ
- ํ ์คํธ ํผ์์์ ์ ๋ ฌ๊ณผ ์คํ์ผ ๋ฑ
ํค๋ณด๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด code์ key ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ค ํค๊ฐ ๋๋ ธ๋์ง ํ์ธํ ์ ์๋ค.
๋ณดํต์ ๊ฒฝ์ฐ ๋ ํ๋กํผํฐ๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ์ฌ์ฉํด๋ ๋ฌธ์ ๊ฐ ๋์ง ์์ง๋ง, ๋๋ก๋ ๊ตฌ๋ถํ์ฌ ์ฌ์ฉํด์ผ ํ๋ค.
์ด ๊ธ์์๋ ๋ ํ๋กํผํฐ์ ์ฐจ์ด์ ์ ๋ํด ์ดํด๋ณธ๋ค.
Link ํ๊ทธ์ media ์์ฑ์ ํ์ฉํ์ฌ ํ์ฌ viewport ์ฌ์ด์ฆ์ ๋ง๋ CSS ํ์ผ์ ์กฐ๊ฑด๋ถ ๋ก๋ํด ์ด๊ธฐ ๋ก๋ฉ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์๋ ๊ฒ์ ๋ํด ์ค๋ช
ํ๋ค.
viewport ์ฌ์ด์ฆ๋ฟ๋ง ์๋๋ผ media ์คํ์ ์๋ ๋ค์ํ ํผ์ฒ๋ค์ ํ์ฉํด ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ๋ ์ ์ํ๊ณ ์๋ค.
๋ํ์ ์ธ ์๋ก๋ ๊ณ ํด์๋ ํ๋ฉด์ด๋ ์ฌ์ฉ์์ ์์ ํ๊ฒฝ์ค์ ์ ๋ง๊ฒ ์กฐ๊ฑด๋ถ๋ก ๋ก๋์ํค๋ ๊ฒ์ด๋ค.
์น ๋ธ๋ผ์ฐ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์ฃผ๋ก Cookie ํน์ Local Storage๋ฅผ ์ด์ฉํด์ ์ฒ๋ฆฌํ๊ฒ ๋๋ค.
ํ์ง๋ง, ์ด๋ฌํ ๋ฐฉ๋ฒ์ ์ฉ๋์ ์ ํ๊ณผ ์ ์ฅํ ๋ฐ์ดํฐ์ ํ์
์ ํ๊ณ๊ฐ ์๋ ๋ฐฉ๋ฒ์ด๋ค.
์ด๋ฌํ ํ๊ณ๋ฅผ ๊ทน๋ณตํ ์ ์๊ฒ ํด์ฃผ๋ ๋ธ๋ผ์ฐ์ ํ์ค Database์ธ IndexedDB(๊ณผ๊ฑฐ ์ด๋ฆ: WebSimpleDB)๋ฅผ ์์๋ณธ๋ค.
์๊ฐ์ ํํ๋ก React ๋ฑ์ฅ์ ์ญ์ฌ์ ๋ฐฐ๊ฒฝ๊ณผ ํจ๊ป, React๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์ํด ํ์ํ ๋ชจ๋ ๊ธฐ๋ณธ์ ๊ฐ๋
์ ๋ค๋ฃฌ๋ค.
๊ฐ ๊ธฐ์ ์ ์ฝ์
ํธ ๋ฑ์ ๋ํด์ ๊ฐ๋จํ ์์ ๋ฅผ ์ ๊ณตํด ์ํธ์์ฉ์ ํตํด ์ด๋ป๊ฒ ๋์ํ๋์ง๋ฅผ ์ฝ๊ฒ ์ดํดํ ์ ์๋ ๊ฐ์ด๋๋ค.
์ฌ์ฉ์ ๋ฑ๋ก์ ํตํ ๋ก๊ทธ์ธ ๊ธฐ๋ฐ์ ๋
ธํธ ์ฑ์ ๋ง๋ค์ด ๋ณด๋ ํํ ๋ฆฌ์ผ์ด๋ค.
Front-end๋ Next.js๋ฅผ ์ฌ์ฉํ๊ณ ,
Back-end๋ Rust ์น ํ๋ ์์ํฌ์ธ Axum์ ํ์ฉํ๋ค.
@keyframes ์ @steps๋ฅผ ์ด์ฉํด typewriter animation์ ๋ง๋ค์ด ๋ณธ๋ค.
const oldFriends = await db.friends
.where('age').above(75)
.toArray();
// or make a new one
await db.friends.add({
name: 'Camilla',
age: 25,
street: 'East 13:th Street',
picture: await getBlob('camilla.png')
});Dexie.js๋ ์น ๋ธ๋ผ์ฐ์ ํ์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ IndexedDB๋ฅผ ๋ํ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
IndexedDB๋ฅผ ๋ ์ฐ์ํ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ํด์ค๋ค.
NextJs์ router๋ฅผ ๋ณด๊ธฐ ์ฝ๊ฒ ์๊ฐํ ์์ผ์ค๋ค.
์ด ํ์ด์ง๋ GitHub์์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ณ๋ก Pull Requests, Starts, Pushes, Issues์ ์์ ๋ํ ๊ทธ๋ํ๋ฅผ ์ ๊ณตํ๋ค.
opencv.js๋ฅผ ํ์ฉํ ๋ชจ๋ฐ์ผ ๋ฌธ์ ์ค์บ๋ ๋๊ตฌ๋ก, ์ฌ์ง ์ดฌ์๋ ๋ฌธ์๋ฅผ ์ ์ค์บ ๋ ๋ฌธ์๋ก ๋ณํํด ์ค๋ค.








