๐Ÿ’ก Biome vs Prettier + ESLint - 2026๋…„์—๋Š” ์–ด๋–ค ์กฐํ•ฉ์„ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ

โ€ข

Prettier + ESLint, ๊ทธ๋ฆฌ๊ณ  Biome

ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Prettier์™€ ESLint๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ณ  ๊ณ„์‹ ๊ฐ€์š”? ์ด ์กฐํ•ฉ์€ ์˜ค๋žซ๋™์•ˆ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์˜ ํ‘œ์ค€์ด์—ˆ์–ด์š”. ํ•˜์ง€๋งŒ ์„ค์ • ํŒŒ์ผ์ด ๋Š˜์–ด๋‚˜๊ณ , ์„œ๋กœ ์ถฉ๋Œํ•˜๋Š” ๊ทœ์น™์„ ํ•ด๊ฒฐํ•˜๋А๋ผ ์‹œ๊ฐ„์„ ์“ด ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋ฉด Biome์ด ์ข‹์€ ๋Œ€์•ˆ์ด ๋  ์ˆ˜ ์žˆ์–ด์š”.

์ด ๊ธ€์—์„œ๋Š” Biome๊ณผ Prettier + ESLint ์กฐํ•ฉ์„ ์„ฑ๋Šฅ, ์„ค์ • ๋ณต์žก๋„, ์ƒํƒœ๊ณ„, DX ๊ด€์ ์—์„œ ๋น„๊ตํ•ด์š”. ํ”„๋กœ์ ํŠธ ์ƒํ™ฉ์— ๋งž๋Š” ๋„๊ตฌ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฑฐ์˜ˆ์š”.

์ด ๊ธ€์€ ESLint์™€ Prettier์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์ดํ•ดํ•œ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ด์š”.

Prettier + ESLint ์กฐํ•ฉ์˜ ์—ญํ• 

Prettier๋Š” ์ฝ”๋“œ ํฌ๋งคํ„ฐ์˜ˆ์š”. ๋“ค์—ฌ์“ฐ๊ธฐ, ๋”ฐ์˜ดํ‘œ, ์„ธ๋ฏธ์ฝœ๋ก  ๋“ฑ ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ์ž๋™์œผ๋กœ ํ†ต์ผํ•ด์š”. ESLint๋Š” ๋ฆฐํ„ฐ์˜ˆ์š”. ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜, ์ž˜๋ชป๋œ Hook ์‚ฌ์šฉ ๋“ฑ ์ฝ”๋“œ ํ’ˆ์งˆ ๋ฌธ์ œ๋ฅผ ์ฐพ์•„๋‚ด์š”.

๋‘ ๋„๊ตฌ๋Š” ๊ฐ์ž์˜ ์˜์—ญ์—์„œ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ, ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋ช‡ ๊ฐ€์ง€ ๋ถˆํŽธํ•œ ์ ์ด ์žˆ์–ด์š”.

  • eslint-config-prettier๋กœ ESLint์˜ ํฌ๋งคํŒ… ๊ทœ์น™์„ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ด์š”
  • .eslintrc, .prettierrc, .eslintignore, .prettierignore ๋“ฑ ์„ค์ • ํŒŒ์ผ์ด ๋งŽ์•„์š”
  • ๋‘ ๋„๊ตฌ์˜ ์„ค์ •์ด ์ถฉ๋Œํ•˜๋ฉด ๋””๋ฒ„๊น…์ด ํ•„์š”ํ•ด์š”

Biome์˜ ๋“ฑ์žฅ

Biome์€ Rome ํ”„๋กœ์ ํŠธ์—์„œ 2023๋…„์— ํฌํฌ๋˜์–ด ์‹œ์ž‘ํ•œ ์˜ฌ์ธ์› ๋„๊ตฌ์˜ˆ์š”. Rust๋กœ ์ž‘์„ฑ๋œ ๋‹จ์ผ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ, ํฌ๋งคํŒ…๊ณผ ๋ฆฐํŒ…์„ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•ด์š”. 2025๋…„์— v2๋ฅผ ์ถœ์‹œํ•˜๋ฉฐ ์•ˆ์ •ํ™”๋˜์—ˆ๊ณ , ํ˜„์žฌ v2.3๊นŒ์ง€ ๋ฐœ์ „ํ–ˆ์–ด์š”.

