2022-02 
๋งํฌ & ์ฝ์๊ฑฐ๋ฆฌ
What You Need to Know About the New Era of Internet Web 3.0 As a Frontend Developer
Web 3.0์ ๋ฌด์์ธ๊ฐ? ์จ๋ผ์ธ์์ ์๋ง์ ์ ์๋ฅผ ์ฐพ์๋ณผ ์ ์๊ฒ ์ง๋ง, ๋ฌด์๋ ์ ํํ๊ณ ๋จ์ํ๊ฒ ์ค๋ช ๋์ง ์์ ๊ฒ์ด๋ค. ์๋ํ๋ฉด ๊ทธ ์์ฒด์ ๋ํ ์ ์๊ฐ ๋ช ํํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก Web 3.0์ ๋ฉํ๋ฒ์ค, ๋ธ๋ก์ฒด์ธ, ์ํธํํ, NFT ๋ฑ๊ณผ ์ฐ๊ด๋๋ค.
Front-end ๊ฐ๋ฐ์๊ฐ ๊ผญ ์์์ผ ํ ๊น? ๊ทธ๋ ์ง ์์ ์๋ ์์ง๋ง, Web 1.0 โ 2.0์ผ๋ก์ ์งํ์ ๋ฐ๋ผ Front-end ๊ธฐ์ ์์ญ์ ์ ์๊ฐ ๋ช ํํด์ง ๊ฒ์ฒ๋ผ, Web 3.0์ ๋ ๋ค๋ฅธ ๋ณํ์ ์ ๊ฐ์ ธ์ฌ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์์ง์ ์๊ธฐ ์์กฐ์ผ ์ ์์ง๋ง, ์ ์จ๋ผ์ธ์์ ์ดํ ๋ก Web 3.0์ ๋ํ ๋ง์ ์ด์ผ๊ธฐ๊ฐ ์ค๊ฐ๋์ง ๊ด์ฌ์ ๋๋ ๊ฒ์ ์ฅ๊ธฐ์ ๊ด์ ์์ ๋์์ด ๋ ๊ฒ์ด๋ค.
[์ฐธ๊ณ ] Web 3.0์ ๋ํด ์ข ๋ ์๊ณ ์ถ๋ค๋ฉด ์ถ๊ฐ์ ์ผ๋ก ๋ค์ ๋งํฌ๋ค์ ์ฐธ๊ณ ํ๋ผ.
Dependency Risk and Funding
ํ๊ธ ๋ฒ์ญ: ์์กด์ฑ ์ํ์ฑ๊ณผ ํ๋ฉ
'22/1์ ์ด, ์ ๋ช
ํ ์คํ์์ค ํ๋ก์ ํธ๋ค์ธ colors.js์ faker.js(FE News '20/12์ ์์์ ํตํด ์๊ฐ)๋ฅผ ๊ฐ๋ฐํ๋ Marak์ ๊ฐ๊ฐ ์ ๊ท ๋ฆด๋ฆฌ์ค๋ฅผ ํ๋ฉด์ colors.js v1.4.1
์ ๋ฌดํ ๋ฃจํ ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ณ , faker.js v6.6.6
์ ๋น์ด์๋ ๋ชจ๋์ ๋ฐํํ๋ฉด์ ๋๋ถ์ด ์ ์ฅ์์ ์ฝ๋๋ฅผ ๋ชจ๋ ์ง์๋ฒ๋ฆฌ๋ ์ผ๋ จ์ ์ฌ๊ฑด์ด ๋ฐ์ํ์๋ค.
์ด๋ฌํ ๊ฒฐ์ ์ ์ฃผ์ ์์ธ์ผ๋ก๋ ๋ง์ ์ด๋ค์ด ์ฌ์ฉํ๋ ์ธ๊ธฐ์๋ ์คํ์์ค์ด๋๋ผ๋ ์ ์ง์ ๋ฐ๋ฅด๋ ๋น์ฉ์ ๊ทธ ๋๊ตฌ๋ ์ฝ๊ฒ ์ง๋ถํ์ง ์๋ ์คํ์์ค ์ํ๊ณ์ ์จ๊ฒจ์ง ๋ถ๊ท ํ(์์ฐ์/๊ธฐ์ฌ์์ ๋นํด ์๋น์๊ฐ ์๋์ ์ธ)์ ๋ฐ๋ฅธ ๋ฌธ์ ์ด๊ธฐ๋ ํ๋ค.
์ธ๊ธฐ ์๋ ํจํค์ง๋ค์ NPM ์ํ๊ณ์ ์ด๊ณณ์ ๊ณณ์ ์งํฑํ๊ณ ์์ง๋ง, ๊ทธ๋งํผ ์ทจ์ฝํ ๊ฒ๋ ์ฌ์ค์ด๋ค. ์ด๋ฅผ ๋จ์ํ ํดํ๋์ผ๋ก ๋ณผ ์๋ ์์ง๋ง, ์ง์ ๊ฐ๋ฅํ ์ํ๊ณ๋ฅผ ์ํด ํ์ํ ๊ฒ์ด ๋ฌด์์ธ์ง ์ฐ๋ฆฌ ๋ชจ๋ ์ง์งํ๊ฒ ์๊ฐํ ํ์๊ฐ ์์ง ์์๊น?
[์ฐธ๊ณ ] faker.js๋ฅผ ์ฌ์ฉํ๊ณ ์์๋ค๋ฉด. fork ํ๋ก์ ํธ์ธ Faker ๋๋ ์ ์ฌํ falso ํ๋ก์ ํธ ์ฌ์ฉ์ ๊ณ ๋ คํด ๋ณด๊ธฐ ๋ฐ๋๋ค.
Discontinued Long Term Support for AngularJS
AngularJS LTS ์ง์์ด ๊ธฐ ์๊ณ ๋์๋ ๊ฒ๊ณผ ๊ฐ์ด โ21/12/31์ผ์ ๊ธฐ์ ์ผ๋ก ์ค๋จ๋์๋ค. ์ด๋ก์จ JavaScript ์ํ๊ณ์ ํ๋ ์์ํฌ๋ผ๋ ์๋ก์ด ์๋๋ฅผ ์ด์๋ AngularJS๋ ๊ทธ ์ญํ ์ ๋คํ๊ณ ๋ง์นจํ๋ฅผ ์ฐ๊ฒ ๋์๋ค.
ํ๋ก ํธ์๋ ์ํ ๊ด๋ฆฌ์ ๋ํ ์ฌ์
์นด์นด์ค ์คํ์ผ(๊ตฌ ์ง๊ทธ์ฌ๊ทธ) ๊ฐ๋ฐํ์์ React ์ํ ๊ด๋ฆฌ๋ฅผ ์ํด Jotai๋ฅผ ์ ํํ๊ฒ ๋ ๋ฐฐ๊ฒฝ์ ๋ค๋ฃจ๋ ์ฒซ ๋ฒ์งธ ์๋ฆฌ์ฆ ๊ธ๋ก, ์ํ ๊ด๋ฆฌ๋ฅผ ์ํด Mithril, MobX, useReducer ๋ฑ์ ์ฌ์ฉํ์ง๋ง ์ต์ข ์ ์ผ๋ก ์ Jotai์ ์ด๋ฅด๊ฒ ๋์๋์ง๋ฅผ ์๊ฐํ๋ค.
Jotai๋ฅผ ์ ํํ๊ฒ ๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค๊ณ ๋ฐํ๊ณ ์๋ค.
- ํฐ state๋ฅผ ์ ์ํ๋ ๋์ , ๊ฐ๋ณ ์ํ(atom)๋ฅผ ์ ์ํด์ ์กฐํฉํด์ ์ฌ์ฉํ๋ค๋ ๊ฒ
- ๊ฐ๋ ์ด ๋จ์ํ๊ณ ์ฝ๋ ํฌ๊ธฐ๊ฐ ์๋ค๋ ๊ฒ
From Jest to Vitest - Migration and Benchmark
Vitest๋ Vite ๊ธฐ๋ฐ์ ํ ์คํธ ํ๋ ์์ํฌ๋ค. ํ์ฌ ๊ฐ๋ฐ ์ค์ธ ์ํ๋ก, stable ๋จ๊ณ์ ๋๋ฌํ์ง ์์ ์ํ๋ค. Vite์ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ์ค์ ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉฐ, Jest ํธํ API์ ๋นํธ์ธ Chai, ๋ฉํฐ ์ค๋ ๋ฉ ๋ฑ์ด ์ง์๋๋ค.
Jest์ ๋น๊ต ์ ์ผ๋ง๋ ๋น ๋ฅผ๊น? ๊ธ์ ์ ์๋ Jest๋ก ์์ฑ๋ 37๊ฐ ํ ์คํธ(4๊ฐ ํ์ผ๋ก ๊ตฌ์ฑ)๋ฅผ ๋์์ผ๋ก Jest โ Vitest๋ก์ ์ ํ ๊ณผ์ ๊ณผ ํจ๊ป ๋ฒค์น๋งํฌ ๊ฒฐ๊ณผ๋ฅผ ์๊ฐํ๋ค.
๋ฒค์น๋งํฌ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
Framework | Initial run | Watch run :--: | :--: | :--: Jest | 6.50s | 5.5s Vitest | 5.30s | 1.25s
์คํ ๋ฆฌ๋ถ์ผ๋ก ์ธํฐ๋์ ํ ์คํธํ๊ธฐ
Storybook 6.4์ ์ถ๊ฐ๋ Interactive stories๋ฅผ ์ฌ์ฉํด ์ปดํฌ๋ํธ ์ธํฐ๋์ ์ ์๋์ผ๋ก ์ฌ์ํ๊ณ , E2E ๋๊ตฌ์ ๊ฒฐํฉํ Storybook์ผ๋ก ์๋ํ๋ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค.
How we migrated 541 components from Styled Components to Emotion with zero bugs
Storybook ๊ฐ๋ฐํ์์ 5๊ฐ์ ์ฝ๋ ๋ฒ ์ด์ค์์ Styled Components๋ก ์์ฑ๋ 541๊ฐ ์ปดํฌ๋ํธ๋ค์ UI ์คํ์ผ์ ํด์น์ง ์์ผ๋ฉด์ Emotion์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ๊ฒฝํ์ ์๊ฐํ๋ ๊ธ์ด๋ค.
Storybook ํ์ Storybook๊ณผ Chromatic ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๊ณ ์์ผ๋ฉฐ, ์ฌ๋ฌ ์ด์ ๋ก ์ธํด ๊ฐ๊ฐ ๋ค๋ฅธ ์คํ์ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์์๋ค๊ณ ํ๋ค. Storybook์ Emotion์, ๊ทธ๋ฆฌ๊ณ Chromatic์ Styled Components๊ฐ ์ฌ์ฉ๋์๋ค.
๊ทธ๋ฌ๋ ๋์์ธ ์์คํ ์ ๊ธฐ๋ฐํด ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ๋๋ง๋ค ๊ฐ๊ฐ 2๊ฐ์ ํ๋ก์ ํธ์ ๋์ผํ๊ฒ ์ ์ฉํ๋ ๊ฒ์ ์์ ์ ๋๋ฆฌ๊ฒ ๋ง๋ค์๊ณ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋จ์ผํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ ์ํด ๋ง์ด๊ทธ๋ ์ด์ ์์ ์ด ์์๋์๋ค๊ณ ํ๋ค.
How we reduced our nodejs monorepo build time by 70%

24๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฑ์ ๊ด๋ฆฌํ๋ Yarn workspaces์ Lerna๋ก ๊ตฌ์ฑ๋ monorepo ํ๊ฒฝ์์ ํจํค์ง ๊ด๋ฆฌ์์ธ pNpm๊ณผ Monorepo ๋น๋ ๊ด๋ฆฌ ๋๊ตฌ์ธ Nx๋ฅผ ์ฌ์ฉํด, ๋น๋ ์๊ฐ์ ๊ธฐ์กด๋ณด๋ค 70% ๊ฐ์์ํจ ๊ฒฝํ์ ์๊ฐํ๋ค.
ํจํค์ง ๊ด๋ฆฌ์์ Monorepo ๋น๋ ๊ด๋ฆฌ ๋๊ตฌ์ ๋ํ ๋ฒค์น๋งํฌ๊ฐ ๊ถ๊ธํ๋ค๋ฉด ๋ค์์ ์ถ๊ฐ๋ก ์ฐธ๊ณ ํ๋ผ.
2021's JavaScript Rising Stars
2021๋ 1๋ ๊ฐ ์ฆ๊ฐํ Github ๋ณ ์ซ์์ ์ํ ์์๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ฌ์ดํธ์ด๋ค. 2021๋ ํ ํด ๋์์ JavaScript ๊ฐ๋ฐ์์ ๊ด์ฌ์ฌ๋ฅผ ์ดํด๋ณผ ์ ์๋ค.
2016๋ ๋ถํฐ ์ ๋ณด๊ฐ ์์ผ๋ ์ฐ๋๋ณ๋ ์ดํด๋ณด๋ ๊ฒ๋ ์ฌ๋ฏธ์์ ๊ฒ์ด๋ค.
MONADS
You Don't Know JS๋ผ๋ ์ ๋ช ํ ์ฑ ์ ์ ์ Kyle์ด ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ Monad๋ฅผ ์๊ฐํ ์ด ๊ธ์ด๋ค. JavaScript๋ก ์์ ์ฝ๋๊ฐ ์ง์ฌ์์ด Front-end ๊ฐ๋ฐ์๋ผ๋ฉด ์ข ๋ ์น์ํ๊ฒ ์ฝ์ ์ ์๋ค.
DEVS ANSWER: Kent C. Dodds
Front-end ๊ฐ๋ฐ๊ณผ React ์ํ๊ณ์์ ์ด๋ ์ ๋์ ์๊ฐ์ ๋ณด๋ธ ์ฌ๋๋ค์ด๋ผ๋ฉด, Kent C. Dodds์ ๋ช ์ฑ์ ๋ํด์๋ ํ ๋ฒ์ฏค์ ๋ค์ด๋ดค์ ๊ฒ์ด๋ค.
์ด ์์์ ๊ธฐ์ ์ ์ธ ๋ด์ฉ๋ณด๋ค๋ '์ต์ ๊ธฐ์ ์ต๋์ ์ํ ์ข์ ๋ฐฉ๋ฒ', '๊ฐ๋ฐ์์๊ฒ ๊ฐ์ฅ ์ค์ํ ์ ' ๋ฑ์ ๋ํ ์ง๋ฌธ๋ค์ ํตํ ๋ต๋ณ์ ํตํด Kent C. Dodds์ ์๊ฐ์ ์ฟ๋ณผ ์ ์๋ค.
React ๋ฆฌํฉํ ๋ง, 10๋ ๋์ ๋ฆฌ๋๋ถ์ค ์น๋ OK

์ค๋๋๊ณ ๋ก์ ๊ธฐ์ ์คํ์ผ๋ก ์ด๋ฃจ์ด์ง ๋๊ท๋ชจ์ ํ๋ก์ ํธ๋ฅผ ์์ฆ์ ๊ธฐ์ ์คํ์ผ๋ก ๋ฆฌํฉํ ๋งํ๋ ์์ ์ ๊ณ ๋ฏผํด์ผ ํ ์ ์ด ์ ๋ง ๋ง๋ค. ์ด ๊ธ์ ์์ ๊ฐ์ ์ํฉ์์ ์ด๋ค ๊ณ ๋ฏผ์ ํ๊ณ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ด๊ฒ์ ํด๊ฒฐํ๋์ง, ์ฌ๋ฌ ์ธก๋ฉด์์ ๋ฆฌํฉํ ๋ง ๋ ธํ์ฐ๋ฅผ ์ ์ํ๊ณ ์๋ค.
JavaScript์์๋ SOLID ์์น์ด ํตํ ๊น?
๊ฐ์ฒด์งํฅ ์ํํธ์จ์ด ์ค๊ณ ์์น์ ์์ด SOLID๋ ์ ์ง ๋ณด์๊ฐ ์ฝ๊ณ ํ์ฅ์ด ์ฉ์ดํ ์์คํ ์ ๋ง๋ค๊ณ ์ ํ ๋ ๊ณ ๋ฏผํด ๋ด์ผ ํ๋ ์์น ์ค์ ํ๋์ด๋ค. ํ์์ด ๊ฐ์ฒด์งํฅ์ ๊ธฐ๋ฐ์ผ๋ก ๋์ด ์๊ธฐ ๋๋ฌธ์ JavaScript์ ์ ์ฉํ๊ธฐ ์ ๋งค๋ชจํธํ ๋ถ๋ถ๋ค์ ๋ํด ์๋์ ์ค์ ์ ๋์ด ์ฝ๋์ ํจ๊ป ์ค๋ช ํ๋ค.
ํํ ๋ฆฌ์ผ
10 Popular JavaScript methods implemented from scratch
JavaScript์์ ์์ฃผ ์ฌ์ฉ๋๋ 10๊ฐ์ ๋ฉ์๋๋ค์ ์ง์ ์ฒ์๋ถํฐ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ฉฐ, ์ด๋ฅผ ํตํด ๊ฐ๊ฐ์ ๋ฉ์๋๋ค์ด ๋ด๋ถ์์ ์ด๋ป๊ฒ ๋์ํ๋์ง๋ฅผ ์กฐ๊ธ ๋ ๊น๊ฒ ์ดํดํ ์ ์์ ๊ฒ์ด๋ค.
์ผ๋ก๋ก Array.prototype.map()
์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํํ ์ ์๋ค.
const fakeMap = function (callback) {
const newArray = [];
// 'this' refers to the array
for (let i = 0; i < this.length; i++) {
newArray[i] = callback(this[i], i);
}
return newArray;
};
Array.prototype.fakeMap = fakeMap;
[1, 2, 3].fakeMap((n) => n + 1); // output [2, 3, 4]
Create Your Own Live Browser Refresh In Deno
์ด์ ๊ฐ๋ฐ ํ๊ฒฝ์์ HMR๊ณผ ๊ฐ์ด ์ฝ๋ ๋ณ๊ฒฝ์ ๊ฐ์งํ๊ณ ๋ณํ๋ฅผ ๋ฐ์ํ๊ธฐ ์ํด ์๋์ผ๋ก ์๋ก ๊ณ ์นจํด ์ฃผ๋ ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ ์ด ๋์๋ค. ํน์ ์ด ๊ณผ์ ์ ๋ํด ๊ถ๊ธํ๋ ์ ์ด ์์๋๊ฐ?
์ด ํํ ๋ฆฌ์ผ์ Deno์์ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋์ผ๋ก ์๋ก ๊ณ ์นจ๋๋ ๊ธฐ๋ณธ์ ์ธ ํ๊ฒฝ ๊ฐ๋ฐ์ ์๊ฐํ๋ค.
structuredClone(): deeply copying objects in JavaScript
JavaScript์์ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ spread ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ spread ์ฐ์ฐ์๋ ์ต์์ ๋ ๋ฒจ์ ๋ณต์ฌํ์ง๋ง, ์์ฑ ๊ฐ๋ค์ ๊ณต์ ๋๋ ์์(shallow) ๋ณต์ฌ๋ฅผ ์ํํ๋ค.
const obj = {id: 'e1fd960b', values: ['a', 'b']};
const clone1 = {...obj};
clone1.id = 'yes';
clone1.values.push('x');
obj.id; // 'e1fd960b'
obj.values; // ['a', 'b', 'x']
ECMAScript์ ๊ณต์ ๋ช
์ธ์ ํฌํจ๋์ด ์์ง ์์ง๋ง(ํฌํจ์ ๋ํ ๋
ผ์๋ ์งํ),
๋๋ค์์ ํ๋ซํผ(Chrome 98, Safari 137 (TP), Firefox 94, Node.js 17, Deno 1.14)๋ค์ด ์ง์ํ๋ ์ ์ญ ๋ฉ์๋์ธ structuredClone()
์ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด์ ๊น์(deep) ๋ณต์ฌ๊ฐ ๊ฐ๋ฅํ๋ค.
const obj = {id: 'e1fd960b', values: ['a', 'b']};
const clone2 = structuredClone(obj); // ๊น์ obj ๊ฐ์ฒด์ ๋ณต์ฌ
Make an OS with ReactJS & Next.js
๋ฐ์คํฌํฑ ํ๊ฒฝ์ React์ Next.js๋ฅผ ์ฌ์ฉํด ๋ธ๋ผ์ฐ์ ์์ ๊ตฌํํ daedalOS ํ๋ก์ ํธ ๊ฐ๋ฐ์ ๋ผ์ด๋ธ ์ฝ๋ฉ์ผ๋ก ํ๋์ฉ ์์ฑํด ๊ฐ๋ ๊ณผ์ ์ ํ์ธํด ๋ณผ ์ ์๋ค.
์ฝ๋์ ๋๊ตฌ
PptxGenJS
MS PowerPoint, Apple Keynote์ ํธํ๋๋ OOXML(Open Office XML) ํฌ๋งท์ ํ๋ ์ ํ ์ด์ ์ ๋ง๋ค ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
import pptxgen from "pptxgenjs";
// 1. Create a new Presentation
let pres = new pptxgen();
// 2. Add a Slide
let slide = pres.addSlide();
// 3. Add one or more objects (Tables, Shapes, Images, Text and Media) to the Slide
let textboxText = "Hello World from PptxGenJS!";
let textboxOpts = { x: 1, y: 1, color: "363636" };
slide.addText(textboxText, textboxOpts);
// 4. Save the Presentation
pres.writeFile();
The Component Gallery
์ปดํฌ๋ํธ ๊ธฐ๋ฐ์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ฐ๋ฐ์ ์ฐธ๊ณ ํ ์ ์๋ ๋ค์ํ ์ปดํฌ๋ํธ๋ค๊ณผ ๋์์ธ ์์คํ ๋ค์ ๋ชจ์๋์ ๊ณณ์ด๋ค.
CSS Layout Generator
๊ฐ๋จํ๊ฒ ํ์ด์ง ๋ ์ด์์ ๊ตฌ์ฑ์ ๋ง๋ค ์ ์๋๋ก ๋์์ฃผ๋ ์จ๋ผ์ธ ๋๊ตฌ
RxDB
RxDB(Reactive Databse)๋ ๋ค์ํ ํํ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก, ์ฌ๊ธฐ์ 'Reactive'๋ ํ์ฌ ์ํ๋ฅผ ์ง์ํ ์ ์์ ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ์ํ ๋ณํ์ ๋ํ ๊ตฌ๋ ๋ ๊ฐ๋ฅํ๋ค.
Responsive Viewer
ํฌ๋กฌ ๊ฐ๋ฐ ํด์๋ ๋ทฐ ์ฌ์ด์ฆ๋ฅผ ์กฐ์ ํ ์ ์์ง๋ง ์ด ํฌ๋กฌ ์ต์คํ ์ ์ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ํ ํ๋ฉด์ ํ๊บผ๋ฒ์ ๋ณผ ์ ์๋ค. ์์ ์ด ๋ง๋ ์๋น์ค๊ฐ ๋ค์ํ ํ๊ฒฝ์์ ์ด๋ป๊ฒ ๋ณด์ด๋์ง ๋ณด๊ณ ์ถ๋ค๋ฉด ์ด ํฌ๋กฌ ์ต์คํ ์ ์ ์ด์ฉํด ๋ณด๊ธธ ๋ฐ๋๋ค.
PrinceJS
ํ๋ฅด์์ ์์๋ผ๋ PC ๊ฒ์ ์ด์ฐฝ๊ธฐ(90๋ ์ด)์ ์ธ๊ธฐ๋ฅผ ๋จ์ณค๋ ๊ฒ์์ JavaScript๋ก ๊ตฌํํ๋ค. PC ๊ฒ์ ์ถ์ต๊ณผ ํจ๊ป JavaScript์ ์ ํ๋ ฅ์ ํจ๊ป ๋๊ปด๋ณด๊ธฐ ๋ฐ๋๋ค.

[์ฐธ๊ณ ] ์ ๊ฒ์ ๊ฐ๋ฐ์์ธ ์กฐ๋ ๋งคํฌ๋๊ฐ ํ๋ฅด์์ ์์๋ฅผ ํฌํจ, ์์ ์ด ๊ฐ๋ฐํ๋ ๊ฒ์๋ค์ ๋ํ ๊ฐ๋ฐ์ผ์ง๋ฅผ ์ผ๊ธฐ ํ์์ผ๋ก ๊ธฐ๋กํ ์ฑ ์ ๋ฐ๊ฐํ๊ธฐ๋ ํ๋ค.
fx
CLI์์ JSON ๊ฐ์ฒด๋ฅผ ์์ฝ๊ฒ ๋ค๋ฃฐ ์ ์๋ ๋๊ตฌ
Epub.js
์ ์์ฑ ํฌ๋งท์ธ ePub ๋ฌธ์๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ๋ ๋๋ง ํ ์ ์๊ฒ ํ๋ค.