Skip to content

๐Ÿ‡ฐ๐Ÿ‡ท ๊นƒํ—ˆ๋ธŒ ์Šคํƒ€(๊ตญ๋‚ด) โ€” ํ•œ๊ตญ ๊ฐœ๋ฐœ์ž ์˜คํ”ˆ์†Œ์Šค 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 ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•œ ๋’ค ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ์ง€์šฐ๊ณ , ์ž์‹ ์ด ์ž์ฃผ ์“ฐ๋Š” ์ธ์Šคํƒ€๊ทธ๋žจ, ๋‹น๊ทผ๋งˆ์ผ“, ํ† ์Šค ์•ฑ์˜ ํŠน์ • ํ™”๋ฉด์„ ํ”ฝ์…€ ๋‹จ์œ„๋กœ ์ง์ ‘ ํด๋ก ํ•ด๋ณด๋ฉฐ ๋ ˆ์ด์•„์›ƒ ๊ฐ๊ฐ์„ ํ‚ค์›Œ๋ณด์„ธ์š”.

5. D2Coding Font ๐Ÿ–‹๏ธ โ€‹

๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ๋‚˜๋ˆ”๊ณ ๋”• ๊ธฐ๋ฐ˜ ์ฝ”๋”ฉ ์ „์šฉ ํฐํŠธGitHub: naver/d2codingfont

๋„ค์ด๋ฒ„๊ฐ€ ๊ฐœ๋ฐœํ•œ ์ฝ”๋”ฉ ์ „์šฉ ํฐํŠธ๋กœ, ํ•œ๊ธ€ ๊ฐ€๋…์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ณ  ์•ŒํŒŒ๋ฒณ 'l(์—˜)', 'I(์•„์ด)', ์ˆซ์ž '1' ๋“ฑ์˜ ์˜ค๋…์„ ๋ฐฉ์ง€ํ•˜๋„๋ก ์„ธ์‹ฌํ•˜๊ฒŒ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • โš™๏ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ (Tech Stack): FontForge, Python (๋นŒ๋“œ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ)
  • ๐Ÿง  ์‚ฌ์ „์— ์ดํ•ดํ•ด์•ผ ํ•˜๋Š” ๋‚ด์šฉ๋“ค:
    • ํ•ฉ์ž(Ligature) ๊ธฐ๋Šฅ: ==, !=, => ๋“ฑ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐํ˜ธ๋ฅผ ํ•˜๋‚˜์˜ ์˜ˆ์œ ์ˆ˜์‹ ๊ธฐํ˜ธ์ฒ˜๋Ÿผ ํ•ฉ์ณ์„œ ๋ Œ๋”๋งํ•˜๋Š” OpenType ํฐํŠธ์˜ ํ•ฉ์ž ์„ค๊ณ„ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•ด ๋ณด์„ธ์š”.
    • ์„œ๋ธŒ์…‹(Subset) ํฐํŠธ์™€ ๊ฒฝ๋Ÿ‰ํ™”: ๋ถˆํ•„์š”ํ•œ ํ•œ๊ธ€ ๊ธ€๋ฆฌํ”„๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์›น ํฐํŠธ ์šฉ๋Ÿ‰์„ ๋ฉ”๊ฐ€๋ฐ”์ดํŠธ(MB) ๋‹จ์œ„์—์„œ ํ‚ฌ๋กœ๋ฐ”์ดํŠธ(KB) ๋‹จ์œ„๋กœ ์ตœ์ ํ™”ํ•˜๋Š” ๊ณผ์ •์„ ์Šคํฌ๋ฆฝํŠธ๋กœ ์–ด๋–ป๊ฒŒ ์ž๋™ํ™”ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.
  • ๐Ÿ’ก ํ™œ์šฉ ํŒ: 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 ๊ณ ๊ธ‰ ๋””์ž์ธ ํŒจํ„ด์„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๐Ÿ’ก ํ™œ์šฉ ํŒ: ํ† ์Šค์˜ ์„ ์–ธ์  ์„ค๊ณ„ ๋ฐฉ์‹์„ ์ฐธ๊ณ ํ•˜์—ฌ, ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ 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) ๋กœ์ง์„ ๋ถ„์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๐Ÿ’ก ํ™œ์šฉ ํŒ: ์ด ๋ž˜ํผ์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๊ณต๊ณต๋ฐ์ดํ„ฐ ํฌํ„ธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์ง€๋„ ์œ„์— ์‹œ๊ฐํ™”ํ•˜๋Š” ๋™๋„ค ๋ง›์ง‘ ์ง€๋„, ํ˜น์€ ๋ถ€๋™์‚ฐ ์‹ค๊ฑฐ๋ž˜๊ฐ€ ๋งค๋ฌผ ์ง€๋„ ์•ฑ์„ ๊ฐœ๋ฐœํ•ด ํฌํŠธํด๋ฆฌ์˜ค๋ฅผ ์ฑ„์›Œ๋ณด์„ธ์š”.

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 ํŒจํ„ด์„ ์ˆ™์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๐Ÿ’ก ํ™œ์šฉ ํŒ: ํ† ์Šค์˜ 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์ž๋งŒ์„ ๊ณจ๋ผ๋‚ด ํŒŒ์ผ ์šฉ๋Ÿ‰์„ ๋ฉ”๊ฐ€๋ฐ”์ดํŠธ ๋‹จ์œ„์—์„œ ์ˆ˜๋ฐฑ ํ‚ฌ๋กœ๋ฐ”์ดํŠธ๋กœ ์ค„์ด๋Š” ์„œ๋ธŒ์…‹ ๊ธฐ๋ฒ•์„ ์ดํ•ดํ•˜์„ธ์š”.
  • ๐Ÿ’ก ํ™œ์šฉ ํŒ: ์‚ฌ๋‚ด 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 ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ ๊ธฐ๋ฒ•์„ ํ•™์Šตํ•˜์„ธ์š”.
  • ๐Ÿ’ก ํ™œ์šฉ ํŒ: ํ† ์Šค, ๋‹น๊ทผ, ๋ฐฐ๋‹ฌ์˜๋ฏผ์กฑ ๋“ฑ ๊ตญ๋‚ด ์œ ๋‹ˆ์ฝ˜ ์•ฑ๋“ค์˜ 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) ๋“ฑ ๋ฐ˜๋ณต๋˜๋Š” ๋ฐฑ์—”๋“œ ๊ธฐ์ดˆ ์ธํ”„๋ผ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์งœ์ง€ ์•Š๊ณ , ์ด ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๋ฅผ ๋ณต์ œํ•˜์—ฌ ์‹ ๊ทœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ฐœ๋ฐœ์— ์ฆ‰์‹œ ์ฐฉ์ˆ˜ํ•˜๋Š” ๊ณ ์† ์Šคํƒ€ํŠธ์—… ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ฒฝํ—˜ํ•ด ๋ณด์„ธ์š”.

๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ง€์‹DB โ€” ๋” ๋‚˜์€ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ์œ„ํ•ด