๋น„๊ต ํ•ญ๋ชฉPrettier + ESLintBiome
์–ธ์–ดJavaScriptRust
ํŒจํ‚ค์ง€ ์ˆ˜10๊ฐœ ์ด์ƒ (ํ”Œ๋Ÿฌ๊ทธ์ธ ํฌํ•จ)1๊ฐœ
์„ค์ • ํŒŒ์ผ3-4๊ฐœ1๊ฐœ (biome.json)
์—ญํ• ํฌ๋งคํ„ฐ + ๋ฆฐํ„ฐ (๋ณ„๋„)ํฌ๋งคํ„ฐ + ๋ฆฐํ„ฐ + import ์ •๋ ฌ (ํ†ตํ•ฉ)

์„ค์ •๊ณผ ์‹œ์ž‘ํ•˜๊ธฐ

Prettier + ESLint ์„ค์ •

Prettier์™€ ESLint๋ฅผ ํ•จ๊ป˜ ์„ค์ •ํ•˜๋ ค๋ฉด ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ , ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ •์ด ํ•„์š”ํ•ด์š”.

# Prettier + ESLint ์„ค์น˜
pnpm add -D eslint prettier eslint-config-prettier \
  @eslint/js typescript-eslint
// eslint.config.ts
import js from "@eslint/js";
import tseslint from "typescript-eslint";
import prettierConfig from "eslint-config-prettier";

export default tseslint.config(
  js.configs.recommended,
  ...tseslint.configs.recommended,
  prettierConfig, // Prettier์™€ ์ถฉ๋Œํ•˜๋Š” ESLint ๊ทœ์น™ ๋น„ํ™œ์„ฑํ™”
);
// .prettierrc
{
  "semi": true,
  "singleQuote": false,
  "tabWidth": 2,
  "trailingComma": "es5"
}

IDE ์„ค์ •๊นŒ์ง€ ํฌํ•จํ•˜๋ฉด .vscode/settings.json์— ํฌ๋งคํ„ฐ ์ง€์ •๋„ ํ•„์š”ํ•ด์š”.

Biome ์„ค์ •

Biome์€ ํ•˜๋‚˜์˜ ํŒจํ‚ค์ง€์™€ ํ•˜๋‚˜์˜ ์„ค์ • ํŒŒ์ผ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์–ด์š”.

# Biome ์„ค์น˜ ๋ฐ ์ดˆ๊ธฐํ™”
pnpm add -D @biomejs/biome
pnpm biome init
// biome.json
{
  "$schema": "https://biomejs.dev/schemas/2.3.14/schema.json",
  "organizeImports": {
    "enabled": true
  },
  "linter": {
    "enabled": true,
    "rules": {
      "recommended": true
    }
  },
  "formatter": {
    "enabled": true,
    "indentStyle": "space",
    "indentWidth": 2
  }
}

Biome์€ biome init ๋ช…๋ น์–ด ํ•˜๋‚˜๋กœ ๊ธฐ๋ณธ ์„ค์ • ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์š”. ํฌ๋งคํŒ…, ๋ฆฐํŒ…, import ์ •๋ ฌ์ด ๋ชจ๋‘ ํ•˜๋‚˜์˜ ํŒŒ์ผ์—์„œ ๊ด€๋ฆฌ๋ผ์š”.

๊ธฐ์กด ํ”„๋กœ์ ํŠธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

์ด๋ฏธ Prettier์™€ ESLint๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด Biome์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.

# ESLint ์„ค์ • ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
pnpm biome migrate eslint

# Prettier ์„ค์ • ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
pnpm biome migrate prettier --write

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„๊ตฌ๊ฐ€ ๊ธฐ์กด ์„ค์ •์„ ์ž๋™์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ์ง€๋งŒ, 100% ๋™์ผํ•œ ๋™์ž‘์„ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š์•„์š”. ์ผ๋ถ€ ๊ทœ์น™์€ Biome์—์„œ ์˜๋„์ ์œผ๋กœ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•ด์š”.

์„ฑ๋Šฅ ๋น„๊ต

Biome์ด ๊ฐ€์žฅ ํฐ ์ฐจ์ด๋ฅผ ๋ณด์ด๋Š” ์˜์—ญ์€ ์„ฑ๋Šฅ์ด์—์š”. Rust๋กœ ์ž‘์„ฑ๋œ ๋‹จ์ผ ๋ฐ”์ด๋„ˆ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— JavaScript ๊ธฐ๋ฐ˜ ๋„๊ตฌ์™€๋Š” ๊ทผ๋ณธ์ ์ธ ์†๋„ ์ฐจ์ด๊ฐ€ ์žˆ์–ด์š”.

