Skip to content

Latest commit

Β 

History

History
183 lines (132 loc) Β· 5.72 KB

File metadata and controls

183 lines (132 loc) Β· 5.72 KB

μ—μ΄μ „νŠΈ 개발 κ·œμΉ™

이 λ¬Έμ„œλŠ” AI μ—μ΄μ „νŠΈκ°€ node-packages λͺ¨λ…Έλ ˆν¬μ—μ„œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³  κΈ°μ—¬ν•  λ•Œ 따라야 ν•˜λŠ” κ·œμΉ™κ³Ό κ°€μ΄λ“œλΌμΈμ„ μ •μ˜ν•©λ‹ˆλ‹€.

λͺ©μ°¨


ν”„λ‘œμ νŠΈ κ°œμš”

node-packages λŠ” hmmhmmhm 의 개인 μ—°κ΅¬μš© npm νŒ¨ν‚€μ§€ λͺ¨λ…Έλ ˆν¬μž…λ‹ˆλ‹€. pnpm workspaces + Turborepo ꡬ쑰둜 운영되며, ν˜„μž¬ 10개 νŒ¨ν‚€μ§€λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.

  • base2000, base6000 β€” μ§„μˆ˜ λ³€ν™˜Β·μΈμ½”λ”© μ‹€ν—˜
  • biggest β€” μž„μ˜ 정밀도 큰 μˆ˜Β·μ†Œμˆ˜ 라이브러리
  • curse-script β€” ν…μŠ€νŠΈ λ³€ν™˜ μ‹€ν—˜
  • edge-crypto β€” μ—£μ§€ λŸ°νƒ€μž„μš© μ•”ν˜Έν™” 헬퍼
  • gauss-spiral β€” κ°€μš°μŠ€ λ‚˜μ„  μ’Œν‘œ μ‹œμŠ€ν…œ
  • mugunghwa β€” ν•œκΈ€ 기반 base 인코딩
  • patternly β€” νŒ¨ν„΄ λ§€μΉ­ μœ ν‹Έ
  • pseudo-shuffle β€” μˆœμ—΄ μ—†λŠ” κ°€μ§œ μ…”ν”Œ
  • usernamer β€” μ‚¬μš©μžλͺ… 생성기

각 νŒ¨ν‚€μ§€λŠ” λ…λ¦½μ μœΌλ‘œ npm 에 λ°œν–‰λ˜λ©°, 곡톡 μ˜μ‘΄μ„±Β·λ„κ΅¬ 섀정은 λ£¨νŠΈμ—μ„œ κ΄€λ¦¬ν•©λ‹ˆλ‹€.


μ½”λ“œ μž‘μ„± κ·œμΉ™

파일 크기 μ œν•œ

λͺ¨λ“  μ½”λ“œ νŒŒμΌμ€ 450쀄 μ΄ν•˜λ‘œ μž‘μ„±λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

  • μ΅œλŒ€ 쀄 수: 450쀄
  • ꢌμž₯ 쀄 수: 300-400쀄
  • 초과 μ‹œ 쑰치: 파일이 450쀄을 μ΄ˆκ³Όν•˜λ©΄ κΈ°λŠ₯λ³„λ‘œ λΆ„λ¦¬ν•˜μ—¬ λͺ¨λ“ˆν™”
  • μ˜ˆμ™Έ: μžλ™ 생성 파일(예: λΉŒλ“œ μ‚°μΆœλ¬Ό, lockfile) 은 μ˜ˆμ™Έλ‘œ λ‘˜ 수 있음

파일 뢄리 μ˜ˆμ‹œ

// ❌ λ‚˜μœ 예: ν•˜λ‚˜μ˜ νŒŒμΌμ— λͺ¨λ“  κΈ°λŠ₯ (600쀄)
// packages/biggest/src/index.ts (600쀄)

// βœ… 쒋은 예: κΈ°λŠ₯λ³„λ‘œ 뢄리
// packages/biggest/src/integer.ts (200쀄)
// packages/biggest/src/decimal.ts (180쀄)
// packages/biggest/src/format.ts (120쀄)
// packages/biggest/src/index.ts (50쀄, re-export)

