logoRawon_Log
홈블로그소개

Built with Next.js, Bun, Tailwind CSS and Shadcn/UI

Web

Biome.js

Rawon
2025년 8월 2일
목차
소개
ESLint / Prettier
ESLint
Prettier
Biome
Biome을 사용해야 하는 이유
Biome 설정
라이브러리 설치 및 IDE 익스텐션 설치
IDE 설정
biome.json 설정
biome.json 예시)

목차

소개
ESLint / Prettier
ESLint
Prettier
Biome
Biome을 사용해야 하는 이유
Biome 설정
라이브러리 설치 및 IDE 익스텐션 설치
IDE 설정
biome.json 설정
biome.json 예시)

소개

저는 프론트엔드 개발을 하다 보면 ESLint, Prettier 라는 도구들을 주로 사용해왔습니다. 저 뿐만 아니라 다른 분들도 이 조합을 많이 사용하시리라 생각됩니다. 그런데 간혹 eslint-plugin-prettier를 사용하다보면 극심한 속도저하를 경험하게 되었습니다.

[info] eslint-plugin-prettier
코드 스타일과 관련된 문제를 prettier의 규칙에 따라 검사하고 수정할 수 있도록 해주는 플러그인

이에 다른 대안을 찾던 중 Biome 이란 것을 알게 되었고 ESLint와 Prettier 대신 사용해보려 합니다.

ESLint / Prettier

Biome에 대해 알아보기 전에 ESLint와 Prettier가 무엇인지 간략하게만 알아보겠습니다.

ESLint

  • 자바스크립트와 타입스크립트 코드를 위한 정적 코드 분석 도구
  • 정적 코드 분석이란, 코드를 실제로 실행하지 않고 코드의 문법, 스타일, 오류 등을 점검하는 것을 의미
  • 즉, 코드 품질을 유지하고 코딩 스타일의 일관성을 지키기 위한 목적으로 사용

Prettier

  • 코드의 형식을 자동으로 정리해주는 도구
  • 코딩 스타일 자동화, 협업 간 충돌 방지 등 목적으로 사용

Biome

Biome은 자바스크립트, 타입스크립트, JSX, TSX, JSON을 위한 빠른 포매터이며, 동시에 성능이 뛰어난 린터의 역할도 합니다.

Biome을 사용해야 하는 이유

  • 기존 ESLint+Prettier 조합에 비해 속도가 빠름
  • 정확히 어느 부분이 어떻게 틀렸는지 정보를 제공
  • 설정이 간단하며, 기존 ESLint, Prettier와 높은 호환성을 가짐

Biome 설정

  • 공식문서 참고

라이브러리 설치 및 IDE 익스텐션 설치

bash
bun add --dev --exact @biomejs/biome

IDE 설정

  • 라이브러리 뿐만 아니라 VSCODE 와 같은 IDE에서 ==Biome== 을 검색해서 익스텐션까지 설치를 해주어야 합니다.
  • 또한, CMD+Shift+P 커맨드 팔레트를 열고
  • Format Document With.. ➡️ Configure Default Formatter... ➡️ Biome 선택

biome.json 설정

bash
biome init
  • 위 명령어를 실행하면 프로젝트 루트경로에 biome.json 파일이 생성 됩니다.
  • 여기서부터는 공식문서를 참고해서 포맷터나 린트를 설정해주시면 됩니다!

biome.json 예시)

  • 제가 자주 사용하는 설정들을 예시로 남겨놓겠습니다! 읽어주셔서 감사합니다.
json
{
  "$schema": "<https://biomejs.dev/schemas/1.9.4/schema.json>",

  "vcs": {
    "enabled": true,
    "clientKind": "git",
    "useIgnoreFile": true
  },

  "files": {
    "ignore": ["node_modules", ".next", "dist", "build", "out"],
    "ignoreUnknown": true
  },

  "formatter": {
    "enabled": true,
    "indentStyle": "space",
    "indentWidth": 2,
    "lineWidth": 80
  },

  "javascript": {
    "formatter": {
      "quoteStyle": "single",
      "jsxQuoteStyle": "double",
      "trailingCommas": "all",
      "semicolons": "always",
      "arrowParentheses": "always"
    }
  },

  "organizeImports": {
    "enabled": true
  },

  "linter": {
    "enabled": true,
    "rules": {
      "recommended": true,
      "suspicious": {
        "noExplicitAny": "off"
      },
      "complexity": {
        "noForEach": "off"
      },
      "style": {
        "noUselessElse": "off"
      }
    }
  },

  "json": {
    "parser": {
      "allowComments": false,
      "allowTrailingCommas": false
    },
    "formatter": {
      "indentWidth": 2,
      "trailingCommas": "none"
    }
  },

  "css": {
    "formatter": {
      "indentWidth": 2
    }
  },

  "overrides": [
    {
      "include": ["**/*.md", "**/*.yml", "**/*.yaml"],
      "formatter": { "enabled": false },
      "linter": { "enabled": false },
      "organizeImports": { "enabled": false }
    }
  ]
}

이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요. 🤗

https://inf.run/M3DPt