๋ฒค์น˜๋งˆํฌ ๊ฒฐ๊ณผ

์‹ค์ œ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ฒ ์ด์Šค(10,000๊ฐœ ํŒŒ์ผ) ๊ธฐ์ค€ ์ธก์ • ๊ฒฐ๊ณผ์˜ˆ์š”.

์ž‘์—…Prettier + ESLintBiome์ฐจ์ด
ํฌ๋งคํŒ…12.1์ดˆ0.3์ดˆ์•ฝ 40๋ฐฐ
๋ฆฐํŒ…45.2์ดˆ0.8์ดˆ์•ฝ 56๋ฐฐ
์ „์ฒด ๊ฒ€์‚ฌ57.3์ดˆ1.1์ดˆ์•ฝ 52๋ฐฐ

CI ํ™˜๊ฒฝ์—์„œ์˜ ์ฒด๊ฐ ์ฐจ์ด

๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ํŒŒ์ผ ํ•˜๋‚˜๋ฅผ ์ €์žฅํ•  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋˜๋ฏ€๋กœ ์ฒด๊ฐ ์ฐจ์ด๊ฐ€ ํฌ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์–ด์š”. ํ•˜์ง€๋งŒ CI ํ™˜๊ฒฝ์—์„œ ์ „์ฒด ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๊ฒ€์‚ฌํ•  ๋•Œ๋Š” ์ฐจ์ด๊ฐ€ ๋ถ„๋ช…ํ•ด์š”.

# CI์—์„œ Biome ๊ฒ€์‚ฌ ์‹คํ–‰
pnpm biome check .

์ˆ˜ ๋ถ„์ด ๊ฑธ๋ฆฌ๋˜ lint + format ๊ฒ€์‚ฌ๊ฐ€ ์ˆ˜ ์ดˆ๋กœ ์ค„์–ด๋“ค์–ด์š”. ํŠนํžˆ PR๋งˆ๋‹ค ์‹คํ–‰ํ•˜๋Š” CI ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋น„์šฉ๊ณผ ์‹œ๊ฐ„์„ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ์–ด์š”.

์„ฑ๋Šฅ ์ฐจ์ด์˜ ์ด์œ 

Biome์€ Rust๋กœ ์ž‘์„ฑ๋˜์–ด ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์‹คํ–‰๋˜๊ณ , ๋ฉ€ํ‹ฐ์ฝ”์–ด๋ฅผ ํ™œ์šฉํ•œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•ด์š”. JavaScript ๋Ÿฐํƒ€์ž„ ์œ„์—์„œ ์‹คํ–‰๋˜๋Š” ESLint, Prettier์™€๋Š” ๊ทผ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ตฌ์กฐ์˜ˆ์š”.

๊ทœ์น™ ์ปค๋ฒ„๋ฆฌ์ง€์™€ ์ƒํƒœ๊ณ„

ESLint์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒํƒœ๊ณ„

ESLint์˜ ๊ฐ€์žฅ ํฐ ๊ฐ•์ ์€ ํ’๋ถ€ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒํƒœ๊ณ„์˜ˆ์š”.

  • eslint-plugin-react - React ๊ทœ์น™
  • eslint-plugin-react-hooks - Hook ๊ทœ์น™
  • @typescript-eslint - TypeScript ๊ทœ์น™
  • eslint-plugin-import - import ๊ทœ์น™
  • eslint-plugin-jsx-a11y - ์ ‘๊ทผ์„ฑ ๊ทœ์น™
  • eslint-plugin-tailwindcss - Tailwind CSS ๊ทœ์น™

์ด ์™ธ์—๋„ ์ˆ˜๋ฐฑ ๊ฐœ์˜ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์กด์žฌํ•ด์š”. ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํŠนํ™”๋œ ๊ทœ์น™์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.

Biome์˜ ๊ทœ์น™ ๋ฒ”์œ„

Biome v2.3 ๊ธฐ์ค€์œผ๋กœ 340๊ฐœ ์ด์ƒ์˜ ๋ฆฐํŠธ ๊ทœ์น™์„ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์–ด์š”. ESLint, typescript-eslint, eslint-plugin-react ๋“ฑ์˜ ์ฃผ์š” ๊ทœ์น™ ๋Œ€๋ถ€๋ถ„์„ ํฌํ•จํ•ด์š”.