μ½”λ“œ ν’ˆμ§ˆ

  • λͺ…ν™•μ„±: μ½”λ“œλŠ” λͺ…ν™•ν•˜κ³  μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ μž‘μ„±
  • μž¬μ‚¬μš©μ„±: 쀑볡 μ½”λ“œλ₯Ό μ΅œμ†Œν™”ν•˜κ³  곡톡 λ‘œμ§μ€ ν•¨μˆ˜λ‘œ μΆ”μΆœ
  • νƒ€μž… μ•ˆμ •μ„±: TypeScript 의 νƒ€μž… μ‹œμŠ€ν…œμ„ 적극 ν™œμš© (strict λͺ¨λ“œ μœ μ§€)
  • μ—λŸ¬ 핸듀링: λͺ¨λ“  비동기 μž‘μ—…κ³Ό μ™ΈλΆ€ API ν˜ΈμΆœμ— μ μ ˆν•œ μ—λŸ¬ 처리 κ΅¬ν˜„
  • 제둜 μ˜μ‘΄μ„± μ§€ν–₯: κ°€λŠ₯ν•œ ν•œ μ™ΈλΆ€ λŸ°νƒ€μž„ μ˜μ‘΄μ„±μ„ μΆ”κ°€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μΆ”κ°€ μ‹œ ν•©λ‹Ήν•œ μ‚¬μœ λ₯Ό PR 본문에 λͺ…μ‹œν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ

// βœ… 쒋은 예
export function parse(input: string): Result {
  if (!input) {
    throw new TypeError("input must be a non-empty string");
  }
  return doParse(input);
}

// ❌ λ‚˜μœ 예
export function parse(input: any) {
  return doParse(input);
}

컀밋 κ·œμΉ™

컀밋 λΉˆλ„

  • 주기적인 컀밋: 논리적인 μž‘μ—… λ‹¨μœ„λ§ˆλ‹€ 컀밋
  • μž‘μ€ λ‹¨μœ„: ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ κΈ°λŠ₯μ΄λ‚˜ μˆ˜μ •μ‚¬ν•­λ§Œ 포함
  • μ™„μ„±λœ μ½”λ“œ: λΉŒλ“œ μ‹€νŒ¨λ‚˜ λŸ°νƒ€μž„ μ—λŸ¬κ°€ μ—†λŠ” μƒνƒœμ—μ„œλ§Œ 컀밋

컀밋 λ©”μ‹œμ§€ ν˜•μ‹ (Conventional Commits)

<type>: <μ„€λͺ…>

[선택: λ³Έλ¬Έ]
  • feat β€” μ‹ κ·œ κΈ°λŠ₯
  • fix β€” 버그 μˆ˜μ •
  • docs β€” λ¬Έμ„œλ§Œ λ³€κ²½
  • chore β€” λΉŒλ“œ/도ꡬ/μ˜μ‘΄μ„±
  • refactor β€” λ™μž‘ λ³€κ²½ μ—†λŠ” ꡬ쑰 κ°œμ„ 
  • test β€” ν…ŒμŠ€νŠΈ μΆ”κ°€/μˆ˜μ •
  • perf β€” μ„±λŠ₯ κ°œμ„ 

μ˜ˆμ‹œ

feat: add base6000 hangul-aware decoder
fix: handle negative zero in biggest comparison
chore: bump turbo to 2.x

λ³΄μ•ˆ 및 κ°œμΈμ •λ³΄

  • λΉ„λ°€ν‚€Β·ν† ν°Β·μžκ²©μ¦λͺ…을 μ½”λ“œΒ·ν…ŒμŠ€νŠΈΒ·λ¬Έμ„œμ— ν¬ν•¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • 개인 정보(이메일, μ‹€λͺ…) λ₯Ό μ˜ˆμ‹œ μ½”λ“œμ— λ°•μ§€ μ•Šκ³ , μ˜λ„λœ mock 만 μ‚¬μš©ν•©λ‹ˆλ‹€.
  • λ³΄μ•ˆ κ΄€λ ¨ λ³€κ²½(예: edge-crypto 의 μ•Œκ³ λ¦¬μ¦˜ λ³€κ²½) 은 별도 PR 둜 λΆ„λ¦¬ν•˜κ³  commit λ©”μ‹œμ§€μ— λͺ…μ‹œν•©λ‹ˆλ‹€.

