--- category: Unified tags: [auto-consolidated, technical-documentation] title: [[Monorepo|Monorepo]] last_updated: 2026-05-02 --- # [[Monorepo|Monorepo]] ## πŸ“Œ Brief Summary > λͺ¨λ…Έλ ˆν¬(Monorepo)λŠ” λ‹€μˆ˜μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό 라이브러리 νŒ¨ν‚€μ§€(곡유 μ»΄ν¬λ„ŒνŠΈ, μœ ν‹Έλ¦¬ν‹° λ“±)λ₯Ό ν¬ν•¨ν•˜λŠ” μ„œλ‘œ μ—°κ²°λœ μ—¬λŸ¬ νŒ¨ν‚€μ§€λ“€μ„ 단일 μ €μž₯μ†Œ([[Repository|Repository]])μ—μ„œ κ΄€λ¦¬ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜μž…λ‹ˆλ‹€ [1, 2]. λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ˜ μ½”λ“œ 곡유λ₯Ό μš©μ΄ν•˜κ²Œ ν•˜μ§€λ§Œ, νŒ¨ν‚€μ§€λ§ˆλ‹€ κ°œλ³„μ μΈ 섀정이 쀑볡될 경우 'μ„€μ • λ“œλ¦¬ν”„νŠΈ(Configuration Drift)' ν˜„μƒκ³Ό 같은 μœ μ§€λ³΄μˆ˜μ˜ 어렀움을 μ΄ˆλž˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [2, 3]. 이λ₯Ό 효과적으둜 κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ μ„€μ •μ˜ 쀑앙 집쀑화와 루트(Root) λ ˆλ²¨μ—μ„œμ˜ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜(Orchestration) μ „λž΅μ΄ ν™œμš©λ©λ‹ˆλ‹€ [4, 5]. --- > λͺ¨λ…Έλ ˆν¬(Monorepo) 기반 ꡬ성 μ€‘μ•™ν™”λž€ λ‹€μˆ˜μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ‘΄μž¬ν•˜λŠ” λŒ€κ·œλͺ¨ μ €μž₯μ†Œμ—μ„œ [[ESLint|ESLint]]λ‚˜ Prettier와 같은 λ„κ΅¬μ˜ μ„€μ • 파일 쀑볡을 μ œκ±°ν•˜κ³  단일 μ§„μ‹€ 곡급원([[Single_Source_of_Truth|Single Source of Truth]])을 λ§ˆλ ¨ν•˜λŠ” μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μž…λ‹ˆλ‹€ [1], [2]. μ€‘μ•™ν™”λœ μ„€μ • νŒ¨ν‚€μ§€λ₯Ό κ΅¬μΆ•ν•˜κ³  이λ₯Ό 루트 λ ˆλ²¨μ—μ„œ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ν•˜μ—¬ 곡톡 κ·œμΉ™μ„ μ „μ—­μ μœΌλ‘œ 관리함과 λ™μ‹œμ— νŒ¨ν‚€μ§€ 고유의 μžμœ¨μ„±μ„ μœ μ§€ν•©λ‹ˆλ‹€ [3]. 이λ₯Ό 톡해 μ½”λ“œμ˜ μœ μ§€λ³΄μˆ˜μ„±μ„ κ·ΉλŒ€ν™”ν•˜κ³  개발 ν™˜κ²½μ˜ 일관성 및 검사 속도λ₯Ό 크게 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€ [4]. --- > λͺ¨λ…Έλ ˆν¬(Monorepo) μ„€μ • μ€‘μ•™ν™”λŠ” λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈ λ‚΄ μ—¬λŸ¬ νŒ¨ν‚€μ§€μ— λΆ„μ‚°λ˜μ–΄ μžˆλŠ” μ½”λ“œ μ»¨λ²€μ…˜([[ESLint|ESLint]], Prettier λ“±) 섀정을 단일 핡심 νŒ¨ν‚€μ§€λ‘œ ν†΅ν•©ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” μ•„ν‚€ν…μ²˜μž…λ‹ˆλ‹€ [1-3]. 이λ₯Ό 톡해 쑰직 λ‚΄ μ½”λ“œ ν’ˆμ§ˆ κ·œμΉ™μ˜ 단일 μ§„μ‹€ 곡급원([[Single_Source_of_Truth|Single Source of Truth]])을 κ΅¬μΆ•ν•˜μ—¬ μ„€μ • νŒŒνŽΈν™”λ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€ [3, 4]. 결과적으둜 전역적인 κ·œμΉ™ μ—…λ°μ΄νŠΈλ₯Ό μš©μ΄ν•˜κ²Œ ν•˜κ³ , 쀑볡을 μ œκ±°ν•˜μ—¬ λ¦°νŒ… 검사 및 μœ μ§€λ³΄μˆ˜ νš¨μœ¨μ„ κ·ΉλŒ€ν™”ν•©λ‹ˆλ‹€ [3, 5]. --- > λͺ¨λ…Έλ ˆν¬(Monorepo) μ•„ν‚€ν…μ²˜ 섀정은 μ—¬λŸ¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό λΌμ΄λΈŒλŸ¬λ¦¬κ°€ κ³΅μ‘΄ν•˜λŠ” λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈ ν™˜κ²½μ—μ„œ [[ESLint|ESLint]], Prettier, Husky, [[lint-staged|lint-staged]] λ“±μ˜ 도ꡬ듀을 효율적으둜 κ΅¬μ„±ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” λ°©λ²•λ‘ μž…λ‹ˆλ‹€ [1-3]. μ€‘λ³΅λœ μ„€μ • 파일둜 μΈν•œ κ΄€λ¦¬μ˜ 어렀움을 ν”Όν•˜κΈ° μœ„ν•΄ 쀑앙 집쀑식 μ„€μ • νŒ¨ν‚€μ§€μ™€ 루트 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜(Root Orchestration)을 λ„μž…ν•˜μ—¬ 단일 μ§„μ‹€ 곡급원([[Single_Source_of_Truth|Single Source of Truth]])을 ν˜•μ„±ν•©λ‹ˆλ‹€ [2-4]. 이λ₯Ό 톡해 νŒ¨ν‚€μ§€λ³„ μžμœ¨μ„±μ„ μœ μ§€ν•˜λ©΄μ„œλ„ 전역적인 μ½”λ“œ ν’ˆμ§ˆ κ·œμΉ™μ„ μΌκ΄€λ˜κ³  λΉ λ₯΄κ²Œ κ°•μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [4, 5]. --- > ν”„λ‘ νŠΈμ—”λ“œ 및 λͺ¨λ…Έλ ˆν¬(Monorepo) 개발 ν™˜κ²½ 섀정은 λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ—μ„œ μ½”λ“œ ν’ˆμ§ˆκ³Ό μŠ€νƒ€μΌμ˜ 일관성을 μœ μ§€ν•˜κ³  μ€‘λ³΅λœ 섀정을 쀄이기 μœ„ν•œ 핡심 κ³Όμ •μž…λ‹ˆλ‹€. [[Turborepo|Turborepo]]와 같은 λͺ¨λ…Έλ ˆν¬ ν™˜κ²½μ—μ„œλŠ” μ—¬λŸ¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό νŒ¨ν‚€μ§€κ°€ ν˜Όμž¬ν•˜λ―€λ‘œ 쀑앙 집쀑식 ESLint 및 Prettier μ„€μ • νŒ¨ν‚€μ§€λ₯Ό κ΅¬μΆ•ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€ [1, 2]. 여기에 [[Husky|Husky]]와 lint-stagedλ₯Ό κ²°ν•©ν•˜μ—¬ λ³€κ²½λœ νŒŒμΌμ— λŒ€ν•΄μ„œλ§Œ λ¦°νŒ…(linting)κ³Ό ν¬λ§·νŒ…([[Formatting|Formatting]])을 μˆ˜ν–‰ν•˜λ„λ‘ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜(orchestration)ν•¨μœΌλ‘œμ¨ 개발자의 생산성과 컀밋 속도λ₯Ό 크게 ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€ [3, 4]. ## πŸ“– Core Content * **λŒ€κ·œλͺ¨ λͺ¨λ…Έλ ˆν¬μ˜ 관리 문제점:** μ „ν˜•μ μΈ λͺ¨λ…Έλ ˆν¬λŠ” [[Next.js|Next.js]]와 같은 μ‚¬μš©μž/κ΄€λ¦¬μžμš© μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό 데이터 νŒŒμ„œ, νƒ€μž…, API ν΄λΌμ΄μ–ΈνŠΈ λ“±μ˜ 곡유 라이브러리둜 κ΅¬μ„±λ©λ‹ˆλ‹€ [1]. 규λͺ¨κ°€ 컀질수둝 μˆ˜μ‹­ 개의 νŒ¨ν‚€μ§€μ— ESLint, Prettier λ“±μ˜ μ„€μ • 파일이 μ€‘λ³΅ν•΄μ„œ μƒμ„±λ˜λ©°, μ΄λŠ” μΌκ΄€λ˜μ§€ μ•Šμ€ κ·œμΉ™ 적용, μ˜μ‘΄μ„± 쀑볡, 그리고 κ°œλ³„ νŒ¨ν‚€μ§€μ— 맞좘 `[[lint-staged|lint-staged]]` μ‹€ν–‰μ˜ 어렀움 λ“± μ‹¬κ°ν•œ μœ μ§€λ³΄μˆ˜ μ•…λͺ½(Maintenance Nightmare)으둜 μ΄μ–΄μ§‘λ‹ˆλ‹€ [1-3]. * **쀑앙 집쀑식 μ„€μ • (Centralised Configuration):** μ„€μ • λ“œλ¦¬ν”„νŠΈλ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ 단일 μ§„μ‹€μ˜ μ›μ²œ([[Single_Source_of_Truth|Single Source of Truth]]) 역할을 ν•˜λŠ” 쀑앙 집쀑식 μ„€μ • νŒ¨ν‚€μ§€(예: `@repo/eslint-config`)λ₯Ό μƒμ„±ν•˜μ—¬ ν™œμš©ν•©λ‹ˆλ‹€ [2, 4, 6]. 베이슀 κ·œμΉ™μ„ μ •μ˜ν•˜κ³  ν•„μš”ν•œ ν”„λ ˆμž„μ›Œν¬λ‚˜ 라이브러리 ν™˜κ²½μ— 맞게 μ‘°ν•©(Composable)ν•˜μ—¬ μ‚¬μš©ν•¨μœΌλ‘œμ¨, λ¦°νŒ… κ·œμΉ™ λ³€κ²½μ΄λ‚˜ λ³΄μ•ˆ μ—…λ°μ΄νŠΈλ₯Ό 전체 λͺ¨λ…Έλ ˆν¬μ— λ™μ‹œλ‹€λ°œμ μœΌλ‘œ μ‰½κ²Œ μ „νŒŒν•  수 μžˆμŠ΅λ‹ˆλ‹€ [2, 4]. * **루트 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ (Root Orchestration):** λͺ¨λ…Έλ ˆν¬ ν™˜κ²½μ—μ„œ [[Husky|Husky]]와 lint-staged 같은 도ꡬ가 각 νŒ¨ν‚€μ§€μ˜ κ·œμΉ™μ„ μ€€μˆ˜ν•˜λ©΄μ„œλ„ 효율적으둜 λ™μž‘ν•˜κ²Œ ν•˜λ €λ©΄, 루트(Root) λ ˆλ²¨μ—μ„œ 파일 νŒ¨ν„΄λ³„λ‘œ μ μ ˆν•œ νŒ¨ν‚€μ§€ 섀정을 λ§€ν•‘ν•˜λŠ” μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ 섀정이 ν•„μš”ν•©λ‹ˆλ‹€ [4, 7, 8]. 이λ₯Ό 톡해 νŒ¨ν‚€μ§€ κ°„μ˜ μžμœ¨μ„±μ„ 보μž₯ν•˜λ©΄μ„œλ„ μ€‘μ•™μ—μ„œ 도ꡬλ₯Ό ν†΅μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [7, 8]. * **λΉŒλ“œ 도ꡬ 캐싱 ν™œμš©:** 쀑앙 μ§‘μ€‘ν™”λœ μ„€μ • νŒ¨ν‚€μ§€λ₯Ό [[Turborepo|Turborepo]] λ“±μ˜ κΈ€λ‘œλ²Œ μ˜μ‘΄μ„±(Global Dependency)으둜 μ„€μ •ν•˜λ©΄, κ·œμΉ™ λ³€κ²½ μ‹œ λͺ¨λ“  νŒ¨ν‚€μ§€μ˜ μΊμ‹œλ₯Ό μ˜¬λ°”λ₯΄κ²Œ λ¬΄νš¨ν™”ν•˜λ©΄μ„œλ„ λ³€κ²½λœ νŒŒμΌμ— λŒ€ν•΄μ„œλ§Œ λΉ λ₯Έ λ¦°νŒ…κ³Ό 검사λ₯Ό μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [9]. (참고둜 λͺ¨λ…Έλ ˆν¬ 도ꡬ μƒνƒœκ³„μ—λŠ” Turborepo 외에도 Nx, Bazel, Lerna 등이 μ‘΄μž¬ν•©λ‹ˆλ‹€ [10, 11]). --- - **문제점 (μ„€μ • κ΄€λ¦¬μ˜ μ•…λͺ½):** λŒ€κ·œλͺ¨ λͺ¨λ…Έλ ˆν¬ ν™˜κ²½μ—μ„œλŠ” [[Next.js|Next.js]] μ•±, 라이브러리 νŒ¨ν‚€μ§€, 곡유 μ½”λ“œ λ“± 각 νŒ¨ν‚€μ§€λ§ˆλ‹€ `.eslintrc.json`κ³Ό `.eslintignore` 같은 μ„€μ • 파일이 μ€‘λ³΅λ˜μ–΄ μ‘΄μž¬ν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€ [1], [5]. μ΄λŸ¬ν•œ μ„€μ •μ˜ νŒŒνŽΈν™”μ™€ λ³΅μ œλŠ” νŒ¨ν‚€μ§€ κ°„ κ·œμΉ™μ˜ 뢈일치λ₯Ό μ΄ˆλž˜ν•˜κ³  일괄적인 μ—…λ°μ΄νŠΈλ₯Ό μ–΄λ ΅κ²Œ λ§Œλ“€λ©°, 특히 λͺ¨λ…Έλ ˆν¬ λ£¨νŠΈμ—μ„œ `[[lint-staged|lint-staged]]`λ₯Ό μ‹€ν–‰ν•΄ λ³€κ²½λœ 파일만 κ²€μ‚¬ν•˜κ³ μž ν•  λ•Œ κ°œλ³„ νŒ¨ν‚€μ§€μ˜ κ·œμΉ™μ„ μ‘΄μ€‘ν•˜κΈ° μ–΄λ ΅κ²Œ λ§Œλ“œλŠ” 큰 단점이 μžˆμŠ΅λ‹ˆλ‹€ [1], [5]. - **해결을 μœ„ν•œ 3단계 μ•„ν‚€ν…μ²˜:** 1. **μ€‘μ•™ν™”λœ μ„€μ • νŒ¨ν‚€μ§€ (Centralised Config Package):** λͺ¨λ…Έλ ˆν¬ 내뢀에 λ³„λ„μ˜ νŒ¨ν‚€μ§€(예: `@repo/eslint-config`)λ₯Ό μƒμ„±ν•˜μ—¬ κΈ°λ³Έ(Base), Next.js, 라이브러리 μš©λ„μ˜ μ‘°ν•© κ°€λŠ₯ν•œ 사전 μ„€μ •(Preset)을 κ΅¬μ„±ν•©λ‹ˆλ‹€ [3], [6], [7]. 이λ₯Ό 톡해 핡심 κ·œμΉ™μ— λŒ€ν•œ 단일 μ§„μ‹€ 곡급원을 μ œκ³΅ν•˜λ©°, 이 νŒ¨ν‚€μ§€μ˜ κ·œμΉ™μ„ λ³€κ²½ν•˜λ©΄ λͺ¨λ“  νŒ¨ν‚€μ§€κ°€ μΌκ΄€λ˜κ²Œ ν˜œνƒμ„ λ°›μŠ΅λ‹ˆλ‹€ [2]. 2. **νŒ¨ν‚€μ§€ 레벨 μ„€μ •μ˜ μžμœ¨μ„±:** 각 νŒ¨ν‚€μ§€λŠ” μ΅œμ†Œν•œμ˜ μ„€μ • 파일(`eslint.config.mjs`)λ§Œμ„ κ°€μ Έ 쀑앙 νŒ¨ν‚€μ§€μ˜ 사전 섀정을 μž„ν¬νŠΈν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€ [2]. λ™μ‹œμ— νŒ¨ν‚€μ§€ νŠΉμ • μ˜€λ²„λΌμ΄λ“œ(override) κ·œμΉ™μ„ μΆ”κ°€ν•  수 μžˆμ–΄ 각 νŒ¨ν‚€μ§€μ˜ μžμœ¨μ„±μ„ 보μž₯ν•©λ‹ˆλ‹€ [2], [4]. 3. **루트 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ μ„€μ • (Root Orchestration Config):** λͺ¨λ…Έλ ˆν¬ λ£¨νŠΈμ— 파일 κΈ€λ‘œλΈŒ νŒ¨ν„΄μ„ 기반으둜 μ μ ˆν•œ 사전 섀정에 λ§€ν•‘ν•˜λŠ” μ΅œμƒμœ„(root) μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ 섀정을 μƒμ„±ν•©λ‹ˆλ‹€ [8]. 이 계측은 νŒ¨ν‚€μ§€μ˜ 경계λ₯Ό μ‘΄μ€‘ν•˜μ—¬ κ°œλ³„ νŒ¨ν‚€μ§€μ— μ˜¬λ°”λ₯Έ κ·œμΉ™μ΄ ν• λ‹Ήλ˜λ„λ‘ μ œμ–΄ν•˜λŠ” 핡심 λΉ„κ²°(Secret Sauce)μž…λ‹ˆλ‹€ [8]. - **도ꡬ 톡합 및 κΈ°λŒ€ 효과:** - **λΉ λ₯΄κ³  μ •κ΅ν•œ 검사:** 루트 섀정이 λ„μž…λœ μƒνƒœμ—μ„œ [[Husky|Husky]]와 `lint-staged`λ₯Ό μ—°λ™ν•˜λ©΄, 컀밋 μ‹œ λ³€κ²½λœ νŒŒμΌλ§Œμ„ 식별해 루트 섀정이 ν•΄λ‹Ή νŒŒμΌμ„ μ μ ˆν•œ νŒ¨ν‚€μ§€ νŠΉμ • κ·œμΉ™μ— λ§€ν•‘ν•˜μ—¬ 검사(Linting)λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€ [9]. - **캐싱을 ν†΅ν•œ μ„±λŠ₯ μ΅œμ ν™”:** [[Turborepo|Turborepo]] μ „μ—­ μ˜μ‘΄μ„±μœΌλ‘œ 쀑앙 ESLint ꡬ성 νŒ¨ν‚€μ§€λ₯Ό μ„€μ •ν•˜λ©΄ 섀정이 변경될 λ•Œλ§ˆλ‹€ μΊμ‹œλ₯Ό λ¬΄νš¨ν™”ν•˜κ³  린트 κ²°κ³Όλ₯Ό 효과적으둜 μΊμ‹±ν•˜μ—¬ 속도λ₯Ό 높일 수 μžˆμŠ΅λ‹ˆλ‹€ [9], [4]. - **μ½”λ“œλ² μ΄μŠ€ μ •ν™” 효과:** 쀑볡 μ„€μ • 파일 및 쒅속성을 μ‚­μ œν•¨μœΌλ‘œμ¨ `package.json` 라인 μˆ˜μ™€ 락(lock) 파일 크기가 ν˜„μ €νžˆ 쀄어듀고, 전체 λͺ¨λ…Έλ ˆν¬μ—μ„œ μ½”λ“œ 라인이 크게 κ°μ†Œν•˜λŠ” 순효과λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€ [10]. --- * **λ°œμƒν•˜λŠ” 문제점 (μ„€μ • νŒŒνŽΈν™”)** λŒ€κ·œλͺ¨ λͺ¨λ…Έλ ˆν¬(예: [[Turborepo|Turborepo]] 기반) ν™˜κ²½μ—λŠ” λ‹€μˆ˜μ˜ [[Next.js|Next.js]] μ• ν”Œλ¦¬μΌ€μ΄μ…˜, 라이브러리, 곡유 μ½”λ“œ νŒ¨ν‚€μ§€κ°€ ν˜Όμž¬λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€ [2]. νŒ¨ν‚€μ§€λ§ˆλ‹€ μ€‘λ³΅λœ `.eslintrc.json`κ³Ό `.eslintignore` 파일 및 μ˜μ‘΄μ„±μ΄ 흩어져 있으면, κ·œμΉ™μ„ μ „μ—­μ μœΌλ‘œ μ—…λ°μ΄νŠΈν•˜κΈ° μ–΄λ ΅κ³  섀정이 μΌκ΄€λ˜μ§€ μ•Šκ²Œ μ–΄κΈ‹λ‚˜λŠ” 'μ„€μ • λ“œλ¦¬ν”„νŠΈ(Configuration Drift)'κ°€ λ°œμƒν•˜μ—¬ μœ μ§€λ³΄μˆ˜μ— 큰 μ•…μ˜ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€ [1-3]. * **쀑앙화 μ•„ν‚€ν…μ²˜ 섀계** μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ κ΅¬μ‘°λŠ” 크게 μ„Έ κ°€μ§€ μš”μ†Œλ‘œ λ‚˜λ‰©λ‹ˆλ‹€ [6]. 1. **쀑앙 μ„€μ • νŒ¨ν‚€μ§€ 생성**: λ‚΄λΆ€μ μœΌλ‘œ 곡톡 μ‚¬μš©ν•  νŒ¨ν‚€μ§€(예: `@repo/eslint-config`)λ₯Ό μƒμ„±ν•˜κ³ , Base, Next.js, Library용 λ“± λͺ©μ μ— λ§žλŠ” μ‘°ν•© κ°€λŠ₯ν•œ(composable) 프리셋을 λ‚΄λ³΄λƒ…λ‹ˆλ‹€ [6-8]. 2. **κ°œλ³„ νŒ¨ν‚€μ§€ 적용**: κ°œλ³„ νŒ¨ν‚€μ§€λ“€μ€ λΆˆν•„μš”ν•œ 쀑볡 μ„€μ • λŒ€μ‹ , 쀑앙 νŒ¨ν‚€μ§€μ—μ„œ μ œκ³΅ν•˜λŠ” 프리셋을 가져와(import) μ‚¬μš©ν•˜λ˜ ν•„μš”ν•œ νŒ¨ν‚€μ§€λ³„ μ˜€λ²„λΌμ΄λ“œ(override)만 μ΅œμ†Œν•œμœΌλ‘œ μ„ μ–Έν•©λ‹ˆλ‹€ [4, 5, 9]. 3. **루트 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜(Root Orchestration)**: λͺ¨λ…Έλ ˆν¬ μ΅œμƒλ‹¨μ— μ „μ—­ μ„€μ • 파일(`eslint.config.mjs`)을 λ§Œλ“€κ³  파일 νŒ¨ν„΄(glob pattern)을 μ΄μš©ν•΄ νŠΉμ • νŒ¨ν‚€μ§€ κ²½λ‘œμ— μ μ ˆν•œ 프리셋을 λ§€ν•‘ν•©λ‹ˆλ‹€ [10]. μ΄λŠ” 각 νŒ¨ν‚€μ§€μ˜ 경계λ₯Ό μ‘΄μ€‘ν•˜λ©΄μ„œλ„ ν•˜λ‚˜μ˜ μœ„μΉ˜μ—μ„œ ν†΅μ œν•  수 있게 ν•΄μ€λ‹ˆλ‹€ [10]. * **μžλ™ν™” λ„κ΅¬μ™€μ˜ κ²°ν•© 및 이점** * 루트 λ ˆλ²¨μ—μ„œ `[[Husky|Husky]]`와 `[[lint-staged|lint-staged]]`λ₯Ό μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ μ„€μ •κ³Ό κ²°ν•©ν•˜λ©΄, 컀밋 μ „(pre-commit)에 λ³€κ²½λœ 파일만 효율적으둜 κ²€μ‚¬ν•˜λ©΄μ„œλ„ 각 νŒ¨ν‚€μ§€μ— λ§žλŠ” 린트 κ·œμΉ™μ„ μ •ν™•νžˆ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [11]. * μ€‘μ•™ν™”λœ 섀정을 μ μš©ν•˜λ©΄ νŒ¨ν‚€μ§€ μ „λ°˜μ— 걸친 쀑볡 μ˜μ‘΄μ„±μ„ μ œκ±°ν•΄ `package-lock.json` 크기가 μΆ•μ†Œλ˜κ³ , μ „λ°˜μ μΈ μ½”λ“œ 라인 μˆ˜κ°€ λŒ€ν­ κ°μ†Œν•©λ‹ˆλ‹€ [12]. * λ˜ν•œ `Turborepo`의 캐싱 κΈ°λŠ₯κ³Ό 맞물렀 μΊμ‹œ λ¬΄νš¨ν™”λ₯Ό μ΅œμ†Œν™”ν•˜κ³  λΉ λ₯Έ λ¦°νŒ…κ³Ό μ‹ μ†ν•œ 컀밋이 κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€ [5, 11]. * **기술적 μœ μ˜μ‚¬ν•­** * ν•΄λ‹Ή 쀑앙화 ꡬ성 방식은 ν”Œλž« ꡬ성(Flat Config) ν˜•μ‹μ„ μ§€μ›ν•˜λŠ” ESLint 9 버전 이상에 μ΅œμ ν™”λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€ [3, 7]. * ESLint 8 ν™˜κ²½μ—μ„œ 이 νŒ¨ν„΄μ„ μ μš©ν•˜λ €λ©΄ `.eslintrc.js` 파일 ν™•μž₯μžμ™€ CommonJS λͺ¨λ“ˆ 내보내기λ₯Ό μ‚¬μš©ν•˜λŠ” λ“±μ˜ 좔가적인 쑰정이 ν•„μš”ν•©λ‹ˆλ‹€ [13]. --- - **κΈ°μ‘΄ λͺ¨λ…Έλ ˆν¬ μ„€μ •μ˜ 문제점** 일반적인 λͺ¨λ…Έλ ˆν¬μ—λŠ” [[Next.js|Next.js]] μ• ν”Œλ¦¬μΌ€μ΄μ…˜, 라이브러리 νŒ¨ν‚€μ§€, 곡유 μ½”λ“œ 등이 ν•¨κ»˜ μ‘΄μž¬ν•©λ‹ˆλ‹€ [2]. νŒ¨ν‚€μ§€λ§ˆλ‹€ κ°œλ³„μ μœΌλ‘œ `.eslintrc.json`κ³Ό `.eslintignore` νŒŒμΌμ„ μž‘μ„±ν•˜κ³  ESLint와 Prettier 쒅속성을 μ€‘λ³΅μœΌλ‘œ μ„€μΉ˜ν•˜κ²Œ 되면, λ¦°νŒ… κ·œμΉ™μ΄ νŒŒνŽΈν™”λ˜κ³  관리가 맀우 μ–΄λ €μ›Œμ§‘λ‹ˆλ‹€ [2]. 특히 λͺ¨λ…Έλ ˆν¬ 루트 λ‹¨μœ„μ—μ„œ `lint-staged`λ₯Ό μ‹€ν–‰ν•˜μ—¬ λ³€κ²½λœ 파일만 κ²€μ‚¬ν•˜λ € ν•  λ•Œ, 각 νŒ¨ν‚€μ§€μ˜ κ³ μœ ν•œ κ·œμΉ™μ„ μ€€μˆ˜ν•˜λ©΄μ„œ μ‹€ν–‰ν•˜λŠ” 것이 큰 μž₯μ• λ¬Όλ‘œ μž‘μš©ν•©λ‹ˆλ‹€ [3]. - **루트 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ 및 쀑앙 집쀑식 μ•„ν‚€ν…μ²˜** ν˜„λŒ€μ μΈ λͺ¨λ…Έλ ˆν¬ ν™˜κ²½μ—μ„œλŠ” ꡬ성 쀑볡을 쀄이기 μœ„ν•΄ λ‹€μŒκ³Ό 같은 3단계 μ•„ν‚€ν…μ²˜λ₯Ό λ„μž…ν•©λ‹ˆλ‹€ [3]. 1. **쀑앙 집쀑식 μ„€μ • νŒ¨ν‚€μ§€ 생성:** `@repo/eslint-config`와 같은 λ‚΄λΆ€ νŒ¨ν‚€μ§€λ₯Ό λ§Œλ“€μ–΄ TypeScript 지원 및 Prettier 톡합 등을 ν¬ν•¨ν•˜λŠ” κΈ°λ³Έ(base) μ„€μ •κ³Ό Next.js, 일반 λΌμ΄λΈŒλŸ¬λ¦¬μ— 맞좘 사전 μ„€μ •(Preset)을 λͺ¨λ“ˆλ‘œ κ΅¬μ„±ν•©λ‹ˆλ‹€ [3, 6, 7]. 2. **νŒ¨ν‚€μ§€ 레벨 μ„€μ • 적용:** 각 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 및 라이브러리 νŒ¨ν‚€μ§€λŠ” λ…μžμ μΈ μ„€μ • νŒŒμΌμ„ 쀑볡 μƒμ„±ν•˜λŠ” λŒ€μ‹ , μ€‘μ•™μ—μ„œ λ§Œλ“  섀정을 μ΅œμ†Œν•œμ˜ μ½”λ“œλ‘œ 가져와(import) μ‚¬μš©ν•©λ‹ˆλ‹€ [4]. 3. **루트 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜(Root Orchestration) ꡬ성:** λͺ¨λ…Έλ ˆν¬ 루트의 μ„€μ • νŒŒμΌμ—μ„œ νŠΉμ • 파일 νŒ¨ν„΄(Glob pattern)에 따라 μ•Œλ§žμ€ νŒ¨ν‚€μ§€ 섀정이 μ μš©λ˜λ„λ‘ λ§€ν•‘ν•©λ‹ˆλ‹€ [8]. 이λ₯Ό 톡해 각 νŒ¨ν‚€μ§€μ˜ 경계λ₯Ό μ‘΄μ€‘ν•˜λ©΄μ„œ μ „μ—­ κΈ°λ³Έ κ·œμΉ™μ„ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [8]. - **μž‘μ—… νŒŒμ΄ν”„λΌμΈ 연동과 μ„±λŠ₯ μ΅œμ ν™”** - **Husky와 lint-staged 연동:** 루트 `package.json`에 `lint-staged`λ₯Ό κ΅¬μ„±ν•˜κ³  Husky의 `pre-commit` 훅을 μ„€μ •ν•˜μ—¬, 루트 μ„€μ •(Root config) κΈ°μ€€μœΌλ‘œ λ³€κ²½λœ 파일만 효율적으둜 λ¦°νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€ [9]. 이 κ³Όμ •μ—μ„œ 루트 μ„€μ •μ˜ 파일 νŒ¨ν„΄ 맀핑을 톡해 κ°œλ³„ νŒ¨ν‚€μ§€ κ·œμΉ™μ΄ μ•ˆμ „ν•˜κ²Œ 보μž₯λ©λ‹ˆλ‹€ [9]. - **[[Turborepo|Turborepo]] 캐싱 톡합:** 쀑앙 ESLint μ„€μ • νŒ¨ν‚€μ§€λ₯Ό `turbo.json`의 μ „μ—­ 쒅속성(global dependency)으둜 μΆ”κ°€ν•¨μœΌλ‘œμ¨, 린트 κ·œμΉ™μ΄ 변경될 λ•Œ λͺ¨λ“  νŒ¨ν‚€μ§€μ˜ Turborepo μΊμ‹œλ₯Ό μžλ™μœΌλ‘œ λ¬΄νš¨ν™”ν•˜μ—¬ 항상 μ΅œμ‹  κ·œμΉ™μ΄ μ μš©λ˜λ„λ‘ ν•©λ‹ˆλ‹€ [9]. - **곡식 μ§€μΉ¨μ˜ λŒ€μ•ˆ:** `lint-staged`의 곡식 κ°€μ΄λ“œλŠ” λ£¨νŠΈμ— 도ꡬλ₯Ό μ„€μΉ˜ν•˜κ³  각 νŒ¨ν‚€μ§€λ³„ κ°œλ³„ μ„€μ • νŒŒμΌμ„ 두어 'κ°€μž₯ κ°€κΉŒμš΄(closest) ꡬ성'을 κ²©λ¦¬ν•˜μ—¬ μ‚¬μš©ν•˜λ„λ‘ ꢌμž₯ν•©λ‹ˆλ‹€ [10]. ν•˜μ§€λ§Œ 루트 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜μ„ ν™œμš©ν•˜λ©΄ μ—¬λŸ¬ 섀정을 μ‘°μœ¨ν•˜μ—¬ λ”μš± μœ μ§€λ³΄μˆ˜κ°€ νŽΈν•˜κ³  λΉ λ₯΄λ©° μœ μ—°ν•œ 쀑앙 집쀑식 ν™˜κ²½μ„ κ°–μΆœ 수 μžˆμŠ΅λ‹ˆλ‹€ [11]. --- * **λͺ¨λ…Έλ ˆν¬ ν™˜κ²½μ˜ 문제점** μ—¬λŸ¬ 개의 [[Next.js|Next.js]] μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό 라이브러리 νŒ¨ν‚€μ§€κ°€ ν¬ν•¨λœ λŒ€κ·œλͺ¨ λͺ¨λ…Έλ ˆν¬μ—μ„œλŠ” 각 νŒ¨ν‚€μ§€λ§ˆλ‹€ `.eslintrc.json` 및 `.eslintignore` 파일이 쀑볡 μƒμ„±λ˜κ³  린트 κ·œμΉ™μ΄ 일관성 없이 μ μš©λ˜λŠ” μœ μ§€λ³΄μˆ˜ λ¬Έμ œκ°€ λ°œμƒν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€ [5, 6]. 특히 λͺ¨λ…Έλ ˆν¬ λ£¨νŠΈμ—μ„œ `lint-staged`λ₯Ό μ‹€ν–‰ν•˜μ—¬ λ³€κ²½λœ 파일만 κ²€μ‚¬ν•˜λ € ν•  λ•Œ, 각 νŒ¨ν‚€μ§€μ˜ 독립적인 λ¦°νŒ… κ·œμΉ™μ„ μ‘΄μ€‘ν•˜κ²Œ λ§Œλ“œλŠ” 것이 μ£Όμš”ν•œ ν•΄κ²° κ³Όμ œμž…λ‹ˆλ‹€ [2]. * **쀑앙 집쀑식 ꡬ성(Centralised Config) νŒ¨ν‚€μ§€ ꡬ좕** * μ΄λŸ¬ν•œ ꡬ성 쀑볡 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ `@repo/eslint-config`와 같은 λ‚΄λΆ€ 곡유 νŒ¨ν‚€μ§€λ₯Ό μƒμ„±ν•˜μ—¬, 상황에 맞게 μ‘°ν•©ν•  수 μžˆλŠ” 프리셋(base, next.js, library)을 κ΅¬μ„±ν•©λ‹ˆλ‹€ [2, 7]. * **Base Config**: ESLint 9의 평면 ꡬ성(flat config) 포맷을 기반으둜 ν•˜λ©°, TypeScript 지원, Prettier 톡합(좩돌 κ·œμΉ™ λΉ„ν™œμ„±ν™”)을 기본으둜 ν¬ν•¨ν•©λ‹ˆλ‹€ [7]. * **Next.js Config / Library Config**: Next.js 앱을 μœ„ν•œ React μ „μš© λ¦°νŒ… κ·œμΉ™κ³Ό λΉ„ React νŒ¨ν‚€μ§€λ₯Ό μœ„ν•œ κ°€λ²Όμš΄ TypeScript κ·œμΉ™μ„ 각각 λΆ„λ¦¬ν•˜μ—¬ μž‘μ„±ν•©λ‹ˆλ‹€ [8]. * **루트 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜(Root Orchestration) ꡬ성** * λͺ¨λ…Έλ ˆν¬ λ£¨νŠΈμ— `eslint.config.mjs`λ₯Ό μƒμ„±ν•˜μ—¬ 파일 νŒ¨ν„΄(glob pattern)에 따라 각 νŒ¨ν‚€μ§€μ— μ μ ˆν•œ ꡬ성을 λ§€ν•‘ν•©λ‹ˆλ‹€ [9]. * 이 방식은 `lint-staged`κ°€ λͺ¨λ…Έλ ˆν¬ λ£¨νŠΈμ—μ„œ μ‹€ν–‰λ˜λ”λΌλ„ νŒ¨ν‚€μ§€ 경계λ₯Ό μ‘΄μ€‘ν•˜μ—¬ 각 νŒ¨ν‚€μ§€κ°€ μžμ‹ μ—κ²Œ λ§žλŠ” μ˜¬λ°”λ₯Έ κ·œμΉ™(예: Next.js용 λ˜λŠ” 라이브러리용)을 뢀여받도둝 ν•΄μ€λ‹ˆλ‹€ [9, 10]. * **Husky 및 lint-staged 연동** * 루트의 `package.json`κ³Ό `.husky/pre-commit` νŒŒμΌμ— `lint-staged`와 Huskyλ₯Ό μ—°λ™ν•˜μ—¬ 컀밋 μ‹œ λ³€κ²½λœ νŒŒμΌμ— λŒ€ν•΄μ„œλ§Œ ESLint와 Prettierκ°€ μ‹€ν–‰λ˜λ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€ [3]. * 이λ₯Ό 톡해 μ½”λ“œ 전체λ₯Ό λ¦°νŠΈν•˜λŠ” μ‹œκ°„μ„ μ ˆμ•½ν•˜κ³ , κ°œλ°œμžκ°€ μ½”λ“œλ₯Ό 컀밋할 λ•Œ μžλ™μœΌλ‘œ ν¬λ§·νŒ…κ³Ό 린트 μˆ˜μ •μ„ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [3, 4]. * **Turborepoμ™€μ˜ 캐싱 톡합 및 λ„μž… 효과** * `turbo.json`에 ESLint ꡬ성 νŒ¨ν‚€μ§€λ₯Ό μ „μ—­ μ’…μ†μ„±μœΌλ‘œ μΆ”κ°€ν•˜μ—¬ 린트 κ²°κ³Όλ₯Ό μΊμ‹±ν•˜κ³  μ„€μ • λ³€κ²½ μ‹œ 전체 μΊμ‹œλ₯Ό λ¬΄νš¨ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [3]. * 이λ₯Ό 톡해 νŒ¨ν‚€μ§€ μˆ˜μ€€μ˜ 쀑볡 섀정이 크게 쀄어듀고([[Single_Source_of_Truth|Single Source of Truth]] 확보), `lint-staged` 및 캐싱을 ν†΅ν•œ λΉ λ₯Έ 컀밋이 κ°€λŠ₯ν•΄μ§€λ©°, μƒˆλ‘œμš΄ νŒ¨ν‚€μ§€ μΆ”κ°€ μ‹œ ν™•μž₯μ„±κ³Ό 개발자 κ²½ν—˜(DX)이 크게 ν–₯μƒλ©λ‹ˆλ‹€ [4, 11]. ## βš–οΈ Trade-offs & Caveats - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. --- - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. --- - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. --- - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. --- - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— Knowledge Connections - **Related Topics:** [[ESLint|ESLint]], Prettier, lint-staged, [[Husky|Husky]], [[Turborepo|Turborepo]] - **Projects/Contexts:** λŒ€κ·œλͺ¨ μ†Œν”„νŠΈμ›¨μ–΄ μ—”μ§€λ‹ˆμ–΄λ§ 및 CI/CD νŒŒμ΄ν”„λΌμΈ, μžλ™ν™”λœ μ½”λ“œ κ±°λ²„λ„ŒμŠ€(Automated Governance) - **Contradictions/Notes:** λͺ¨λ…Έλ ˆν¬ λ‚΄ `lint-staged` 적용과 κ΄€λ ¨ν•˜μ—¬ `lint-staged`의 곡식 지침은 μ €μž₯μ†Œ λ£¨νŠΈμ— 도ꡬλ₯Ό μ„€μΉ˜ν•˜κ³  각 νŒ¨ν‚€μ§€μ— μ™„μ „νžˆ 격리된 λ³„λ„μ˜ μ„€μ • νŒŒμΌμ„ λ‘λŠ” 것을 ꢌμž₯ν•˜μ§€λ§Œ [12, 13], Turborepoλ₯Ό ν™œμš©ν•˜λŠ” λͺ¨λ˜ μ•„ν‚€ν…μ²˜ ν™˜κ²½μ—μ„œλŠ” λ£¨νŠΈμ— μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ μ„€μ • ν•˜λ‚˜λ₯Ό 두고 파일 νŒ¨ν„΄μ„ 각 νŒ¨ν‚€μ§€ ν™˜κ²½μ— λ§€ν•‘ν•˜λŠ” 방식이 더 λ‚˜μ€ 개발자 κ²½ν—˜(DX)을 μ œκ³΅ν•˜λŠ” λŒ€μ•ˆμœΌλ‘œ μ œμ‹œλ˜κΈ°λ„ ν•©λ‹ˆλ‹€ [4, 8]. --- *Last updated: 2026-04-19* --- --- - **Related Topics:** [[ESLint|ESLint]], Prettier, lint-staged, [[Turborepo|Turborepo]] - **Projects/Contexts:** λŒ€κ·œλͺ¨ λͺ¨λ…Έλ ˆν¬ ν™˜κ²½μ˜ λ¦°νŒ… 및 ν¬λ§€νŒ… μ„€μ • ν˜„λŒ€ν™” ν”„λ‘œμ νŠΈ - **Contradictions/Notes:** 곡식적인 `lint-staged` λͺ¨λ…Έλ ˆν¬ κ°€μ΄λ“œμ—μ„œλŠ” μ΅œμƒμœ„μ— `lint-staged`λ₯Ό μ„€μΉ˜ν•˜κ³  각 νŒ¨ν‚€μ§€λ§ˆλ‹€ λ³„λ„μ˜ ꡬ성 νŒŒμΌμ„ 두어 고립되게 μ²˜λ¦¬ν•˜λΌκ³  μ•ˆλ‚΄ν•˜λ©° 루트 섀정이 ν•˜μœ„ 섀정을 μžλ™μœΌλ‘œ μ±„μ›Œμ£Όμ§€ μ•ŠλŠ”λ‹€κ³  λͺ…μ‹œν•˜μ§€λ§Œ [11], 루트 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ ꡬ성을 λ„μž…ν•˜λ©΄ μ΅œμƒμœ„μ—μ„œ μ‹€ν–‰ν•˜λ©΄μ„œλ„ νŒ¨ν„΄ 맀핑을 톡해 각 νŒ¨ν‚€μ§€μ˜ κ·œμΉ™μ„ μ„±κ³΅μ μœΌλ‘œ λ³‘ν•©Β·μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [8], [12]. --- *Last updated: 2026-04-19* --- --- - **Related Topics:** [[ESLint|ESLint]], Prettier, Turborepo, [[Husky|Husky]], [[lint-staged|lint-staged]] - **Projects/Contexts:** λŒ€κ·œλͺ¨ λͺ¨λ…Έλ ˆν¬(Monorepo) ν”„λ‘œμ νŠΈ, 닀쀑 νŒ¨ν‚€μ§€ 관리 ν™˜κ²½ - **Contradictions/Notes:** λͺ¨λ…Έλ ˆν¬ ν™˜κ²½μ—μ„œ `lint-staged`λ₯Ό μ μš©ν•˜λŠ” ꡬ쑰와 κ΄€λ ¨ν•˜μ—¬ λ‹€λ₯Έ 관점이 μ‘΄μž¬ν•©λ‹ˆλ‹€. 일반적인 κ°€μ΄λ“œμ—μ„œλŠ” νŒ¨ν‚€μ§€ κ°„μ˜ 격리성 확보λ₯Ό μœ„ν•΄ 각 νŒ¨ν‚€μ§€λ³„λ‘œ λ…λ¦½λœ μ„€μ • νŒŒμΌμ„ λ‘˜ 것을 ꢌμž₯ν•˜μ§€λ§Œ [14, 15], Turborepoλ₯Ό ν™œμš©ν•˜λŠ” λͺ¨λ…Έλ ˆν¬ ν™˜κ²½μ—μ„œλŠ” μ΅œμƒμœ„μ—μ„œ '루트 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜(Root Orchestration)'을 톡해 파일 νŒ¨ν„΄μœΌλ‘œ λ¦°νŒ…μ„ 쀑앙 μ œμ–΄ν•˜λŠ” 것이 쀑볡 μ œκ±°μ™€ 일관성 λ©΄μ—μ„œ 더 효과적인 ν•΄κ²°μ±…μœΌλ‘œ μ œμ‹œλ˜κ³  μžˆμŠ΅λ‹ˆλ‹€ [6, 9, 16]. --- *Last updated: 2026-04-19* --- --- - **Related Topics:** [[Turborepo|Turborepo]], ESLint, Prettier, [[Husky|Husky]], [[lint-staged|lint-staged]] - **Projects/Contexts:** Next.js μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 및 라이브러리 관리, λͺ¨λ…Έλ ˆν¬ 린트 μžλ™ν™” - **Contradictions/Notes:** μ†ŒμŠ€ [10]에 λ”°λ₯΄λ©΄ `lint-staged`의 곡식 지침은 μ—¬λŸ¬ ν•˜μœ„ νŒ¨ν‚€μ§€μ˜ ꡬ성 νŒŒμΌμ„ μƒν˜Έ 격리된 μƒνƒœλ‘œ μ·¨κΈ‰ν•˜μ—¬ κ°€μž₯ κ°€κΉŒμš΄ νŒŒμΌμ„ μ μš©ν•˜λΌκ³  μ„€λͺ…ν•˜μ§€λ§Œ, μ†ŒμŠ€ [3, 8, 12]μ—μ„œλŠ” 단일 μ§„μ‹€ 곡급원을 기반으둜 λ£¨νŠΈμ—μ„œ 파일 νŒ¨ν„΄μ„ λ§€ν•‘ν•΄μ£ΌλŠ” 루트 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜(Root Orchestration) 방식이 μœ μ§€λ³΄μˆ˜μ™€ μ‹€ν–‰ 속도 λ©΄μ—μ„œ λͺ¨λ…Έλ ˆν¬μ— 더 λ›°μ–΄λ‚œ 해결책이라고 μ£Όμž₯ν•©λ‹ˆλ‹€. --- *Last updated: 2026-04-19* --- --- - **Related Topics:** [[Turborepo|Turborepo]], ESLint, Prettier, [[Husky|Husky]], [[lint-staged|lint-staged]] - **Projects/Contexts:** Next.js μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 및 λ‚΄λΆ€ 라이브러리 νŒ¨ν‚€μ§€ 관리 - **Contradictions/Notes:** λͺ¨λ…Έλ ˆν¬μ—μ„œ `lint-staged`의 곡식 ꢌμž₯ 사항은 각 νŒ¨ν‚€μ§€λ³„λ‘œ λ³„λ„μ˜ μ„€μ • νŒŒμΌμ„ 두고 κ°€μž₯ κ°€κΉŒμš΄ ꡬ성 파일이 μ μš©λ˜λ„λ‘ ν•˜λŠ” κ²ƒμ΄μ§€λ§Œ [12, 13], Turborepoλ₯Ό ν™œμš©ν•˜λŠ” ν˜„λŒ€μ μΈ μ ‘κ·Ό λ°©μ‹μ—μ„œλŠ” 루트 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ ꡬ성 파일(`eslint.config.mjs`)을 톡해 파일 νŒ¨ν„΄μ„ 각 프리셋에 μ€‘μ•™μ—μ„œ λ§€ν•‘ν•˜λŠ” 방식이 더 효율적인 ν•΄κ²°μ±…μœΌλ‘œ μ œμ‹œλ©λ‹ˆλ‹€ [9, 10]. λ˜ν•œ, ESLint와 Prettierλ₯Ό ν•¨κ»˜ μ‚¬μš©ν•  경우 ν¬λ§·νŒ… μΆ©λŒμ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄ λ°˜λ“œμ‹œ `[[eslint-config-prettier|eslint-config-prettier]]`λ₯Ό μ„€μ • λ°°μ—΄μ˜ λ§ˆμ§€λ§‰μ— μœ„μΉ˜μ‹œμΌœμ•Ό ν•©λ‹ˆλ‹€ [14]. --- *Last updated: 2026-04-19* ---