// biome.json - ๊ทœ์น™ ๊ทธ๋ฃน๋ณ„ ์„ค์ • ์˜ˆ์‹œ
{
  "linter": {
    "rules": {
      "recommended": true,
      "correctness": {
        "noUnusedVariables": "error"
      },
      "suspicious": {
        "noExplicitAny": "warn"
      },
      "style": {
        "useConst": "error"
      }
    }
  }
}

Biome v2๋ถ€ํ„ฐ๋Š” TypeScript ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ์ž์ฒด ํƒ€์ž… ์ถ”๋ก  ์—”์ง„์œผ๋กœ ํƒ€์ž… ์ธ์‹ ๋ฆฐํŠธ ๊ทœ์น™๋„ ์ง€์›ํ•ด์š”. ์ด๋Š” @typescript-eslint์˜ typed linting๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ, ๋ณ„๋„์˜ tsconfig.json ์„ค์ • ์—†์ด ๋™์ž‘ํ•˜๋Š” ์ ์ด ๋‹ฌ๋ผ์š”.

ํ”„๋ ˆ์ž„์›Œํฌ ์ง€์› ํ˜„ํ™ฉ

ํ”„๋ ˆ์ž„์›ŒํฌESLintBiome
React (JSX/TSX)โœ… ์™„์ „ ์ง€์›โœ… ์™„์ „ ์ง€์›
Vueโœ… ํ”Œ๋Ÿฌ๊ทธ์ธโœ… v2.3๋ถ€ํ„ฐ ์ง€์›
Svelteโœ… ํ”Œ๋Ÿฌ๊ทธ์ธโœ… v2.3๋ถ€ํ„ฐ ์ง€์›
Astroโœ… ํ”Œ๋Ÿฌ๊ทธ์ธโœ… v2.3๋ถ€ํ„ฐ ์ง€์›
CSSโœ… stylelint (๋ณ„๋„)โœ… ๋‚ด์žฅ
GraphQLโŒ ๋ณ„๋„ ๋„๊ตฌโœ… ๋‚ด์žฅ

์ฃผ์˜

ESLint์˜ ํŠน์ • ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์˜์กดํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ผ๋ฉด Biome์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ๊ทœ์น™์ด Biome์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ์ด ํ•„์š”ํ•ด์š”. Biome ๊ณต์‹ ๋ฌธ์„œ์—์„œ ๊ทœ์น™ ๋งคํ•‘ ํ‘œ๋ฅผ ์ œ๊ณตํ•ด์š”.

๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜(DX) ๋น„๊ต

์—๋””ํ„ฐ ํ†ตํ•ฉ

๋‘ ๋„๊ตฌ ๋ชจ๋‘ VS Code ํ™•์žฅ์„ ์ œ๊ณตํ•ด์š”.

Prettier + ESLint๋Š” ๊ฐ๊ฐ์˜ ํ™•์žฅ์„ ์„ค์น˜ํ•ด์•ผ ํ•ด์š”. editor.formatOnSave๋กœ Prettier๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ESLint ํ™•์žฅ์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฆฐํŠธ ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•ด์š”. ๋‘ ํ™•์žฅ ๊ฐ„ ์„ค์ •์ด ๊ผฌ์ด๋ฉด ๋””๋ฒ„๊น…์ด ํ•„์š”ํ•ด์š”.

Biome์€ ํ•˜๋‚˜์˜ ํ™•์žฅ์œผ๋กœ ํฌ๋งคํŒ…๊ณผ ๋ฆฐํŒ…์„ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•ด์š”. ๋ฉ€ํ‹ฐ ๋ฃจํŠธ ์›Œํฌ์ŠคํŽ˜์ด์Šค, ์ €์žฅํ•˜์ง€ ์•Š์€ ํŒŒ์ผ ์ง€์› ๋“ฑ IDE ํ†ตํ•ฉ์ด ๊น”๋”ํ•ด์š”.

// .vscode/settings.json - Biome ์‚ฌ์šฉ ์‹œ
{
  "editor.defaultFormatter": "biomejs.biome",
  "editor.formatOnSave": true,
  "editor.codeActionsOnSave": {
    "quickfix.biome": "explicit",
    "source.organizeImports.biome": "explicit"
  }
}

์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ํ’ˆ์งˆ

Biome์€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€์˜ ๊ฐ€๋…์„ฑ์— ๋งŽ์€ ํˆฌ์ž๋ฅผ ํ•œ ๋„๊ตฌ์˜ˆ์š”. ๊ทœ์น™ ์œ„๋ฐ˜ ์‹œ ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€, ์™œ ๋ฌธ์ œ์ธ์ง€, ์–ด๋–ป๊ฒŒ ๊ณ ์ณ์•ผ ํ•˜๋Š”์ง€๋ฅผ ํ•จ๊ป˜ ์•Œ๋ ค์ค˜์š”.