파일 ꡬ쑰

node-packages/
β”œβ”€β”€ packages/
β”‚   └── <name>/
β”‚       β”œβ”€β”€ src/
β”‚       β”œβ”€β”€ tests/         (μžˆλŠ” 경우)
β”‚       β”œβ”€β”€ package.json
β”‚       β”œβ”€β”€ tsconfig.json
β”‚       └── README.md
β”œβ”€β”€ package.json           (root, workspaces μ •μ˜)
β”œβ”€β”€ pnpm-workspace.yaml
β”œβ”€β”€ turbo.json
└── AGENTS.md / CLAUDE.md

각 νŒ¨ν‚€μ§€λŠ” 자기 μžμ‹ μ˜ package.json 을 κ°€μ§€λ©°, npm 에 독립 λ°œν–‰λ©λ‹ˆλ‹€.


μ½”λ“œ μŠ€νƒ€μΌ

  • 포맀터: prettier (pnpm format)
  • λ¦°ν„°: 각 νŒ¨ν‚€μ§€ λ‹¨μœ„λ‘œ turbo κ°€ μœ„μž„ (pnpm lint)
  • νƒ€μž… 체크: pnpm check-types
  • λΉŒλ“œ: pnpm build (turbo κ°€ 의쑴 κ·Έλž˜ν”„μ— 따라 μΊμ‹œΒ·λ³‘λ ¬ μ‹€ν–‰)

PR 제좜 μ „ μœ„ 4개λ₯Ό λͺ¨λ‘ ν†΅κ³Όμ‹œν‚΅λ‹ˆλ‹€.


λ¬Έμ„œν™”

  • 각 νŒ¨ν‚€μ§€λŠ” 자체 README.md λ₯Ό κ°€μ§€λ©°, μ„€μΉ˜Β·μ‚¬μš© 예제·API ν‘œλ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
  • μ˜μ–΄ README λ₯Ό μš°μ„ ν•˜λ©°, ν•œκ΅­μ–΄ README λŠ” μ„ νƒμ μž…λ‹ˆλ‹€ (μžˆλ‹€λ©΄ μ˜μ–΄μ™€ 동기 μœ μ§€).
  • μƒˆ νŒ¨ν‚€μ§€ μΆ”κ°€ μ‹œ root README.md 의 νŒ¨ν‚€μ§€ λͺ©λ‘λ„ κ°±μ‹ ν•©λ‹ˆλ‹€.

ν…ŒμŠ€νŠΈ

  • 각 νŒ¨ν‚€μ§€λŠ” μžκΈ°μ—κ²Œ μ ν•©ν•œ ν…ŒμŠ€νŠΈ 도ꡬλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€ (Vitest ꢌμž₯).
  • μ‹ κ·œ ν•¨μˆ˜Β·λ²„κ·Έ μˆ˜μ •μ—λŠ” νšŒκ·€ ν…ŒμŠ€νŠΈλ₯Ό λ™λ΄‰ν•©λ‹ˆλ‹€.
  • μ™ΈλΆ€ μ‹œμŠ€ν…œμ— μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ” λ‹¨μœ„ ν…ŒμŠ€νŠΈλ§Œ μš΄μ˜ν•©λ‹ˆλ‹€ (μ˜μ‘΄ν•˜λ©΄ mock 처리).

νŒ¨ν‚€μ§€ λ°œν–‰

  • 각 νŒ¨ν‚€μ§€μ˜ package.json 에 publishConfig.access = public λͺ…μ‹œ.
  • λ°œν–‰ μ „ pnpm build && pnpm check-types && pnpm lint λͺ¨λ‘ 톡과 확인.
  • 버전 λ²”ν”„λŠ” SemVer λ₯Ό λ”°λ¦…λ‹ˆλ‹€. breaking change λŠ” major.
  • npm λ°œν–‰ 토큰은 personal-agent/secrets/.npmrc.personal 을 μ‚¬μš©ν•©λ‹ˆλ‹€ (CI κ°€ μ•„λ‹Œ 둜컬 λ°œν–‰ μ‹œ).