๐ฐ๐ท ๊นํ๋ธ ์คํ(๊ตญ๋ด) โ ํ๊ตญ ๊ฐ๋ฐ์ ์คํ์์ค TOP 30 โ
ํ๊ตญ ๊ฐ๋ฐ์๋ค์ด ๋ง๋ค์ด ์ ์ธ๊ณ์ ๊ตญ๋ด ๊ฐ๋ฐ ์ํ๊ณ์ ๋จ๊ฑฐ์ด ํธ์์ ๋ฐ์ ์คํ์์ค ํ๋ก์ ํธ 30์ ์ ๋๋ค. ์ด ํ๋ก์ ํธ๋ค์ ํ๊ตญ์ ์ ๋ฌด ํ๊ฒฝ, ๊ฒฐ์ ์์คํ , ์๋น์ค ๊ธฐํ ํน์ง ๋ฑ์ ์ ๋ด๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ๋๋ผ ๊ฐ๋ฐ์ ์ ๋ฐฐ๋ค์ ์๊ฐ๊ณผ ์ฝ๋ฉ ์คํ์ผ์ ๋ฒค์น๋งํนํ ์ ์๋๋ก ๊ฐ ํ๋ก์ ํธ ๋ถ์์ ํ์ํ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ์ฌ์ ์ง์์ ํจ๊ป ์ ๋ฆฌํ์ต๋๋ค.
1. Kakao Bootpay (๋ถํธํ์ด) ๐ณ โ
ํ๊ตญ ๊ฒฐ์ ํ๊ฒฝ์ ์ต์ ํ๋ ํตํฉ ๊ฒฐ์ SDKGitHub: bootpay/bootpay-javascript
์นด๋, ๊ฐ์๊ณ์ข, ์นด์นด์คํ์ด, ํ ์คํ์ด ๋ฑ ๋ณต์กํ ๊ตญ๋ด PG(๊ฒฐ์ ๋ํ) ์ฐ๋์ ๋จ ๋ช ์ค์ ์ฝ๋๋ก ๊ตฌํํ ์ ์๊ฒ ํด์ฃผ๋ ํตํฉ ๊ฒฐ์ SDK์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): TypeScript, JavaScript, Webpack
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ๊ฒฐ์ ํ๋ฆ(Payment Flow)๊ณผ ์ฝ๋ฐฑ: ํด๋ผ์ด์ธํธ์์ ๊ฒฐ์ ์ฐฝ์ ๋์ด ๋ค, ๊ฒฐ์ ์๋ฃ/์คํจ ์ฌ๋ถ๋ฅผ ์๋ฒ์ ๋น๋๊ธฐ ์ฝ๋ฐฑ์ผ๋ก ์ด๋ป๊ฒ ์ฃผ๊ณ ๋ฐ๊ณ ๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฆํ๋์ง ์ํคํ ์ฒ๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค.
- ํฌ๋ก์ค ๋๋ฉ์ธ๊ณผ iframe: ์ธ๋ถ PG์ฌ์ ๊ฒฐ์ ์ฐฝ ๋ชจ๋ฌ์ ์ฐ๋ฆฌ ์น์ฌ์ดํธ ์์ ๋์ธ ๋ ๋ฐ์ํ๋ ๋๋ฉ์ธ ๊ฐ(Cross-Origin) ํต์ ์ ์ฑ ์ ์ด๋ป๊ฒ ํด๊ฒฐํ๊ณ ์๋์ง ํ์ ํ๋ฉด ์ข์ต๋๋ค.
- ์ด๋ฒคํธ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ (Event-driven): SDK ๋ด๋ถ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๋ฐ์ธ๋ฉํ์ฌ ๊ฒฐ์ ์ํ ๋ณํ๋ฅผ ์ถ์ ํ๋ ํจํด์ ์ดํด๋ด์ผ ํฉ๋๋ค.
- ๐ก ํ์ฉ ํ: ๊ฒฐ์ ์ฐ๋ UI ํ์ ์ DOM ์ฃผ์ ๋ฐฉ์์ ๋ถ์ํ์ฌ, ๊ฒฐ์ ๋ฟ ์๋๋ผ ๋๋ง์ ์ปค์คํ ์ธ์ฆ ๋ชจ๋ฌ์ฐฝ(๋ก๊ทธ์ธ, ๋ณธ์ธ์ธ์ฆ) SDK๋ฅผ ๋ณ๋๋ก ๋ง๋ค์ด ๋ณผ ์ ์์ต๋๋ค.
2. Naver/egjs-flicking ๐ โ
๋ฌดํ ์คํฌ๋กค ์ง์ ๊ณ ์ฑ๋ฅ ์นด๋ ์ฌ๋ผ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌGitHub: naver/egjs-flicking
๋ค์ด๋ฒ FE Platform ํ์ด ๊ฐ๋ฐํ ํ๋ฆฌํน(Flicking) ์นด๋ ์ฌ๋ผ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ๋ชจ๋ฐ์ผ ํ๊ฒฝ์ ํฐ์น ์ ์ค์ฒ๋ฅผ ๋ถ๋๋ฝ๊ฒ ์ฒ๋ฆฌํ๋ฉฐ ์์ญ๋ง ๊ฑด์ ๋ค์ด๋ก๋๋ฅผ ๊ธฐ๋กํ๋ ์ค๋ฌด๊ธ ํ๋ก์ ํธ์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): TypeScript, Rollup, Jest, ๋ค์ํ ํ๋ ์์ํฌ ๋ํผ(React, Vue, Angular)
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ํฐ์น ๋ฐ ํฌ์ธํฐ ์ด๋ฒคํธ: ๋ธ๋ผ์ฐ์ ์
touchstart,touchmove,touchend์pointer์ด๋ฒคํธ๋ฅผ ์ด์ฉํด ์ฌ์ฉ์์ ์๊ฐ๋ฝ ๋๋๊ทธ ๊ถค์ ๊ณผ ์๋๋ฅผ ๊ณ์ฐํ๋ ๋ฌผ๋ฆฌํ์ ๋ก์ง์ ์ดํดํด์ผ ํฉ๋๋ค. - ๊ด์ฑ(Inertia) ์คํฌ๋กค ์ ๋๋ฉ์ด์
: ์๊ฐ๋ฝ์ ๋์ ๋ ๋ฉ์ถ์ง ์๊ณ ๊ฐ์๋์ ๋ฐ๋ผ ๋ฏธ๋๋ฌ์ง๋ฏ ๋ฉ์ถ๋ ์ ๋๋ฉ์ด์
์ ์ํ์ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ(
requestAnimationFrameํ์ฉ)์ ์ดํด๋ณด์ธ์. - ํ๋ ์์ํฌ Agnostic ์ค๊ณ: ์ฝ์ด ๋ก์ง์ ์์ JS๋ก ์์ฑํ๊ณ , ์ด๋ฅผ React๋ Vue์ฉ ๋ํผ๋ก ์ด๋ป๊ฒ ํฌ์ฅํ์ฌ ์ ๊ณตํ๋์ง ์ํคํ ์ฒ ๊ตฌ์กฐ๋ฅผ ํ์ตํด์ผ ํฉ๋๋ค.
- ํฐ์น ๋ฐ ํฌ์ธํฐ ์ด๋ฒคํธ: ๋ธ๋ผ์ฐ์ ์
- ๐ก ํ์ฉ ํ:
@egjs/react-flicking์์ ์ฝ๋๋ฅผ ๋ฐํ์ผ๋ก ์ค์์ดํ ๊ธฐ๋ฅ์ด ๋ค์ด๊ฐ ํด๋(Tinder) ์คํ์ผ์ ๋ฐ์ดํ /์ํ ๋งค์นญ ์ฑ UI๋ฅผ ํ ์ด ํ๋ก์ ํธ๋ก ๊ตฌํํด ๋ณด์ธ์.
3. Naver/billboard.js ๐ โ
D3.js ๊ธฐ๋ฐ์ ๋ชจ๋ ์ธํฐ๋ํฐ๋ธ ์ฐจํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌGitHub: naver/billboard.js
๋ค์ด๋ฒ๊ฐ ๊ณผ๊ฑฐ ์ ํํ๋ C3.js๋ฅผ ํ๋ ํฌํฌํ์ฌ TypeScript์ ๋ชจ๋ ํ๊ฒฝ์ ๋ง๊ฒ ์ ๊ทธ๋ ์ด๋ํ D3.js ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ์๊ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): TypeScript, D3.js v6+, SCSS, Webpack
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- D3.js์ Enter-Update-Exit ํจํด: ๋ฐ์ดํฐ์ ๋ฐฐ์ด ๊ธธ์ด์ ๋ง์ถฐ SVG DOM ์์๋ฅผ ์์ฑ, ์์ , ์ญ์ ํ๋ D3 ๊ณ ์ ์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ์ฒ ํ์ ๋ฐ๋์ ์ ํ ํ์ตํด์ผ ํฉ๋๋ค.
- SVG ์ขํ๊ณ ๋ฐ ํธ๋์คํผ: ํฝ์
์ด ์๋ ๋ฒกํฐ ๊ธฐ๋ฐ์ผ๋ก ์ , ์, ๋ค๊ฐํ์ ๊ทธ๋ฆฌ๊ธฐ ์ํ SVG์
path,d์์ฑ ์ฐ์ฐ๊ณผviewBox๊ฐ๋ ์ ์์งํด์ผ ํฉ๋๋ค. - ์ด๋ฒคํธ ์์๊ณผ ํดํ: ์์ฒ ๊ฐ์ ์ฐจํธ ๋ฐ์ดํฐ ํฌ์ธํธ์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ ธ์ ๋ ์ฑ๋ฅ ์ ํ ์์ด ํดํ์ ๋์ฐ๋ ์ด๋ฒคํธ ์์(Event Delegation) ์ฒ๋ฆฌ ๊ธฐ๋ฒ์ ๋์ฌ๊ฒจ๋ณด์ธ์.
- ๐ก ํ์ฉ ํ: ์ค์๊ฐ ์ฃผ์ ๊ฐ๊ฒฉ์ด๋ ๊ฐ์ํํ ์์ธ๋ฅผ ์น์์ผ์ผ๋ก ๋ฐ์, ์ค์๊ฐ์ผ๋ก ๊ฐฑ์ ๋๋ ๋์๋ณด๋ ํธ๋ ์ด๋ฉ ์ฐจํธ๋ฅผ ๊ตฌํํด ๋ณด๋ฉด D3์ ๋น๋๊ธฐ ๋ฐ์ดํฐ์ ์ตํฉ์ ๋ง์คํฐํ ์ ์์ต๋๋ค.
4. kakao-clone (by ๋ฐํ) ๐ฌ โ
์นด์นด์คํก UI๋ฅผ ๊ทธ๋๋ก ๊ตฌํํ ํด๋ก ์ฝ๋ฉ ํ๋ก์ ํธGitHub: nomadcoders/kakao-clone
๊ตญ๋ด ํ๋ก ํธ์๋ ์ ๋ฌธ์๋ค ์ฌ์ด์์ ์ ์ค์ฒ๋ผ ํ์๋๋, HTML๊ณผ CSS๋ง์ผ๋ก ๋ฐ์คํฌํฑ/๋ชจ๋ฐ์ผ ์นด์นด์คํก์ ํฝ์ UI๋ฅผ ์๋ฒฝํ๊ฒ ์ฌํํ ๊ธฐ์ด ํ์ต ํ๋ก์ ํธ์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): HTML5, CSS3, FontAwesome
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- CSS Flexbox Layout: ์น๊ตฌ ๋ชฉ๋ก, ์ฑํ
๋งํ์ , ํ๋จ ๋ค๋น๊ฒ์ด์
๋ฐ ๋ฑ ํ๋ฉด ์์๋ฅผ ์์ง/์ํ์ผ๋ก ์ ์ฐํ๊ฒ ๋ฐฐ์นํ๋
display: flex์ ์ฌํ ์์ฑ๋ค์ ์์ ํ ๊ฟฐ๋ซ์ด์ผ ํฉ๋๋ค. - CSS Position ์์ฑ: ํ๋กํ ์ฌ์ง ์์ ์๋ฆผ ๋ฑ์ง(๋นจ๊ฐ์ N ๋งํฌ) ๋ฑ์ ๋์ฐ๊ธฐ ์ํ
relative,absolute,fixed์ ์์น ์ง์ ์ํธ์์ฉ์ ํ์ ํด์ผ ํฉ๋๋ค. - ๊ฐ์ ์์์ ์ ๋๋ฉ์ด์
:
::before,::after๋ฅผ ์ด์ฉํ ๋งํ์ ๊ผฌ๋ฆฌ ๊ทธ๋ฆฌ๊ธฐ์@keyframes๋ฅผ ํ์ฉํ ์์ฐ์ค๋ฌ์ด ํ์ ์ ํ ์ ๋๋ฉ์ด์ ์ฝ๋๋ฅผ ๋ถ์ํด ๋ณด์ธ์.
- CSS Flexbox Layout: ์น๊ตฌ ๋ชฉ๋ก, ์ฑํ
๋งํ์ , ํ๋จ ๋ค๋น๊ฒ์ด์
๋ฐ ๋ฑ ํ๋ฉด ์์๋ฅผ ์์ง/์ํ์ผ๋ก ์ ์ฐํ๊ฒ ๋ฐฐ์นํ๋
- ๐ก ํ์ฉ ํ: ์นด์นด์คํก์ CSS ๊ตฌ์กฐ๋ฅผ ํ์ ํ ๋ค ์ฝ๋๋ฅผ ๋ชจ๋ ์ง์ฐ๊ณ , ์์ ์ด ์์ฃผ ์ฐ๋ ์ธ์คํ๊ทธ๋จ, ๋น๊ทผ๋ง์ผ, ํ ์ค ์ฑ์ ํน์ ํ๋ฉด์ ํฝ์ ๋จ์๋ก ์ง์ ํด๋ก ํด๋ณด๋ฉฐ ๋ ์ด์์ ๊ฐ๊ฐ์ ํค์๋ณด์ธ์.
5. D2Coding Font ๐๏ธ โ
๊ฐ๋ฐ์๋ฅผ ์ํ ๋๋๊ณ ๋ ๊ธฐ๋ฐ ์ฝ๋ฉ ์ ์ฉ ํฐํธGitHub: naver/d2codingfont
๋ค์ด๋ฒ๊ฐ ๊ฐ๋ฐํ ์ฝ๋ฉ ์ ์ฉ ํฐํธ๋ก, ํ๊ธ ๊ฐ๋ ์ฑ์ ๊ทน๋ํํ๊ณ ์ํ๋ฒณ 'l(์)', 'I(์์ด)', ์ซ์ '1' ๋ฑ์ ์ค๋ ์ ๋ฐฉ์งํ๋๋ก ์ธ์ฌํ๊ฒ ์ค๊ณ๋์์ต๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): FontForge, Python (๋น๋ ์๋ํ ์คํฌ๋ฆฝํธ)
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ํฉ์(Ligature) ๊ธฐ๋ฅ:
==,!=,=>๋ฑ์ ํ๋ก๊ทธ๋๋ฐ ๊ธฐํธ๋ฅผ ํ๋์ ์์ ์์ ๊ธฐํธ์ฒ๋ผ ํฉ์ณ์ ๋ ๋๋งํ๋ OpenType ํฐํธ์ ํฉ์ ์ค๊ณ ์๋ฆฌ๋ฅผ ์ดํดํด ๋ณด์ธ์. - ์๋ธ์ (Subset) ํฐํธ์ ๊ฒฝ๋ํ: ๋ถํ์ํ ํ๊ธ ๊ธ๋ฆฌํ๋ฅผ ์ ๊ฑฐํ์ฌ ์น ํฐํธ ์ฉ๋์ ๋ฉ๊ฐ๋ฐ์ดํธ(MB) ๋จ์์์ ํฌ๋ก๋ฐ์ดํธ(KB) ๋จ์๋ก ์ต์ ํํ๋ ๊ณผ์ ์ ์คํฌ๋ฆฝํธ๋ก ์ด๋ป๊ฒ ์๋ํํ๋์ง ์ดํด๋ณด๋ฉด ์ข์ต๋๋ค.
- ํฉ์(Ligature) ๊ธฐ๋ฅ:
- ๐ก ํ์ฉ ํ: D2Coding ํฐํธ๋ฅผ WOFF2 ํ์์ผ๋ก ๋ณํํ ๋ค, ๋ด ๊ธฐ์ ๋ธ๋ก๊ทธ์
<pre><code>๋ธ๋ก CSS ์ค์ ์@font-face๋ก ์ง์ ์ ์ฉํ์ฌ ์ฝ๋ ๊ฐ๋ ์ฑ์ด ๋ฐ์ด๋ ํ๊ตญํ ๊ธฐ์ ๋ธ๋ก๊ทธ๋ฅผ ๋์์ธํด ๋ณด์ธ์.
6. Toss/es-toolkit โ๏ธ โ
ํ๋์ ์ด๊ณ ๊ณ ์ฑ๋ฅ์ธ JavaScript ์ ํธ๋ฆฌํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌGitHub: toss/es-toolkit
ํ ์ค(Toss) ํ๋ก ํธ์๋ ํ์ด ๊ธฐ์กด์ ๋ฌด๊ฑฐ์ด Lodash๋ฅผ ๋์ฒดํ๊ณ ์ ์์ฒด ๊ฐ๋ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ๋ฒ๋ค ์ฌ์ด์ฆ๋ฅผ 97% ์ค์ด๋ฉด์๋ ์คํ ์๋๋ฅผ 2~3๋ฐฐ ๋์ฌ ์ ์ธ๊ณ์ ์ธ ์ฐฌ์ฌ๋ฅผ ๋ฐ์์ต๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): TypeScript, Vitest, TSDoc, GitHub Actions
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- Tree Shaking ์ต์ ํ: ๋ชจ๋ ๋ฒ๋ค๋ฌ(Webpack, Vite ๋ฑ)๊ฐ ์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ฅผ ๋น๋ ๊ณผ์ ์์ ํจ๊ณผ์ ์ผ๋ก ๊ฑท์ด๋ผ ์ ์๋๋ก ES ๋ชจ๋ ์์คํ ์ผ๋ก ์์ ํจ์๋ฅผ ์ค๊ณํ๋ ๊ธฐ๋ฒ์ ๊น์ด ํ๊ณ ๋ค์ด์ผ ํฉ๋๋ค.
- TypeScript ํ์ ์ถ๋ก ๊ทน๋ํ: ์ ๋ค๋ฆญ(Generic)๊ณผ ์กฐ๊ฑด๋ถ ํ์ (Conditional Types)์ ์ ๊ทน ํ์ฉํ์ฌ ๊ฐ๋ฐ์๊ฐ IDE์์ ์๋ฒฝํ ์๋์์ฑ๊ณผ ํ์ ์๋ฌ ๊ฒ์ฌ๋ฅผ ๋ฐ๊ฒ ํด์ฃผ๋ ๊ณ ๊ธ ํ์ ์ ์ธ ๊ธฐ์ ์ ํ์ตํด์ผ ํฉ๋๋ค.
- V8 ์์ง ์ต์ ํ ์๋ฆฌ: ๋ฃจํ ๋ฐฉ์์ด๋ ๋ฐฐ์ด ํ ๋น ๋ฐฉ์์ ์ด๋ป๊ฒ ์์ ํ์ ๋ ๋ธ๋ผ์ฐ์ ์์ง(V8)์ด ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ํ์ฑํ๊ณ ์คํํ๋์ง ์๋ฐ์คํฌ๋ฆฝํธ์ ์จ๊ฒจ์ง ํผํฌ๋จผ์ค ์ด์๋ฅผ ๋ฐฐ์ธ ์ ์์ต๋๋ค.
- ๐ก ํ์ฉ ํ:
chunk,debounce,throttle๋ฑ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ํจ์๋ค์ ๋ด๋ถ ๊ตฌํ์ฒด๋ฅผ ๋ค์ฌ๋ค๋ณด๊ณ , ๋๋ง์ ์ฌ์ด๋ ํ๋ก์ ํธ์ฉ ๋ฏธ๋ ์ ํธ๋ฆฌํฐ ํจํค์ง๋ฅผ npm์ ์ง์ ๋ฐฐํฌํด ๋ณด๋ ๊ฒฝํ์ ์์๋ณด์ธ์.
7. Toss/slash ๐ ๏ธ โ
ํ ์ค ์๋น์ค ๊ฐ๋ฐ์์ ์ถ์ถ๋ React/TypeScript ๋ชจ๋ ธ๋ ํฌGitHub: toss/slash
ํ ์ค ํ์ด ์๋ง์ ์น ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๋ฉฐ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ React ํ , ์ ํธ๋ฆฌํฐ ํจ์, TypeScript ํฌํผ ๋ชจ๋ ๋ฑ์ ๋ชจ์ ์คํ์์คํํ ๊ฑฐ๋ํ ๋ชจ๋ ธ๋ ํฌ ํ๋ก์ ํธ์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): React, TypeScript, Turborepo, Yarn Berry, Jest
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ์๋ฌ ๋ฐ์ด๋๋ฆฌ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ(Suspense): ํ ์ค๋ ์ ์ธ์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ ๊ทน ํ์ฉํฉ๋๋ค.
@toss/error-boundary์ Suspense๋ฅผ ๊ฒฐํฉํ์ฌ ๋ก๋ฉ ์ํ์ ์๋ฌ ํ๋ฉด์ ์ปดํฌ๋ํธ ๋ ๋ฒจ์์ ์ฐ์ํ๊ฒ ์ฒ๋ฆฌํ๋ ์ฒ ํ์ ์ดํดํด์ผ ํฉ๋๋ค. - ๋ชจ๋ ธ๋ ํฌ(Monorepo) ์ํคํ ์ฒ: ์์ญ ๊ฐ์ ๋ ๋ฆฝ๋ ํจํค์ง๊ฐ ํ๋์ ์ ์ฅ์์์ ์ด๋ป๊ฒ ์์กด์ฑ์ ๊ณต์ ํ๊ณ Turborepo๋ฅผ ํตํด ์ด๊ณ ์์ผ๋ก ๋น๋๋๋์ง ๊ฑฐ์์ ์ธ ์ธํ๋ผ ๊ตฌ์กฐ๋ฅผ ๋ถ์ํด ๋ณด์ธ์.
- Compound Component ํจํด:
@toss/use-overlay๋ ๊ฐ์ข UI ์ปดํฌ๋ํธ๋ค์ด ์ด๋ป๊ฒ ์ํ๋ฅผ ์บก์ํํ๊ณ ์ ์ฐํ ํ์ฅ์ ์ ๊ณตํ๋์ง React ๊ณ ๊ธ ๋์์ธ ํจํด์ ํ์ตํ ์ ์์ต๋๋ค.
- ์๋ฌ ๋ฐ์ด๋๋ฆฌ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ(Suspense): ํ ์ค๋ ์ ์ธ์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ ๊ทน ํ์ฉํฉ๋๋ค.
- ๐ก ํ์ฉ ํ: ํ ์ค์ ์ ์ธ์ ์ค๊ณ ๋ฐฉ์์ ์ฐธ๊ณ ํ์ฌ, ํ์ฌ ์งํ ์ค์ธ React ํ๋ก์ ํธ์ ์คํ๊ฒํฐ ๋น๋๊ธฐ ์ฝ๋(์๋ง์ if-else ๋ก๋ฉ ์ฒดํฌ)๋ฅผ Suspense์ ErrorBoundary ๊ธฐ๋ฐ์ ๊น๋ํ ๊ตฌ์กฐ๋ก ๋ฆฌํฉํ ๋งํด ๋ณด์ธ์.
8. Kakao/react-query-toolkit ๐ (kakao.maps.sdk ์ปค๋ฎค๋ํฐ ๋ํผ) โ
์นด์นด์ค ๋งต API ์ฐ๋ ๋ฐ React ์ ์ธ์ ๋ํผGitHub: JaeSeoKim/kakao.maps.sdk (์ ์ฌ ์ปค๋ฎค๋ํฐ ๋ํผ ๊ธฐ์ค ์ค๋ช )
ํ๊ตญ ๊ฐ๋ฐ์๋ผ๋ฉด ํผํด๊ฐ ์ ์๋ '์นด์นด์ค๋งต API'๋ฅผ ์์ ๋ฐ๋๋ผ JS๊ฐ ์๋ React ์ํ๊ณ์ ์ ์ธ์ ๋ฌธ๋ฒ๊ณผ React Query ๋ฑ์ ํ์ฉํด ์ด๋ป๊ฒ ์ฐ์ํ๊ฒ ๋ํํ ์ ์๋์ง ๋ณด์ฌ์ฃผ๋ ๋ชจ๋ฒ ์ฌ๋ก์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): React, TypeScript, Kakao Map SDK
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ์๋ํํฐ DOM ์ ์ด์ React ๋ผ์ดํ์ฌ์ดํด์ ์ถฉ๋: React์ Virtual DOM์ด ์๋ ์ง๋์ ์ค์ DOM ์กฐ์ ๋ก์ง์ด
useEffect๋ผ์ดํ์ฌ์ดํด ๋ด์์ ์ด๋ป๊ฒ ์ด๊ธฐํ๋๊ณ ํ๊ดด(Cleanup)๋๋์ง ์์งํด์ผ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ง์ ์ ์์ต๋๋ค. - ์ ์ธ์ ์ปดํฌ๋ํธ ๋ํ(Wrapper) ๊ธฐ๋ฒ:
new kakao.maps.Marker()ํํ์ ๋ช ๋ นํ ์ฝ๋๋ฅผ<MapMarker position={...} />๋ผ๋ ํํ์ React ์ ์ธ์ ์ปดํฌ๋ํธ๋ก ํฌ์ฅํ๋ ์ค๊ณ ํจํด์ ๋์ฌ๊ฒจ๋ณด์ธ์. - ์ ์ญ ์คํฌ๋ฆฝํธ ๋น๋๊ธฐ ๋ก๋ฉ: ์ธ๋ถ์์ ๊ฐ์ ธ์ค๋ ์ง๋ SDK ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ก๋๋๊ธฐ ์ ์ React ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ๋ ๋ฐ์ํ๋ ํ์ด๋ฐ ์ด์๋ฅผ ํด๊ฒฐํ๋ ํ ์ค(Hooks) ๋ก์ง์ ๋ถ์ํด์ผ ํฉ๋๋ค.
- ์๋ํํฐ DOM ์ ์ด์ React ๋ผ์ดํ์ฌ์ดํด์ ์ถฉ๋: React์ Virtual DOM์ด ์๋ ์ง๋์ ์ค์ DOM ์กฐ์ ๋ก์ง์ด
- ๐ก ํ์ฉ ํ: ์ด ๋ํผ์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ๊ณต๊ณต๋ฐ์ดํฐ ํฌํธ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ง๋ ์์ ์๊ฐํํ๋ ๋๋ค ๋ง์ง ์ง๋, ํน์ ๋ถ๋์ฐ ์ค๊ฑฐ๋๊ฐ ๋งค๋ฌผ ์ง๋ ์ฑ์ ๊ฐ๋ฐํด ํฌํธํด๋ฆฌ์ค๋ฅผ ์ฑ์๋ณด์ธ์.
9. NHN/toast-ui.editor โ๏ธ โ
๋งํฌ๋ค์ด๊ณผ WYSIWYG์ ๋์ ์ง์ํ๋ ๊ฐ๋ ฅํ ์น ์๋ํฐGitHub: nhn/tui.editor
NHN์ด ๊ฐ๋ฐํ ์๋ํฐ๋ก, ๊ฐ๋ฐ์ ์นํ์ ์ธ ๋งํฌ๋ค์ด ํธ์ง ๋ชจ๋์ ๋น๊ฐ๋ฐ์๋ฅผ ์ํ WYSIWYG(์์ง์ ) ๋ชจ๋๋ฅผ ๋ฒํผ ํ๋๋ก ์์ฐ์ค๋ฝ๊ฒ ์ ํํ๋ฉฐ ์ธ ์ ์๋ ๊ณ ๊ธ ํ ์คํธ ์๋ํฐ์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): TypeScript, ProseMirror, Markdown-it
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ (AST): ๋งํฌ๋ค์ด ํ ์คํธ๊ฐ ์ด๋ป๊ฒ AST ๋ ธ๋ ๊ตฌ์กฐ๋ก ํ์ฑ๋๊ณ , ์ด๋ฅผ ๋ฐํ์ผ๋ก HTML ์์๊ฐ ๋ ๋๋ง๋๋์ง ์ปดํ์ผ๋ฌ ๊ธฐ์ด ์ด๋ก ์ ์ดํดํด์ผ ์๋ํฐ ์ปค์คํฐ๋ง์ด์ง์ด ๊ฐ๋ฅํฉ๋๋ค.
- ProseMirror ์ฝ์ด ์ํคํ ์ฒ: ์์ง์ ์๋ํฐ๊ณ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ ProseMirror์ State, View, Schema, Transaction ๊ฐ๋ ์ ์ดํดํด์ผ ํ๋ฌ๊ทธ์ธ์ ๊ฐ๋ฐํ๊ฑฐ๋ ๋์์ ๋ฏ์ด๊ณ ์น ์ ์์ต๋๋ค.
- ์ด๋ฒคํธ ๊ธฐ๋ฐ ํ๋ฌ๊ทธ์ธ ์์คํ : ์ฐจํธ ์ฝ์ , ํ ๋ณํฉ ๋ฑ ํ์ฅ ๊ธฐ๋ฅ๋ค์ด ์๋ํฐ ์ฝ์ด ์์คํ ์ ์ด๋ป๊ฒ ํ๋ฌ๊ทธ์ธ ํํ๋ก ์ฃผ์ ๋๊ณ ์คํ๋๋์ง ๊ด์ฐฐํด ๋ณด์ธ์.
- ๐ก ํ์ฉ ํ: ์ด๋ฏธ์ง ๋ณต์ฌ+๋ถ์ฌ๋ฃ๊ธฐ ์ ์๋์ผ๋ก AWS S3๋ก ์ ๋ก๋๋๋ ์ปค์คํ ํ๋ฌ๊ทธ์ธ์ ์ง์ ๊ฐ๋ฐํ์ฌ ๋ถ์ฌ๋ณด๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ๋ด ๊ณต์ ์ฉ ๋งํฌ๋ค์ด ์ํค ํ์ด์ง ๊ฒ์ํ์ ํ์คํ์ผ๋ก ๋ง๋ค์ด ๋ณด์ธ์.
10. Yorkie (์ผํค) ๐ถ โ
์นด์นด์ค๊ฐ ๋ง๋ ์คํ์์ค ๋ถ์ฐ ๋ฌธ์ ๋์ ํธ์ง ํ๋ซํผGitHub: yorkie-team/yorkie
์นด์นด์ค์ ์์ง๋์ด๋ค์ด ์ฃผ์ถ์ด ๋์ด ๊ฐ๋ฐํ CRDT(Conflict-free Replicated Data Type) ๊ธฐ๋ฐ์ ๋ถ์ฐ ๋ฐ์ดํฐ ๋๊ธฐํ ์์ง์ ๋๋ค. Google Docs์ฒ๋ผ ์ฌ๋ฌ ๋ช ์ด ๋์์ ๋ฌธ์๋ฅผ ํธ์งํ๋ ๊ธฐ๋ฅ์ ๋ด ์ฑ์ ์ฝ๊ฒ ํ์ฌํ ์ ์์ต๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): Go (๋ฐฑ์๋ ์๋ฒ), TypeScript (ํด๋ผ์ด์ธํธ SDK), gRPC
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- CRDT ๋ถ์ฐ ์๊ณ ๋ฆฌ์ฆ: ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ์คํ๋ผ์ธ ์ํ์์ ์ ๊ฐ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ๋ค ์๋ฒ์ ์ฐ๊ฒฐ๋์ด๋, ์ถฉ๋(Conflict) ์์ด ๋์ผํ ๊ฒฐ๊ณผ๋ฌผ์ ๋์ถํด๋ด๋ CRDT ์ํ์ /์๋ฃ๊ตฌ์กฐ์ ์ด๋ก (์: Logical Clock)์ ๊ผญ ํ์ตํด์ผ ํฉ๋๋ค.
- WebSocket ๋ฐ gRPC ์คํธ๋ฆฌ๋ฐ: ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ง์ฐ ์๋ ์ค์๊ฐ ์๋ฐฉํฅ ๋ฐ์ดํฐ ํต์ ์ด ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋์ง ๋คํธ์ํฌ ํ๋กํ ์ฝ ๊ณ์ธต์ ๋ํ ์ดํด๊ฐ ํ์ํฉ๋๋ค.
- ์คํ๋ผ์ธ ํผ์คํธ(Offline-First): ๋คํธ์ํฌ๊ฐ ๋๊ธด ์ํฉ์์๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ๋ณ๊ฒฝ ์ฌํญ์ ๋์ (Document Replica)์์ผฐ๋ค๊ฐ ์ฐ๊ฒฐ ์ ๋ณํฉํ๋ ์ค๊ณ ์ฒ ํ์ ์ดํดํด ๋ณด์ธ์.
- ๐ก ํ์ฉ ํ: Yorkie JS ํด๋ผ์ด์ธํธ SDK๋ฅผ ์ฐ๋ํ์ฌ, ํ์๋ค์ด ๋ธ๋ผ์ฐ์ ์์์ ์ค์๊ฐ์ผ๋ก ๋ง์ฐ์ค ์ปค์๋ฅผ ๊ณต์ ํ๋ฉฐ ๊ธ์ ์์ฑํ๋ ์ค์๊ฐ ํ์ ๋ฉ๋ชจ์ฅ์ด๋ ์์ด๋์ด ํ์ดํธ๋ณด๋ ์ฑ์ ํ ์ด ํ๋ก์ ํธ๋ก ๊ตฌ์ถํด ๋ณด์ธ์.
11. Naver Pinpoint ๐ โ
๋๊ท๋ชจ ๋ถ์ฐ ์์คํ ์ฉ ์ค์๊ฐ APM(์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ๊ด๋ฆฌ) ํ๋ซํผGitHub: pinpoint-apm/pinpoint
๋ค์ด๋ฒ๊ฐ ์คํ์์คํํ ์ด๋ํ ๋ถ์ฐ ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ก, ์๋ง์ ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ์ ํธ๋์ญ์ ํ๋ฆ์ ์๊ฐํํ๊ณ ์ฑ๋ฅ ๋ณ๋ชฉ ๊ตฌ๊ฐ์ ์ ํํ๊ฒ ์ง์ด์ฃผ๋ ๊ธ๋ก๋ฒ ํํฐ์ด APM ์๋ฃจ์ ์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): Java, HBase (๋ฐ์ดํฐ ๋ถ์ฐ ๋ณด๊ด), ZooKeeper, Spring
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ์๋ฐ ์์ด์ ํธ(Bytecode Instrumentation): ๋์ ์์ค์ฝ๋๋ฅผ ํ ์ค๋ ๊ณ ์น์ง ์๊ณ ์ปดํ์ผ๋ ์๋ฐ ํด๋์ค ํ์ผ์ด JVM์ ๋ก๋๋ ๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋์ ์ผ๋ก ์ฃผ์ /๋ณํํ๋ JVM Agent ๋์ ๊ธฐ๋ฒ์ ์ดํดํด์ผ ํฉ๋๋ค.
- ๋ถ์ฐ ํธ๋์ญ์ ์ถ์ (Span/Trace ID): ์ฌ๋ฌ ๋ ๋ฆฝ๋ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ํต๊ณผํ๋ HTTP ์์ฒญ์ ๊ณ ์ ํ Trace ํค๋๋ฅผ ์ฌ์ด ํธ์ถ ํ๋ฆ์ ํ๋๋ก ์ฎ๋ ๋ถ์ฐ ์ถ์ ํ์ค ์คํ์ ์์์ผ ํฉ๋๋ค.
- ๐ก ํ์ฉ ํ:
docker-compose๋ฅผ ํตํด ๋ก์ปฌ ํ๊ฒฝ์ Pinpoint ์ฝ๋ ํฐ ๋ฐ HBase๋ฅผ ๊ฐ๋ํ๊ณ , ์งํ ์ค์ธ ์คํ๋ง๋ถํธ ์ผํ๋ชฐ ์๋ฒ์ ์๋ฐ ์์ด์ ํธ๋ก ์ฐ๋ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ํธ์ถ ์๊ฐ ๋ฐ ์ฑ๋ฅ ๋ก๊ทธ ๋ถ์์ ์ค์ตํด ๋ณด์ธ์.
12. Line Armeria ๐ฆ โ
๊ณ ์ฑ๋ฅ ๋น๋๊ธฐ ๋ง์ดํฌ๋ก์๋น์ค ์น ํ๋ ์์ํฌGitHub: line/armeria
๋ผ์ธ(LINE) ํ์ด Netty ์์ง ์์์ ๊ตฌ์ถํ์ฌ ๋ฐฐํฌํ ๊ณ ์ฑ๋ฅ ํต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ํ๋์ ํฌํธ๋ก REST, gRPC, Thrift ๋ฑ ๋ค์ํ ํ๋์ ๋คํธ์ํฌ ํ๋กํ ์ฝ์ ๋์์ ๋น๋๊ธฐ ๋ ผ๋ธ๋กํน์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ๊ฐ๋ ฅํ ์๋ฒ ์์ง์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): Java, Netty, HTTP/2, gRPC
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ๋น๋๊ธฐ ์ด๋ฒคํธ ๋ฃจํ (Event Loop): ์ฐ๋ ๋ ํ๋๊ฐ ์๋ง ๊ฐ์ ์ปค๋ฅ์ ์ ์ ์ดํ๋ Netty์ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ ์ถ๋ ฅ(NIO) ๋ฉ์ปค๋์ฆ๊ณผ ์ปจํ ์คํธ ์ค์์นญ ๋น์ฉ ์ต์ ํ ์๋ฆฌ๋ฅผ ์์งํด์ผ ํฉ๋๋ค.
- ๋ฆฌ์กํฐ๋ธ ์คํธ๋ฆผ์ฆ (Reactive Streams): ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ ์๋๋ฅผ ์กฐ์จํด ์ฃผ๋ ๋ฐฑํ๋ ์
(
Backpressure) ํต์ ๊ธฐ๋ฒ์ ๊น์ด ๋ค๋ฃจ์ด์ผ ํฉ๋๋ค.
- ๐ก ํ์ฉ ํ: ๋จ์ผ ARM ํฌํธ๋ฅผ ์ด์ฉํ์ฌ ์คํ๋ง๋ถํธ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๋ํํ๊ณ , ๋ด๋ถ ์๋ฒ ํต์ ์ ๊ณ ์ ์ด์ง ์ง๋ ฌํ ํ๋กํ ์ฝ์ธ gRPC๋ก ์ฒ๋ฆฌํ๊ณ ์ธ๋ถ ์ฑ ์์ฒญ์ REST API๋ก ๋ ธ์ถํ๋ ํ์ด๋ธ๋ฆฌ๋ ๊ณ ์ ํต์ ๊ฒ์ดํธ์จ์ด๋ฅผ ์ค๊ณํด ๋ณด์ธ์.
13. Klaytn โ๏ธ โ
์นด์นด์ค๊ฐ ์ฃผ๋ํ ์ด๋๋ฆฌ์ ๊ธฐ๋ฐ ๊ณ ์ฑ๋ฅ ์ํฐํ๋ผ์ด์ฆ ๋ธ๋ก์ฒด์ธ ํ๋ซํผGitHub: klaytn/klaytn
์นด์นด์ค์ GroundX๊ฐ ์ต์ด ์ค๊ณํ ๋ค ๊ธ๋ก๋ฒ ์ฌ๋จ์ผ๋ก ํตํฉ๋ ๋ ์ด์ด 1 ๋ฉ์ธ๋ท ํ๋ซํผ์ผ๋ก, ์ด๋๋ฆฌ์์ ๊ฐ์ ๋จธ์ (EVM)์ ๊ทธ๋๋ก ์์ฉํ์ฌ ํธํ์ฑ์ ๋์ด๋ฉด์๋ 1์ด ๋ฏธ๋ง์ ๊ณ ์ ํฉ์์ ํ๊ฒฉ์ ์ผ๋ก ์ ๋ ดํ ๊ฐ์ค๋น๋ฅผ ์คํํ ํ๋ซํผ์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): Go, Solidity (์ค๋งํธ ์ปจํธ๋ํธ)
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ๋ธ๋ก์ฒด์ธ ํฉ์ ์๊ณ ๋ฆฌ์ฆ (Istanbul BFT): ์์ ์ฆ๋ช (PoW)์ด๋ ์ง๋ถ ์ฆ๋ช (PoS)์ ๋ถ๊ธฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์ ๋ ๋น์ํด ์ฅ์ ํ์ฉ ํฉ์ ๊ธฐ๋ฐ ๊ณ ์ ํฉ์ ํ๋กํ ์ฝ ์ฒด๊ณ๋ฅผ ์์์ผ ํฉ๋๋ค.
- ์ค๋งํธ ์ปจํธ๋ํธ ๋์ ์๋ฆฌ: Solidity๋ก ์ง ๊ณ์ฝ ์ฝ๋๊ฐ EVM ๋จธ์ ์ฝ๋์์์ ์คํ๋๊ณ ๊ฐ์ค ๋น์ฉ์ ์ฐ์ถํ๋ ์์ ๋ถ๋ฐฐ ์๋ฆฌ๋ฅผ ์์งํด์ผ ํฉ๋๋ค.
- ๐ก ํ์ฉ ํ:
Solidity๊ณ์ฝ ์ฝ๋๋ฅผ ์์ฑํด ํด๋ ์ดํผ ๋ฐ์ค๋ฐฅ(Baobab) ํ ์คํธ๋ท์ ๊ณ์ฝ์ ๋ฐฐํฌํ๊ณ , ํด๋ผ์ด์ธํธ SDK์ธ Caver-js๋ฅผ ํตํด ํ๋ก ํธ์๋์ ์ง๊ฐ ์ฐ๋(Klip ๋ฑ)์ ๊ฒฐํฉํ **๊ฐ์ด NFT ๋ฐํ/์๋ ํ๋ซํผ(Web3 DApp)**์ ๊ตฌํํด ๋ณด์ธ์.
14. Spoqa Han Sans Neo ๐ค โ
ํ๊ธยท์์ดยท์ผ์ด์ ๊ฐ๋ ์ฑ ๋ฐ ์ ๋ ฌ์ ๊ทน๋ํํ ๊ฐ๋ ์ฑ ์ต๊ณ ์น ํฐํธGitHub: spoqa/spoqa-han-sans
์์์ฌ ์ ํต ํ๋ซํผ ์คํฌ์นด(Spoqa)์ FE ๋์์ด๋์ ์์ง๋์ด๋ค์ด ๋ ธํ ์ฐ์ค(Noto Sans)๋ฅผ ๋ฒ ์ด์ค๋ก ๊ฐ๋ํ ์ ์ฉ ๋ณธ๋ฌธ ์์ฒด๋ก, ๋ค๊ตญ์ด ํฐํธ์ ์ ๋ ฌ ๋ฌธ์ ๋ฅผ ์ก๊ณ ์ซ์์ ๋๋น๋ฅผ ๊ท ์ผํํ์ฌ ์๊ฐ์ ์์ฑ๋๊ฐ ๋ฐ์ด๋ ํฐํธ์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): FontForge, Python Font tools
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- CJK (ํยท์คยท์ผ) ํตํฉ ๊ธ๊ผด ์ค๊ณ ๊ธฐ๋ฒ: ํ๊ธ๊ณผ ์ผ์ด, ์์ด ํฐํธ์ ๊ธ๋ฆฌํ(Glyph) ๊ธฐ์ค์ ์ฐจ์ด๋ก ์ธํ ํ ์คํธ ์์ง ์ ๋ ฌ ์ด๊ธ๋จ์ ํด์ํ๋ ํฐํธ ๋์คํฌ๋ฆฝํฐ ๊ตฌ์กฐ๋ฅผ ํ์ตํฉ๋๋ค.
- ๊ฐ๋ณ ๋๋น(Proportional) vs ๊ณ ์ ๋๋น(Tabular) ์ซ์: ํ ๋ด์์ ์ซ์๊ฐ ์๋๋ก ๊น๋ํ๊ฒ ์ด ์ ๋ ฌ๋๋๋ก ์ซ์์ ํฌ๊ธฐ์ ๊ฐ๊ฒฉ์ ๊ณ ์ ํ๋ ์ค๊ณ ๊ธฐ๋ฒ์ ์์๋ก๋๋ค.
- ๐ก ํ์ฉ ํ: ๋์๋ณด๋ ํ๋ฉด์ด๋ ๊ฒฐ์ ์์์ฆ ํ์ด์ง์ ๊ฐ์ด ์ซ์ ์ ๋ณด๊ฐ ๋ณต์กํ๊ฒ ์ฝํ๋ ๊ธ์ต/์ผํ๋ชฐ UI์ ๊ธฐ๋ณธ ์์คํ ํฐํธ๋ก ์คํฌ์นด ํ ์ฐ์ค๋ฅผ ์ธํ ํด, ์ซ์ ์์ง ์ด์ด ๋ง์ ์ฒ๋ผ ์ผ์๋ก ์ ๋ ฌ๋๋ ๊ทน์์ UI ์ ๋ฐ๋๋ฅผ ํ๋ณดํด ๋ณด์ธ์.
15. Naver egjs-infinitegrid ๐ โ
์๋ง ๊ฐ ๋์ฉ๋ ์นด๋ ๋ฆฌ์คํธ๋ฅผ 60FPS๋ก ๋ ๋๋งํ๋ ๊ฐ์ ์คํฌ๋กค ๋ผ์ด๋ธ๋ฌ๋ฆฌGitHub: naver/egjs-infinitegrid
๋ค์ด๋ฒ FE Platform ํ์ด ๊ตฌํํ ์คํ์์ค๋ก, ํํฐ๋ ์คํธ(Pinterest) ์คํ์ผ์ ๋ฌดํ ์นด๋ํ ๋ฆฌ์คํธ๋ฅผ ๊ฐ๋ํ ๋ ํ๋ฉด ๋ฐ์ผ๋ก ๋ฒ์ด๋ DOM ๋ ธ๋๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ํ์ํ๊ณ ์ฌํ์ฉ(DOM Recycling)ํด ๋ชจ๋ฐ์ผ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ฐฉ์งํ๋ ์ต์ฒจ๋จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): TypeScript, Rollup
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- DOM ์ฌ์ฌ์ฉ(Recycling) ๋ฉ์ปค๋์ฆ: ๊ฐ์ ์์ญ(Viewport)์ ๊ธฐ๋ฐ์ผ๋ก ์คํฌ๋กค์ด ๋ด๋ ค๊ฐ ๋ ์๋จ์ DOM ๋ ธ๋๋ฅผ ํ๋จ์ผ๋ก ์ฌ๋ฐฐ์นํ์ฌ ๋ ๋๋ง ๋ ธ๋ ์ด๋์ ์ผ์ ๊ฐ์ ์ดํ๋ก ์ ์งํ๋ ๋ธ๋ผ์ฐ์ ์ฑ๋ฅ ์ต์ ํ ์๋ฆฌ๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค.
- Masonry ๋ ์ด์์ ์๊ณ ๋ฆฌ์ฆ: ๊ฐ ์นด๋ ๋์ด๊ฐ ์ ๊ฐ๊ฐ์ธ ๋์ ์นด๋๋ค์ ๋นํ์์ด ์ด์ดํ๊ฒ ๋ฉ์ ๋ฐฐ์นํ๋ ์ํ์ ๊ธฐํํ ์ ๋ ฌ ๊ณต์์ ์์งํด์ผ ํฉ๋๋ค.
- ๐ก ํ์ฉ ํ: ๋๋์ ํ์ง ์ข์ ์ด๋ฏธ์ง๋ค์ ๋น๋๊ธฐ API๋ก ๋ฐ์์ ๋ฌดํ์ผ๋ก ์๋๋ก ์คํฌ๋กคํ๋ ๊ณ ์ฑ๋ฅ ํํฐ๋ ์คํธ ํด๋ก ์ฑ์ด๋ ์ด๋ฏธ์ง ํผ๋ ์ฌ์ดํธ๋ฅผ ๊ตฌํํ์ฌ, ์์ฒ ์ฅ์ ์ฌ์ง ๋ก๋ ์์๋ ๋ธ๋ผ์ฐ์ ํญ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํฐ์ง์ง ์๋ ๊ทน๊ฐ์ ํผํฌ๋จผ์ค๋ฅผ ์์ฑํด ๋ณด์ธ์.
16. react-native-seoul/naver-login ๐ โ
๋ค์ดํฐ๋ธ Naver ๋ก๊ทธ์ธ์ ์ง์ํ๋ React Native ๋ธ๋ฆฟ์ง SDKGitHub: react-native-seoul/react-native-naver-login
ํ๊ตญ์ ๋ชจ๋ฐ์ผ ์ฑ ์์ฅ์์ ๋ฆฌ๋ ์ค์ธ React Native ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ(React Native Seoul)๊ฐ ๊ณต๋ ๊ธฐ์ฌํ์ฌ ๊ฐ๋ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ๋ค์ด๋ฒ ๊ณต์ iOS/Android ๋ค์ดํฐ๋ธ SDK ๋ชจ๋์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ธ๋ฆฟ์ง ํต์ ์ผ๋ก ์ ๊ธฐ์ ์ผ๋ก ํธ์ถํด ์ค๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): TypeScript, Objective-C, Java (๋ค์ดํฐ๋ธ ๋ธ๋ฆฟ์ง)
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ๋ค์ดํฐ๋ธ ๋ธ๋ฆฟ์ง(Native Bridging): ์๋ฐ์คํฌ๋ฆฝํธ ์์ง๊ณผ ๋ค์ดํฐ๋ธ OS(Android/iOS) ๋ฐํ์ ๊ฐ์ ์ง๋ ฌํ๋ ๋ฉ์์ง๋ฅผ ์ ๋ฌํด ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ๊นจ์ฐ๊ณ ๋ฆฌํด๊ฐ์ ๋ฐ๋ ๋น๋๊ธฐ ์ํคํ ์ฒ๋ฅผ ์์์ผ ํฉ๋๋ค.
- OAuth 2.0 ๋ฐ ํ ํฐ ๊ฐฑ์ ๋ชจ๋ธ: SDK๊ฐ ๋ฐํํ ์ก์ธ์ค ํ ํฐ์ผ๋ก ๋ค์ด๋ฒ ์คํ API ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ฝ๊ณ , ์ ํจ ์๊ฐ ๋ง๋ฃ ์ ๋ฆฌํ๋ ์ ํ ํฐ์ผ๋ก ์๋ ๊ฐฑ์ ํ๋ ์ธ์ฆ ํ๋ฆ์ ์์งํด์ผ ํฉ๋๋ค.
- ๐ก ํ์ฉ ํ: Android์ iOS ๊ธฐ๊ธฐ ๊ฐ๊ฐ์ ๊ฐ๋ฐ ํ๊ฒฝ(XCode, Android Studio)์์ ๋ค์ดํฐ๋ธ ๋ก๊ทธ์ธ ํธ๋ค๋ฌ ํ๊ฒฝ ์ค์ ์ ์ํํ๊ณ , ๋จ์ผ JS ์ฝ๋๋ก ๋ค์ดํฐ๋ธ ๋ค์ด๋ฒ ๊ฐํธ ๋ก๊ทธ์ธ์ ๊ตฌํํ๋ ์ค๋ฌด ์ฑ ํฌ๋ก์คํ๋ซํผ ๊ฐ๋ฐ์ ์ฒดํํด ๋ณด์ธ์.
17. Daum Postcode Wrapper ๐ฎ โ
๊ฐ์ฅ ๋๋ฆฌ ์ฐ์ด๋ ํ๊ตญํ ๋ค์ ์ฐํธ๋ฒํธ ๊ฒ์ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌGitHub: inpyo/react-daum-postcode (์ปค๋ฎค๋ํฐ ๋ํ ๋ํผ ๊ธฐ์ค)
์นด์นด์ค/๋ค์์ด ๋ฌด๋ฃ ์ ๊ณตํ๋ ๊ฐ๋ ฅํ ์ฃผ์ ๊ฒ์ API ์๋น์ค๋ฅผ React ์ปดํฌ๋ํธ ์ํ๊ณ์ ์ํ ๊ฐ๊ณผ ๋ผ์ดํ์ฌ์ดํด์ ์ฆ์ ๋ง๋ฌผ๋ ค ์ฌ์ฉํ ์ ์๋๋ก ๋ํํ ํ๊ตญ ํ์ ํ๋ก ํธ์๋ ํจํค์ง์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): React, JavaScript
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- iframe๊ณผ Window.postMessage ํต์ : ๋ด ์นํ์ด์ง ๋ด๋ถ์ ๊ฐ์์ผ๋ก ์ฝ์ ๋ ์ธ๋ถ ์์ดํ๋ ์(iframe) ๋ค์ ์ฃผ์ ํ์ ์์ ์ฌ์ฉ์๊ฐ ์ฃผ์๋ฅผ ์ ํํ์ ๋, ๋ถ๋ชจ ์ฐฝ์ผ๋ก ๋ฐ์ดํฐ ๊ฐ์ฒด๋ฅผ ๋์ ธ์ฃผ๋ ๋ณด์ ์ ์ฑ ์ฐํ ํต์ ๋ฐฉ์์ ํ์ ํด์ผ ํฉ๋๋ค.
- ๋์ CDN ์คํฌ๋ฆฝํธ ๋ก๋: ๋ฆฌ์กํธ๊ฐ ๋ ๋๋ง๋๊ธฐ ์ ์นด์นด์ค์ CDN ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ง์ฐ ๋ก๋ฉํ๊ณ ๋ก๋๊ฐ ๋๋ ์ด๋ฒคํธ๋ฅผ ์ ์ญ ๊ฐ์ฒด๋ก ๋ฐ์ ๊ฐ๋ํ๋ ๊ธฐ๋ฒ์ ์์์ผ ํฉ๋๋ค.
- ๐ก ํ์ฉ ํ: ์ฌ์ฉ์๊ฐ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ธ๋ จ๋ ๊ธ๋์ค๋ชจํผ์ฆ ๋ชจ๋ฌ์ฐฝ ํํ๋ก ์ฐํธ๋ฒํธ ๊ฒ์ ์๋น์ค๊ฐ ์ค๋ฒ๋ ์ด๋ก ๋จ๊ณ , ์ฃผ์ ํด๋ฆญ ์ ์ฐํธ๋ฒํธ, ๋๋ก๋ช ์ฃผ์, ์ง๋ฒ ์ฃผ์๊ฐ ๊ฐ ํผ ํ๋์ ์๋์ผ๋ก ๋ถํ ์ ๋ ฅ๋๋ ํ๊ตญํ ์ด์ปค๋จธ์ค ๋ฐฐ์ก์ง ์ ๋ ฅ ํผ์ ๊ฐ๋ฐํด ๋ณด์ธ์.
18. Line Decaton โก โ
๋ผ์ธ์ ๊ณ ์ฑ๋ฅ ๋๊ท๋ชจ ๋น๋๊ธฐ ์ด๋ฒคํธ ๋ถ์ฐ ํ๋ก์ธ์GitHub: line/decaton
๋ผ์ธ(LINE) ์์ง๋์ด๋ค์ด ์นดํ์นด(Apache Kafka)์ ํํฐ์ ๊ตฌ์กฐ ํ๊ณ๋ฅผ ๋์ด ๋จ์ผ ์ปจ์๋จธ JVM ๋ด๋ถ์์ ์๋ง์ ์ค๋ ๋๋ฅผ ํ์ฉํด ๋์๋ค๋ฐ์ ์ธ ์ด๋ฒคํธ๋ฅผ ๋ณ๋ ฌ ์ฒ๋ฆฌ(Parallel Processing)ํ ์ ์๋๋ก ๊ณ ์ํ ์ด๊ณ ์ ์ด๋ฒคํธ ์์ง์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): Java, Apache Kafka
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ์นดํ์นด ํํฐ์ ์ ์ฝ: ํ๋์ ํํฐ์ ์ ํ๋์ ์ค๋ ๋(์ปจ์๋จธ)๋ง ๋งคํ๋์ด ์์๊ฐ ๋ณด์ฅ๋์ง๋ง ์ฑ๋ฅ์ด ์ ์ฝ๋๋ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋ฐ์นดํค์ด ๊ณ ์ํ ๋ด๋ถ ๋ค์ค ํ ํํฐ์ ๋ ๊ตฌ์กฐ๋ฅผ ์์์ผ ํฉ๋๋ค.
- ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๋ฝ ํ๋ฆฌ(Lock-Free) ๊ตฌ์กฐ: ์ค๋ ๋ ๊ฐ ์ปจํ ์ (Contention)์ ์์ ๊ณ ์ด๊ณ ์์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๊ธฐ ์ํ JVM ํ๋ ๋ฐ ๋์์ฑ ํฌํผ ์ํคํ ์ฒ๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค.
- ๐ก ํ์ฉ ํ: ๋๊ท๋ชจ ์๋ฆผํก์ด๋ ํธ์ ๋ฉ์์ง๊ฐ ํน์ ์๊ฐ(์: ํน๊ฐ ์ธ์ผ ๊ฐ์ ๋ฑ)์ ์ด๋น ์๋ง ๊ฑด์ฉ ๋ชฐ๋ฆฌ๋ ํธ์ ๋ฐ์ก ๋ฐฑ์๋ ํ๋ก์ธ์ ํ์ดํ๋ผ์ธ์ ๋ถ์ฐ ์ฒ๋ฆฌ ์ฑ๋ฅ ํฅ์ ์ํคํ ์ฒ๋ฅผ ์ค๊ณํ ๋ ๊น์ด ์๊ฒ ๋ถ์ํด ๋ณด์ธ์.
19. PortOne SDK (์ด์ ์์ํฌํธ) ๐ณ โ
๊ตญ๋ด์ธ ๊ฒฐ์ ๊ฒ์ดํธ์จ์ด(PG) ํตํฉ ๊ฒฐ์ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌGitHub: iamport/iamport-react-native (๋ํ ๋ํผ ๊ธฐ์ค)
ํ ์คํ์ด๋จผ์ธ , KG์ด๋์์ค, KCP, ๋ค๋ ๋ฑ ์์ญ ๊ฐ์ ๋ณต์กํ ๊ตญ๋ด PG ๊ฒฐ์ ๋ชจ๋๋ค์ ํตํฉํ์ฌ ๋จ ํ๋์ ์ธํฐํ์ด์ค ๊ท๊ฒฉ์ผ๋ก ์ฐ๋ํ๋ ๊ฒฐ์ ๋์คํ ์คํ์์ค SDK์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): JavaScript, Native wrappers
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ์๋ฒ๊ฐ ์นํ (Webhook) ์ ํฉ์ฑ ํ์ธ: ๋ณด์์ ์ํด ์ฌ์ฉ์๊ฐ ๊ฒฐ์ ๋ฅผ ์๋ฃํ ๋ค ํด๋ผ์ด์ธํธ ๋ธ๋ผ์ฐ์ ๊ฐ ๋์ง๋ ๋ฆฌํด๊ฐ๋ง ๋ฏฟ์ง ์๊ณ , PG์ฌ ์๋ฒ๊ฐ ๋ด ๋ฐฑ์๋ API๋ก ๋น๋๊ธฐ ํธ์ถ์ ์ฃผ๋ ์นํ ์ด๋ฒคํธ๋ฅผ ์ฝ์ด์ ๊ธ์ก ์๋ณ์กฐ ๊ฒ์ฆ์ ์ํํ๋ ๋ฌด๊ฒฐ์ฑ ์ํคํ ์ฒ๋ฅผ ์์์ผ ํฉ๋๋ค.
- ๋ชจ๋ฐ์ผ ์น๋ทฐ(WebView) ๊ฒฐ์ ์ดํ ๋์: ๋ชจ๋ฐ์ผ ์ธ์ฑ ๋ธ๋ผ์ฐ์ ๋ ํ์ด๋ธ๋ฆฌ๋ ์ฑ ์น๋ทฐ์์ ์ธ๋ถ ์นด๋์ฌ ์ฑ(ISP ๋ฑ)์ผ๋ก ๋ฅ๋งํฌ ์คํค๋ง ์ ํ ์ ์ฑ์ด ๊บผ์ง๊ฑฐ๋ ๊ฒฐ์ ์๋ฃ ํ ์๋ณธ ๋ทฐ๋ก ๋์์ค์ง ์๋ ์ฑ ์๋ช ์ฃผ๊ธฐ ํธ๋ฌ๋ธ์ํ ์ ์ดํดํด์ผ ํฉ๋๋ค.
- ๐ก ํ์ฉ ํ: ๊ฒฐ์ ์ฐฝ ์ฑ๊ณต ์ฝ๋ฐฑ ์์ ํ, ๋ฐฑ์๋ ์๋ฒ๋ก ์ฆ์ ๊ฒฐ์ ์น์ธ ์์ฒญ์ ๋ณด๋ด ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ์ฒดํฌํ๊ณ , ๊ฒฐ์ ๊ธ์ก์ด ์ผ์นํ์ง ์์ ์ ์ฆ๊ฐ PG API๋ฅผ ํตํด ๊ฒฐ์ ์ทจ์(ํ๋ถ)๋ฅผ ์๋ ์ํํ๋ ๊ฒฌ๊ณ ํ ํธ๋์ญ์ ๋ณต์ ์์คํ ์ ์ค์ตํด ๋ณด์ธ์.
20. Sendbird JavaScript SDK ๐ฌ โ
๊ธ๋ก๋ฒ ์ฑํ /์ธ์ฑ ๋ฉ์์ง ์๋ฃจ์ ์ ๋ํ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌGitHub: sendbird/sendbird-chat-sdk-javascript
ํ๊ตญ ๊ฐ๋ฐ์ 3๋ช ์ด ์์ํ์ฌ ์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ ์ ๋์ฝ์ผ๋ก ๋ฑ๊ทนํ ์ผ๋๋ฒ๋(Sendbird)์ ํต์ฌ ์ฑํ SDK๋ก, ๋๊ท๋ชจ ์ค์๊ฐ ๋์ ์ ์์๊ฐ ์ ์ํ๋ ์ธ์ฑ ์ฑํ , ๊ทธ๋ฃน์ฝ, ์๋ฆผ ๊ธฐ๋ฅ์ ์ ๊ตํ API๋ฅผ ํตํด ์ฝ๊ฒ ์๋ฒ ๋ํ๊ฒ ํด์ฃผ๋ SDK์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): TypeScript, JavaScript, WebSockets
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ์ค์๊ฐ ์์ผ ์ฐ๊ฒฐ ๋ฐ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ: ๋ชจ๋ฐ์ผ ๋๋ฐ์ด์ค๊ฐ ์ฌ๋ฆฝ ๋ชจ๋๋ก ์ ํ๋๊ฑฐ๋ ๋คํธ์ํฌ ์ปค๋ฅ์ ์ด ์ผ์ ๋๊ฒผ์ ๋ ์์ผ ์ฐ๊ฒฐ ํด์ ๋ฐ ์ฌ์ ์, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ฌ์ด ๋ฐ๋ฆฐ ๋ฉ์์ง๋ฅผ ๋๊ธฐํํ๋ Sync Manager ํจํด์ ํ์ ํด์ผ ํฉ๋๋ค.
- ์ฑํ ์ฑ๋์ ์ข ๋ฅ: Open Channel(๋๊ท๋ชจ ์คํ ๋ํ๋ฐฉ)๊ณผ Group Channel(๋น๊ณต๊ฐ 1:1, ๊ทธ๋ฃน ๋ํ๋ฐฉ)์ ๋ฐ์ดํฐ ์ ์ก ๊ท๋ชจ ๋ฐ ์บ์ฑ ์ํคํ ์ฒ ์ฐจ์ด๋ฅผ ์ดํดํด์ผ ํจ์จ์ ์ธ ๋ฆฌ์์ค ์ค๊ณ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- ๐ก ํ์ฉ ํ: ์ผ๋๋ฒ๋ ์ปค๋ฅ์ ์ ์๋ฆฝํ๊ณ , ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ฉ์์ง๋ฅผ ์์ผ์ ํตํด ์ ์กํ ํ ์ฑํ ์๋๋ฐฉ์ด ๋ฉ์์ง๋ฅผ ์ฝ์๋์ง ์ฌ๋ถ(Read Receipt) ๋ฐ ํ์ดํ ์ธ๋์ผ์ดํฐ๋ฅผ ๋ฆฌ์กํธ ํ๋ฉด์ ์ง์ฐ ์์ด ๊ตฌํํ๋ ์ค์ ํ์ ์ฑํ ์ฐฝ ๋ชจ๋์ ๋ง๋ค์ด ๋ณด์ธ์.
21. KoNLPy (์ฝ์์ํ์ด) ๐ฐ๐ท โ
ํ๊ตญ์ด ์์ฐ์ด ์ฒ๋ฆฌ๋ฅผ ์ํ ์คํ์์ค ํํ์ ๋ถ์๊ธฐ ํตํฉ ํจํค์งGitHub: konlpy/konlpy
Hannanum, Kkma, Komoran, Mecab, Okt(Twitter) ๋ฑ ํํธํ๋์ด ์๋ ๋ค์ํ ํ๊ตญ์ด ํํ์ ๋ถ์ ์์ง๋ค์ ํ๋์ ํ์ค ํ์ด์ฌ ์ธํฐํ์ด์ค๋ก ํตํฉํ์ฌ ๋ฐ์ดํฐ ๊ณผํ์๋ค์ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ ๋ํ ํ๋ก์ ํธ์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): Python, Java (JPype ์ธํฐํ์ด์ค ๋ฐ์ธ๋ฉ), C++ (Mecab ์ฐ๋)
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ํ๊ตญ์ด์ ๊ต์ฐฉ์ด์ ํน์ฑ: ์ด๊ทผ์ ์กฐ์ฌ๊ฐ ๋ถ์ด ์๋ฏธ๊ฐ ๋ณํ๋ ํ๊ตญ์ด ํน์ฑ์ ๋จ์ ๊ณต๋ฐฑ ๋ถ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ฏ๋ก, ํํ์ ํ์ฌ ํ๊น (POS Tagging)์ ์๋ฆฌ๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค.
- JPype ๊ฐ์๋จธ์ ๋ธ๋ฆฟ์ง: ํ์ด์ฌ ์ธํฐํ๋ฆฌํฐ ๋ด๋ถ์์ ์๋ฐ๋ก ์์ฑ๋ ํํ์ ๋ถ์ ์์ง์ ๋ฉ๋ชจ๋ฆฌ ์นจ๋ฒ ์์ด ํธ์ถํ๋ JVM ๋ฐ์ธ๋ฉ ๋ฉ์ปค๋์ฆ์ ์์งํด์ผ ํฉ๋๋ค.
- ๐ก ํ์ฉ ํ: ๊ณ ๊ฐ ํผ๋๋ฐฑ ๋ฆฌ๋ทฐ ํ ์คํธ์์ ๋ช ์ฌ์ ํ์ฉ์ฌ๋ง์ ์ถ์ถํ ๋ค ๋น๋์๋ฅผ ์ง๊ณํ์ฌ, ์๋น์ค ๋ง์กฑ๋ ํธ๋ ๋๋ฅผ ํ๋์ ํ์ ํ๋ ํ๊ตญ์ด ์๋ํด๋ผ์ฐ๋ ๋ฐ ๊ฐ์ฑ ๋ถ์ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํด ๋ณด์ธ์.
22. TOAST UI Editor (NHN) ๐ โ
Markdown๊ณผ WYSIWYG์ ๋๋๋๋ ๊ธ๋ก๋ฒ ํ์ค ์น ์๋ํฐGitHub: nhn/tui.editor
NHN FE ๊ฐ๋ฐ๋ฉ์์ ๊ฐ๋ฐํ ๊ฐ๋ ฅํ ์์ง์ & ๋งํฌ๋ค์ด ์น ์๋ํฐ๋ก, ์ค์๊ฐ ๋งํฌ๋ค์ด ํ๋ฆฌ๋ทฐ, ์ฐจํธ ๋ฐ UML ๋ ๋๋ง ํ๋ฌ๊ทธ์ธ, ๊ทธ๋ฆฌ๊ณ ์ง๊ด์ ์ธ ํด๋ฐ๋ฅผ ์ ๊ณตํ์ฌ ๊ตญ๋ด์ธ ์๋ง์ ๋ธ๋ก๊ทธ์ ๊ธฐ์ ๋ฌธ์ ํ๋ซํผ์ ํต์ฌ ์๋ํฐ๋ก ์ฑํ๋์์ต๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): TypeScript, Prosemirror, CodeMirror, DOMPurify
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- Prosemirror์ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(AST): ํ ์คํธ ๋ฌธ์๋ฅผ ๋ถ๋ณ ๋ฐ์ดํฐ ๊ตฌ์กฐ(Schema/Node/Mark)๋ก ๋ชจ๋ธ๋งํ๊ณ ๋ณ๊ฒฝ ํธ๋์ญ์ ์ ์ ์ฉํ๋ ๋ฆฌ์น ํ ์คํธ ์๋ํฐ์ ์ฝ์ด ์๋ฆฌ๋ฅผ ์์์ผ ํฉ๋๋ค.
- XSS(๊ต์ฐจ ์ฌ์ดํธ ์คํฌ๋ฆฝํ ) ๋ฐฉ์ด: ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋งํฌ๋ค์ด์ HTML๋ก ํ์ฑํ ๋ ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋์ง ์๋๋ก ์ด๊ท (Sanitize)ํ๋ ๋ณด์ ํ๋ก์ธ์ค๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค.
- ๐ก ํ์ฉ ํ: ๋ฒจ๋ก๊ทธ(Velog)๋ ๋ ธ์ ์ฒ๋ผ ๋งํฌ๋ค์ด ๋ฌธ๋ฒ์ผ๋ก ์์ฑํ๋ฉด์๋ ์ด๋ฏธ์ง๋ฅผ ํด๋ฆฝ๋ณด๋์์ ๋ฐ๋ก ๋ถ์ฌ๋ฃ๊ณ ์ค์๊ฐ ํ(Table)๋ฅผ ํธ๋ฆฌํ๊ฒ ํธ์งํ๋ ์ฌ๋ด ๊ธฐ์ ์ํค ์๋ํฐ ๋ชจ๋์ ๊ตฌํํด ๋ณด์ธ์.
23. Toss Slash (useFunnel, useAsync ๋ฑ) ๐ช โ
ํ ์ค ํ๋ก ํธ์๋ ์์ง๋์ด๋ง์ ํต์ฌ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ์GitHub: toss/slash
ํ ์ค(Viva Republica)์ ์์ง๋์ด๋ค์ด ์์ต ๊ฑด์ ๊ธ์ต ๊ฑฐ๋ UI๋ฅผ ๊ตฌํํ๋ฉฐ ์ถ์ ํ ์ ์ธ์ ์ํ ๊ด๋ฆฌ, ๋น๋๊ธฐ Suspense ์ ์ด, ํผ๋(Funnel) ์ํ ๋จธ์ , ๊ทธ๋ฆฌ๊ณ ์ค๋ฌด ์ ํธ๋ฆฌํฐ๋ค์ ์ง๋์ฑํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): TypeScript, React, Next.js, Yarn Berry (PnP)
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ์ ์ธ์ ํผ๋(Funnel) ํจํด: ํ์๊ฐ์
์ด๋ ๋์ถ ์ฌ์ฌ์ฒ๋ผ ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ ๋ณต์กํ ํ์ด์ง ์ ํ ํ๋ฆ์
useFunnel์ ํตํด ์์ง๋ ๋์ ๋จ์ผ ์ปดํฌ๋ํธ ๊ตฌ์กฐ๋ก ์ค๊ณํ๋ ์๋ฆฌ๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค. - React Suspense์ Error Boundary: ๋น๋๊ธฐ ๋ฐ์ดํฐ ๋ก๋ฉ ์ํ์ ์๋ฌ ํธ๋ค๋ง์ ๋ช
๋ นํ
if (loading)๋์ ์ ์ธ์ ์ผ๋ก ๊ฒฉ๋ฆฌํ๋ ๋ชจ๋ React ํจํด์ ์์งํด์ผ ํฉ๋๋ค.
- ์ ์ธ์ ํผ๋(Funnel) ํจํด: ํ์๊ฐ์
์ด๋ ๋์ถ ์ฌ์ฌ์ฒ๋ผ ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ ๋ณต์กํ ํ์ด์ง ์ ํ ํ๋ฆ์
- ๐ก ํ์ฉ ํ: ํ ์ค์
useFunnel์ํคํ ์ฒ๋ฅผ ๋์ ํ์ฌ ์ฌ์ฉ์ ์ ๋ณด ์ ๋ ฅ -> ์ฝ๊ด ๋์ -> ๊ฒฐ์ ์๋จ ์ ํ -> ์๋ฃ๋ก ์ด์ด์ง๋ ๋จ๊ณ๋ณ ์จ๋ณด๋ฉ ์ค๋ฌธ์กฐ์ฌ ์ฑ์ ๊น๋ํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ก ์์ฑํด ๋ณด์ธ์.
24. KoGPT2 (SKํ ๋ ์ฝค) ๐ค โ
ํ๊ตญ์ด ์์ฑ์ ์ํด ์ฌ์ ํ์ต๋ GPT-2 ํ์ด๋ฐ์ด์ ๋ชจ๋ธGitHub: SKT-AI/KoGPT2
SKT AI ํ์์ ํ๊ตญ์ด ์ํค๋ฐฑ๊ณผ, ๋ด์ค, ํฌ๋กค๋ง ๋ฐ์ดํฐ ๋ฑ ๋ฐฉ๋ํ ์์ ํ๊ตญ์ด ์ฝํผ์ค๋ฅผ BPE ํ ํฌ๋์ด์ ๋ก ํ์ต์์ผ ๊ณต๊ฐํ ํ๊ตญ์ด ํนํ ์์ฑํ ์ธ์ด ๋ชจ๋ธ์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): Python, PyTorch, Hugging Face Transformers, ONNX
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ์๊ธฐํ๊ท(Auto-regressive) ๋์ฝ๋: ์ด์ ๋จ์ด๋ค์ ๋ฐํ์ผ๋ก ๋ค์์ ์ฌ ๊ฐ์ฅ ์ ์ ํ ํ ํฐ์ ํ๋ฅ ๋ถํฌ๋ฅผ ๊ณ์ฐํ๋ Transformer Decoder์ ์๋ ๋ฐฉ์์ ์์์ผ ํฉ๋๋ค.
- ํ์ธ ํ๋(Fine-tuning): ์ฌ์ ํ์ต๋ ๋ฒ ์ด์ค ๊ฐ์ค์น๋ฅผ ๊ณ ์ ํ๊ฑฐ๋ ์ผ๋ถ ๋ ์ด์ด๋ง ํ์ต์์ผ ํน์ ๋๋ฉ์ธ(์์ค, ์ฑ๋ด, ์)์ ํนํ์ํค๋ ์ ์ด ํ์ต ๊ธฐ๋ฒ์ ์ดํดํด์ผ ํฉ๋๋ค.
- ๐ก ํ์ฉ ํ: KoGPT2 ๋ชจ๋ธ์ ์(Poem)๋ ์์ค ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ ํ์ธํ๋ํ์ฌ, ์ฌ์ฉ์๊ฐ ์ ์์ด ๋ช ๊ฐ๋ง ์ ๋ ฅํ๋ฉด ๊ฐ์ฑ์ ์ธ ํ๊ตญ์ด ๋ฌธ์ฅ์ ์๋์ผ๋ก ์ฐฝ์ํด ์ฃผ๋ AI ์๋ฌธ ๋์ฐ๋ฏธ๋ฅผ ์ ์ํด ๋ณด์ธ์.
25. Pororo (์นด์นด์ค๋ธ๋ ์ธ) ๐ง โ
30๊ฐ์ง ์ด์์ ์์ฐ์ด ์ฒ๋ฆฌ(NLP) ํ์คํฌ๋ฅผ ํตํฉ ํด๊ฒฐํ๋ AI ๋ผ์ด๋ธ๋ฌ๋ฆฌGitHub: kakaobrain/pororo
์นด์นด์ค๋ธ๋ ์ธ์์ ๊ฐ๋ฐํ ๋ค๋ชฉ์ NLP ํ๋ซํผ์ผ๋ก, ํ ์คํธ ์์ฝ, ์ง์์๋ต(QA), ๊ฐ์ฒด๋ช ์ธ์(NER), ๊ธฐ๊ณ ๋ฒ์ญ, ์์ฑ์ธ์(ASR) ๋ฑ ์ค๋ฌด์์ ํ์ํ 30์ฌ ์ข ์ ๋ฅ๋ฌ๋ ํ์คํฌ๋ฅผ ๋จ ๋ช ์ค์ ํ์ด์ฌ ์ฝ๋๋ก ํธ์ถํ ์ ์๊ฒ ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): Python, PyTorch, Fairseq
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ํ์คํฌ ๊ธฐ๋ฐ ์ถ์ํ ํ์ดํ๋ผ์ธ: ๋ณต์กํ ๋ชจ๋ธ ๋ก๋ฉ๊ณผ ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ์ฌ์ฉ์ ์นํ์ ์ธ ํฉํ ๋ฆฌ ํจํด(
Pororo(task='summary'))์ผ๋ก ์บก์ํํ ์ํคํ ์ฒ๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค. - ๊ธฐ๊ณ ๋ ํด(MRC): ๊ธด ๋ณธ๋ฌธ ์ง๋ฌธ์์ ์ง๋ฌธ์ ์ ๋ต์ด ์์นํ ํ ์คํธ ๋ฒ์๋ฅผ ์์ธกํ๋ Span Prediction ์๊ณ ๋ฆฌ์ฆ์ ํ์ตํ์ธ์.
- ํ์คํฌ ๊ธฐ๋ฐ ์ถ์ํ ํ์ดํ๋ผ์ธ: ๋ณต์กํ ๋ชจ๋ธ ๋ก๋ฉ๊ณผ ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ์ฌ์ฉ์ ์นํ์ ์ธ ํฉํ ๋ฆฌ ํจํด(
- ๐ก ํ์ฉ ํ: ์ฅ๋ฌธ์ ๋ด์ค ๊ธฐ์ฌ URL์ ์ ๋ ฅํ๋ฉด 3์ค ์์ฝ๋ณธ์ ์ถ์ถํ๊ณ ๊ธฐ์ฌ ๋ด ์ธ๊ธ๋ ์ธ๋ฌผ/๊ธฐ์ ๋ช ์ ์๋์ผ๋ก ํ๊น ํด ์ฃผ๋ ์ค๋งํธ ๋ด์ค ๋ธ๋ฆฌํ ๋ด์ ๊ฐ๋ฐํด ๋ณด์ธ์.
26. D2Coding (NAVER) ๐ป โ
๊ฐ๋ฐ์์ ๋ ๊ฑด๊ฐ๊ณผ ์ฝ๋ฉ ๊ฐ๋ ์ฑ์ ๊ทน๋ํํ ๋ค์ด๋ฒ์ ์คํ์์ค ๊ณ ์ ํญ ์์ฒดGitHub: naver/d2codingfont
๋ค์ด๋ฒ๊ฐ ๊ฐ๋ฐ์๋ค์ ์ฅ์๊ฐ ์ฝ๋ฉ ํ๊ฒฝ์ ์ํด ํ๊ธ๊ณผ ์๋ฌธ, ํน์๊ธฐํธ์ ์ํญ ๋น์จ์ 1:2์ ์๋ฒฝํ ๊ณ ์ ํญ์ผ๋ก ๋ง์ถ๊ณ , ํท๊ฐ๋ฆฌ๊ธฐ ์ฌ์ด ๋ฌธ์(0๊ณผ O, l๊ณผ 1)๋ฅผ ๋ช
ํํ ๊ตฌ๋ถํ์ฌ ๋ฐฐํฌํ ๋ํ๋ฏผ๊ตญ ๋ํ ์ฝ๋ฉ ํฐํธ์
๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): FontForge, OpenType, TTF/WOFF2
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ํฉ์(Ligatures)์ ํฐํธ ๋ ๋๋ง:
=>,===,!=๋ฑ์ ์ฐ์ฐ์ ๊ธฐํธ๊ฐ ์ ๋ ฅ๋ ๋ ํ๋์ ๋ฏธ๋ คํ ํ๋ก๊ทธ๋๋ฐ ์ฌ๋ณผ๋ก ๊ฒฐํฉ๋์ด ํ์๋๋ ์คํํ์ ํผ์ฒ์ ์๋ฆฌ๋ฅผ ์์์ผ ํฉ๋๋ค. - ์นํฐํธ ์๋ธ์ ๊ฒฝ๋ํ: ์๋ง ์์ ๋ฌํ๋ ํ๊ธ ๊ธ๋ฆฌํ ์ค ์์ฃผ ์ฐ์ด๋ 2,350์๋ง์ ๊ณจ๋ผ๋ด ํ์ผ ์ฉ๋์ ๋ฉ๊ฐ๋ฐ์ดํธ ๋จ์์์ ์๋ฐฑ ํฌ๋ก๋ฐ์ดํธ๋ก ์ค์ด๋ ์๋ธ์ ๊ธฐ๋ฒ์ ์ดํดํ์ธ์.
- ํฉ์(Ligatures)์ ํฐํธ ๋ ๋๋ง:
- ๐ก ํ์ฉ ํ: ์ฌ๋ด IDE ํ๊ฒฝ์ด๋ ์ฝ๋ ๋ฆฌ๋ทฐ ์น ํ๋ซํผ์ D2Coding ์นํฐํธ๋ฅผ ์ ์ฉํ์ฌ, ์คํ์๋ก ์ธํ ์ฝ๋ ๋ฒ๊ทธ๋ฅผ ์๊ฐ์ ์ผ๋ก ์ฌ์ ์ ๋ฐฉ์งํ๋ ๊ฐ๋ ์ฑ ๋์ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธํ ํด ๋ณด์ธ์.
27. Pretendard (ํ๋ฆฌํ ๋ค๋) ๐ค โ
ํฌ๋ก์ค ํ๋ซํผ ํ๊ตญ์ด ์น ํ์ดํฌ๊ทธ๋ํผ์ ํ์ค ์์ฒดGitHub: orioncactus/pretendard
ํ๊ตญ ๊ฐ๋ฐ์ ๊ธธํ์ง ๋์ด ๋ณธ๊ณ ๋(Source Han Sans)๊ณผ ์ธํฐ(Inter)์ ์ฅ์ ์ ๊ฒฐํฉํ์ฌ ์ ์ํ ๊ฐ๋ณ ์์ฒด๋ก, ์๋์ฐ, ๋งฅ, iOS, ์๋๋ก์ด๋ ๋ฑ ๋ชจ๋ ๋๋ฐ์ด์ค์์ ๊นจ์ง ์์ด ๋ฏธ๋ คํ ๋ ๋๋ง์ ๋ณด์ฌ์ฃผ๋ฉฐ ๊ตญ๋ด ์น ์๋น์ค์ 90% ์ด์์ด ์ฑํํ ๊ตญ๋ฏผ ํฐํธ์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): Variable Fonts, CSS Typography, WOFF2
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ๊ฐ๋ณ ํฐํธ(Variable Font): ๋ณ๋์ ํ์ผ ๊ต์ฒด ์์ด CSS์
font-weight: 100~900์ฌ๋ผ์ด๋๋ฅผ ํตํด ๋๊ป๋ฅผ ๋ถ๋๋ฝ๊ฒ ์ค์๊ฐ ์กฐ์ ํ ์ ์๋ ์ฐจ์ธ๋ ํฐํธ ๊ธฐ์ ์ ์ดํดํด์ผ ํฉ๋๋ค. - ์์คํ ํฐํธ ํด๋ฐฑ(Fallback): OS๋ณ ๋ ๋๋ง ์์ง(DirectWrite vs CoreText) ๊ฐ์ ๋ ๋๋ง ๋๊ป ์ฐจ์ด๋ฅผ ๋ณด์ ํ๋ CSS ํ์ดํฌ๊ทธ๋ํผ ๊ธฐ๋ฒ์ ํ์ตํ์ธ์.
- ๊ฐ๋ณ ํฐํธ(Variable Font): ๋ณ๋์ ํ์ผ ๊ต์ฒด ์์ด CSS์
- ๐ก ํ์ฉ ํ: ํ ์ค, ๋น๊ทผ, ๋ฐฐ๋ฌ์๋ฏผ์กฑ ๋ฑ ๊ตญ๋ด ์ ๋์ฝ ์ฑ๋ค์ UI ์คํ์ผ์ ๋ฒค์น๋งํนํ์ฌ, ์ด๋ค ํด์๋์์๋ ํ ์คํธ๊ฐ ์นผ์ฒ๋ผ ์ ๋ช ํ๊ฒ ํํ๋๋ ์ต๊ณ ๊ธ ๋ชจ๋ ๋๋ฉ ํ์ด์ง๋ฅผ ์ ์ํด ๋ณด์ธ์.
28. KarrotFrame (๋น๊ทผ๋ง์ผ) ๐ฅ โ
์น๋ทฐ ๊ธฐ๋ฐ ํ์ด๋ธ๋ฆฌ๋ ์ฑ์ ๋ค์ดํฐ๋ธ ์ ํ ์ ๋๋ฉ์ด์ ์ ์ ๊ณตํ๋ ํ๋ ์์ํฌGitHub: daangn/karrotframe
๋น๊ทผ๋ง์ผ์ ํ๋ก ํธ์๋ ํ์์ ์น ๊ธฐ์ ๋ก ์์ฑ๋ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋ ํ์ด์ง๋ค์ด ๋ค์ดํฐ๋ธ ์ฑ ์์ค์ ์์ฐ์ค๋ฌ์ด ์คํ ๋ค๋น๊ฒ์ด์ (ํ๋ฉด ์ฌ๋ผ์ด๋ ์ ํ, ์ ์ค์ฒ ๋ฐฑ)์ ๊ตฌํํ ์ ์๋๋ก ์คํ์์ค๋ก ๊ณต๊ฐํ ํ๋ ์์ํฌ์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): TypeScript, React, Web Animation API
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ์น๋ทฐ ์คํ ๋ค๋น๊ฒ์ด์
: ๋ธ๋ผ์ฐ์ ํ์คํ ๋ฆฌ(
popstate)์ ๋ค์ดํฐ๋ธ ํ๋ฉด ์ ํ ๋ผ์ดํ์ฌ์ดํด์ ์ฐ๋ํ์ฌ ๋ค๋ก ๊ฐ๊ธฐ ์ ํ๋ฉด ๊น๋นก์์ ์ ๊ฑฐํ๋ ์๋ฆฌ๋ฅผ ์์์ผ ํฉ๋๋ค. - GPU ๊ฐ์ ํ๋์จ์ด ์ ๋๋ฉ์ด์
: CSS
transform: translate3d()๋ฅผ ํ์ฉํ์ฌ 60FPS์ ํ๋ ์ ๋๋ ์๋ ๋ชจ๋ฐ์ผ ์ ์ค์ฒ ์ ๋๋ฉ์ด์ ์ ๋ณด์ฅํ๋ ์ต์ ํ ๊ธฐ๋ฒ์ ์์งํ์ธ์.
- ์น๋ทฐ ์คํ ๋ค๋น๊ฒ์ด์
: ๋ธ๋ผ์ฐ์ ํ์คํ ๋ฆฌ(
- ๐ก ํ์ฉ ํ: ๋ฆฌ์กํธ๋ก ๋ง๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ KarrotFrame์ ์ฅ์ฐฉํ์ฌ, ์ค๋งํธํฐ ๋ธ๋ผ์ฐ์ ์์ ์คํํด๋ ์ค์ ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ๊ตฌ๋ถ์ด ๋ถ๊ฐ๋ฅํ ์์ค์ ๋ชจ๋ฐ์ผ ์น์ฑ์ ์์ฑํด ๋ณด์ธ์.
29. PyKoSpacing (์ ํฌ์) ๋ โ
๋ฅ๋ฌ๋ ๊ธฐ๋ฐ์ ํ๊ตญ์ด ์๋ ๋์ด์ฐ๊ธฐ ๊ต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌGitHub: haven-jeon/PyKoSpacing
SNS, ๋๊ธ, ์์ฑ์ธ์ ๊ฒฐ๊ณผ๋ฌผ ๋ฑ ๋์ด์ฐ๊ธฐ๊ฐ ์์ ํ ๋๋ฝ๋๊ฑฐ๋ ์๊ณก๋ ํ๊ธ ๋ฌธ์ฅ์ ๋๊ท๋ชจ ์ฝํผ์ค๋ก ํ์ต๋ ์๋ฐฉํฅ RNN(Bi-LSTM) ์ ๊ฒฝ๋ง์ ํตํด 99% ์ด์์ ์ ํ๋๋ก ์ฌ๋ฐ๋ฅด๊ฒ ๋์ด์ฐ๊ธฐํด ์ฃผ๋ ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): Python, Keras / TensorFlow, C++
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ๋ฌธ์(Character) ๋จ์ ์ํ์ค ๋ ์ด๋ธ๋ง: ๊ฐ ํ๊ธ ๊ธ์ ๋ค์ ๊ณต๋ฐฑ์ด ๋ค์ด๊ฐ ํ๋ฅ (0 ๋๋ 1)์ ์์ธกํ๋ ์ํ์ค-ํฌ-์ํ์ค ์ด์ง ๋ถ๋ฅ ์ ๊ฒฝ๋ง ๊ตฌ์กฐ๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค.
- ํ๊ธ ์๋ชจ ์ ๋์ฝ๋ ๋ถํด: ์ด์ฑ, ์ค์ฑ, ์ข ์ฑ์ ๋ถ๋ฆฌํ๊ณ ์์ ๋จ์๋ก ์๋ฒ ๋ฉ ๋ฒกํฐ๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ํ์ตํ์ธ์.
- ๐ก ํ์ฉ ํ: ์์ฑ์ธ์(STT) API ๊ฒฐ๊ณผ๋ฌผ์ด๋ ๋ชจ๋ฐ์ผ์์ ํ์ดํ๋ ๋์ด์ฐ๊ธฐ ์๋ ๋ฌธ์ฅ์ ์ ์ ํ์ฌ DB ๊ฒ์ ์์ธ์ด๋ ์ฑ๋ด ์ ๋ ฅ๊ฐ์ ์ธ์๋ฅ ์ ํ๊ธฐ์ ์ผ๋ก ๊ฐ์ ํ๋ ์ ์ฒ๋ฆฌ ์๋ฒ๋ฅผ ๊ตฌ์ถํด ๋ณด์ธ์.
30. FastAPI-Boilerplate โก โ
๊ตญ๋ด ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ๊ฐ ๊ตฌ์ถํ ์ค๋ฌด๊ธ ํ์ด์ฌ ๋น๋๊ธฐ ๋ฐฑ์๋ ํ์ค ํ ํ๋ฆฟGitHub: tiangolo/full-stack-fastapi-template (๊ตญ๋ด ๋ฒ์ญ ๋ฐ ์ต์ ํ ์ปค๋ฎค๋ํฐ ๊ธฐ์ค)
FastAPI, SQLAlchemy 2.0 (๋น๋๊ธฐ ORM), Alembic DB ๋ง์ด๊ทธ๋ ์ด์ , Celery ๋น๋๊ธฐ ์์ ํ, JWT ๊ธฐ๋ฐ OAuth2 ์ธ์ฆ, ๊ทธ๋ฆฌ๊ณ Docker Compose ๋ฐฐํฌ ํ๊ฒฝ๊น์ง ์ค๋ฌด์ ํ์ํ ๋ชจ๋ ์ํคํ ์ฒ๊ฐ ์๋ฒฝํ๊ฒ ์ฌ์ ๊ตฌ์ฑ๋ ์ํฐํ๋ผ์ด์ฆ๊ธ ๋ฐฑ์๋ ๋ณด์ผ๋ฌํ๋ ์ดํธ์ ๋๋ค.
- โ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ (Tech Stack): Python 3.11+, FastAPI, SQLAlchemy, PostgreSQL, Redis, Docker
- ๐ง ์ฌ์ ์ ์ดํดํด์ผ ํ๋ ๋ด์ฉ๋ค:
- ๊ณ์ธตํ ์ํคํ ์ฒ (Layered Architecture): Controller(Router) -> Service -> Repository๋ก ์ฑ ์์ ๋ถ๋ฆฌํ์ฌ ๋๊ท๋ชจ ํธ๋ํฝ๊ณผ ๊ธฐ๋ฅ ํ์ฅ์ ์ ์ฐํ๊ฒ ๋์ฒํ๋ ๋ฐฑ์๋ ๋์์ธ ํจํด์ ์ดํดํด์ผ ํฉ๋๋ค.
- Alembic ์๋ ๋ง์ด๊ทธ๋ ์ด์ : ๋ชจ๋ธ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์งํ์ฌ DB ์คํค๋ง DDL์ ์๋์ผ๋ก ๋ฒ์ ๊ด๋ฆฌํ๊ณ ๋กค๋ฐฑํ ์ ์๋ ํ์ ๊ด๋ฆฌ ์ฒด๊ณ๋ฅผ ํ์ตํ์ธ์.
- ๐ก ํ์ฉ ํ: ํ์๊ฐ์ , ์ด๋ฉ์ผ ์ธ์ฆ, ๋น๋ฐ๋ฒํธ ์ฌ์ค์ , ๊ถํ ๊ด๋ฆฌ(RBAC) ๋ฑ ๋ฐ๋ณต๋๋ ๋ฐฑ์๋ ๊ธฐ์ด ์ธํ๋ผ๋ฅผ ์ฒ์๋ถํฐ ๋ค์ ์ง์ง ์๊ณ , ์ด ๋ณด์ผ๋ฌํ๋ ์ดํธ๋ฅผ ๋ณต์ ํ์ฌ ์ ๊ท ๋น์ฆ๋์ค ๋ก์ง ๊ฐ๋ฐ์ ์ฆ์ ์ฐฉ์ํ๋ ๊ณ ์ ์คํํธ์ ํ์ดํ๋ผ์ธ์ ๊ฒฝํํด ๋ณด์ธ์.