# Biome ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์˜ˆ์‹œ
  ร— lint/correctness/noUnusedVariables

  This variable is unused.

    1 โ”‚ const unused = "hello";
      โ”‚       ^^^^^^

  Suggested fix: Remove the unused variable.

ESLint๋„ --format ์˜ต์…˜์œผ๋กœ ์ถœ๋ ฅ์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ธฐ๋ณธ ์ถœ๋ ฅ์—์„œ Biome์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋” ์ง๊ด€์ ์ด์—์š”.

import ์ •๋ ฌ

import ๋ฌธ์˜ ์ˆœ์„œ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ๋„ ์ฝ”๋“œ ํ’ˆ์งˆ์— ์ค‘์š”ํ•œ ์š”์†Œ์˜ˆ์š”.

Prettier + ESLint ํ™˜๊ฒฝ์—์„œ๋Š” ๋ณ„๋„์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ•„์š”ํ•ด์š”. eslint-plugin-import์˜ import/order ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, @trivago/prettier-plugin-sort-imports ๊ฐ™์€ Prettier ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ด์š”.

// eslint.config.ts - import ์ •๋ ฌ ๊ทœ์น™ ์„ค์ •
import importPlugin from "eslint-plugin-import";

export default [
  {
    plugins: { import: importPlugin },
    rules: {
      "import/order": [
        "error",
        {
          groups: [
            "builtin",
            "external",
            "internal",
            "parent",
            "sibling",
            "index",
          ],
          "newlines-between": "always",
          alphabetize: { order: "asc" },
        },
      ],
    },
  },
];

Biome์€ import ์ •๋ ฌ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด์š”. organizeImports๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋ณ„๋„์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์—†์ด ๋™์ž‘ํ•ด์š”.

// biome.json - import ์ •๋ ฌ์€ ๊ธฐ๋ณธ ์„ค์ •์— ํฌํ•จ
{
  "organizeImports": {
    "enabled": true
  }
}
# import ์ •๋ ฌ ํฌํ•จ ์ „์ฒด ๊ฒ€์‚ฌ ๋ฐ ์ž๋™ ์ˆ˜์ •
pnpm biome check --fix .

Biome์€ ์ €์žฅ ์‹œ ์ž๋™์œผ๋กœ import๋ฅผ ์ •๋ ฌํ•ด์š”. VS Code ์„ค์ •์—์„œ source.organizeImports.biome์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋ณ„๋„ ์กฐ์ž‘ ์—†์ด ๋™์ž‘ํ•ด์š”.

์„ค์ • ๋ณต์žก๋„ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ

ํ•ญ๋ชฉPrettier + ESLintBiome
์„ค์น˜ ํŒจํ‚ค์ง€ ์ˆ˜5-10๊ฐœ ์ด์ƒ1๊ฐœ
์„ค์ • ํŒŒ์ผ ์ˆ˜3-4๊ฐœ1๊ฐœ
์ถฉ๋Œ ํ•ด๊ฒฐeslint-config-prettier ํ•„์š”ํ•ด๋‹น ์—†์Œ
ignore ์„ค์ •๋ณ„๋„ ํŒŒ์ผ 2๊ฐœbiome.json ๋‚ด ์„ค์ •
import ์ •๋ ฌ์ถ”๊ฐ€ ํ”Œ๋Ÿฌ๊ทธ์ธ ํ•„์š”๋‚ด์žฅ

์–ด๋–ค ์ƒํ™ฉ์—์„œ ๋ฌด์—‡์„ ์„ ํƒํ• ๊นŒ

Biome์„ ์ถ”์ฒœํ•˜๋Š” ๊ฒฝ์šฐ

  • ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ
  • CI/CD ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•  ๋•Œ
  • ์„ค์ • ํŒŒ์ผ์„ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
  • React, Vue, Svelte ๋“ฑ ์ฃผ์š” ํ”„๋ ˆ์ž„์›Œํฌ๋งŒ ์‚ฌ์šฉํ•  ๋•Œ
  • ๋ชจ๋…ธ๋ ˆํฌ์—์„œ ์ผ๊ด€๋œ ๋„๊ตฌ๋ฅผ ์ ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ

Prettier + ESLint๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

  • ํŠน์ˆ˜ํ•œ ESLint ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์˜์กดํ•˜๋Š” ํ”„๋กœ์ ํŠธ
  • ํŒ€์—์„œ ESLint ์ปค์Šคํ…€ ๊ทœ์น™์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
  • Biome์ด ์•„์ง ์ง€์›ํ•˜์ง€ ์•Š๋Š” YAML, SCSS ๋“ฑ์ด ํ•ต์‹ฌ์ธ ๊ฒฝ์šฐ
  • ๊ธฐ์กด ์„ค์ •์ด ์•ˆ์ •์ ์ด๊ณ  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋น„์šฉ์ด ๋ถ€๋‹ด๋˜๋Š” ๊ฒฝ์šฐ

์˜์‚ฌ๊ฒฐ์ • ์ฒดํฌ๋ฆฌ์ŠคํŠธ

๋‹ค์Œ ์งˆ๋ฌธ์— ๋‹ตํ•ด๋ณด์„ธ์š”.

  • ํ”„๋กœ์ ํŠธ์—์„œ ESLint ํ”Œ๋Ÿฌ๊ทธ์ธ์„ 3๊ฐœ ์ด์ƒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‚˜์š”?
  • ์ปค์Šคํ…€ ESLint ๊ทœ์น™์„ ์ž‘์„ฑํ•ด์„œ ์‚ฌ์šฉํ•˜๋‚˜์š”?
  • CI ํŒŒ์ดํ”„๋ผ์ธ์—์„œ lint/format ์‹œ๊ฐ„์ด ๋ณ‘๋ชฉ์ธ๊ฐ€์š”?
  • ์„ค์ • ํŒŒ์ผ ๊ด€๋ฆฌ์— ๋ถˆํŽธํ•จ์„ ๋А๋ผ๊ณ  ์žˆ๋‚˜์š”?
  • YAML, SCSS ๋“ฑ Biome ๋ฏธ์ง€์› ํฌ๋งท์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋‚˜์š”?

ํ”Œ๋Ÿฌ๊ทธ์ธ ์˜์กด๋„๊ฐ€ ๋‚ฎ๊ณ , CI ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•˜๋‹ค๋ฉด Biome์„ ๊ณ ๋ คํ•ด๋ณด์„ธ์š”. ๋ฐ˜๋Œ€๋กœ ๋ณต์žกํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์กฐํ•ฉ์ด ํ•„์ˆ˜๋ผ๋ฉด Prettier + ESLint๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒŒ ๋‚˜์•„์š”.

๋งˆ๋ฌด๋ฆฌ

Biome๊ณผ Prettier + ESLint ๋น„๊ต์˜ ํ•ต์‹ฌ์„ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์•„์š”.

  • ์„ฑ๋Šฅ - Biome์ด 10-50๋ฐฐ ์ด์ƒ ๋นจ๋ผ์š”. Rust ๊ธฐ๋ฐ˜ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์žฅ์ ์ด์—์š”
  • ์„ค์ • - Biome์€ ํŒจํ‚ค์ง€ 1๊ฐœ, ์„ค์ • ํŒŒ์ผ 1๊ฐœ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์–ด์š”
  • ์ƒํƒœ๊ณ„ - ESLint์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒํƒœ๊ณ„๋Š” ์—ฌ์ „ํžˆ ๊ฐ•๋ ฅํ•œ ์ฐจ๋ณ„์ ์ด์—์š”
  • ์ง€์› ๋ฒ”์œ„ - Biome v2.3์—์„œ Vue, Svelte, Astro, CSS, GraphQL๊นŒ์ง€ ์ง€์›์ด ํ™•๋Œ€๋˜์—ˆ์–ด์š”
  • ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ - biome migrate ๋ช…๋ น์–ด๋กœ ๊ธฐ์กด ์„ค์ •์„ ์ž๋™ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์–ด์š”

2026๋…„ ๊ธฐ์ค€์œผ๋กœ Biome์€ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ์—์„œ Prettier + ESLint๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์— ๋„๋‹ฌํ–ˆ์–ด์š”. ์ƒˆ ํ”„๋กœ์ ํŠธ๋ผ๋ฉด Biome์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ด์š”. ๊ธฐ์กด ํ”„๋กœ์ ํŠธ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์˜์กด๋„๋ฅผ ํ™•์ธํ•œ ํ›„ ์ ์ง„์ ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ์ „๋žต์ด ์ข‹์•„์š”.

์ฐธ๊ณ  ์ž๋ฃŒ

์™ธ๋ถ€ ๋งํฌ