๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Develog/Study

Next.js ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ ๋งŒ๋“ค๊ธฐ

 
 
 

๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋ด…์‹œ๋‹น

๊ฐœ๋…

๐Ÿ”ฅ **๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ(Boilerplate)**๋ž€?

1. ๊ฐœ๋… : ๋ฐ˜๋ณต์ ์œผ๋กœ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ ๊ตฌ์กฐ๋‚˜ ํŒŒ์ผ.

 

2. ์ด๋ฆ„์˜ ์œ ๋ž˜ : ์‹ ๋ฌธ ์ธ์‡„์†Œ์—์„œ ์ž์ฃผ ์“ฐ๋˜ ๊ธˆ์†ํŒ์—์„œ ์˜จ ๋ง๋กœ, ์ž์ฃผ ์“ฐ๋Š” ๋ฌธ๊ตฌ๋ฅผ ๊ธˆ์†ํŒ์œผ๋กœ ์ฐ์–ด๋‘๊ณ  ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•˜๋“ฏ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒƒ์—์„œ ์œ ๋ž˜๋œ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด์—์„  ๋ฐ˜๋ณต์ ์œผ๋กœ ์“ฐ๋Š” ์ฝ”๋“œ๋ผ๋Š” ์˜๋ฏธ

 

3. ๊ฐœ๋ฐœ์—์„œ์˜ ์˜๋ฏธ

  • ๋งค ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ๊ฑฐ์˜ ๋น„์Šทํ•˜๊ฒŒ ์ƒ๊ธฐ๋Š” ๊ธฐ๋ณธ ๋ผˆ๋Œ€ ์ฝ”๋“œ
  • ์ฒ˜์Œ๋ถ€ํ„ฐ ์ง์ ‘ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋˜๋„๋ก, ์ดˆ๊ธฐ ์„ธํŒ…์„ ๋ฏธ๋ฆฌ ํ•ด๋‘” ์ฝ”๋“œ ๋ฌถ์Œ

4. ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ์˜ ์žฅ์  

  • ์‹œ๊ฐ„ ์ ˆ์•ฝ: ๋งค๋ฒˆ ๋˜‘๊ฐ™์€ ์„ค์ • ์•ˆ ํ•ด๋„ ๋จ.
  • ์ผ๊ด€์„ฑ ์œ ์ง€: ํŒ€์›๋“ค์ด ๊ฐ™์€ ๊ตฌ์กฐ์—์„œ ๊ฐœ๋ฐœ.
  • ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ: ์ค‘์š”ํ•œ ๋กœ์ง์—๋งŒ ์ง‘์ค‘ ๊ฐ€๋Šฅ.

 

๋ชฉ์ 

์Šคํ† ๋ฆฌ๋ถ์ด๋‚˜, ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ์„ ๊ณต๋ถ€ํ•˜๊ฑฐ๋‚˜ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์‹ถ์„๋•Œ,
๋งค๋ฒˆ ์„ค์ •์„ ์ƒˆ๋กœํ•˜๊ธฐ ๊ท€์ฐฎ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿด๋•Œ, ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ๋ฅผ ์ž‘์„ฑํ•ด ํ•˜๊ณ ์‹ถ์€ ์ž‘์—…๋•Œ๋งˆ๋‹ค ์„ค์ •์„ ๋ณต์‚ฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด commit ํ…œํ”Œ๋ฆฟ๊ณผ PRํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค๊ฒ ์Šต๋‹ˆ๋‹ค.

 

1. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

  • Next.js
  • TailwindCss
  • eslint
  • prettier
  • typescript
  • svgr

ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์„ค์น˜ํ•ด์ค€๋‹ค.

 

 

eslint.config.mjs

import { dirname } from "path";
import { fileURLToPath } from "url";
import { FlatCompat } from "@eslint/eslintrc";

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

const compat = new FlatCompat({
  baseDirectory: __dirname,
});

const eslintConfig = [
  ...compat.extends("next/core-web-vitals", "next/typescript"),
  {
    rules: {
      "@typescript-eslint/no-explicit-any": "warn",
      "import/no-unresolved": "error",
    },
  },
];

export default eslintConfig;

 

 

.prettierrc

{
  "plugins": ["prettier-plugin-tailwindcss"],
  "semi": true,
  "singleQuote": true,
  "tabWidth": 2,
  "trailingComma": "all",
  "printWidth": 100,
  "bracketSpacing": true,
  "arrowParens": "always"
}

 

2. commit Message ์„ค์ •

  • ๋ฃจํŠธํด๋”์— ์•„๋ž˜์™€ ๊ฐ™์€ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
[ํƒ€์ž…]: ๊ฐ„๋žตํ•œ ์ œ๋ชฉ (์ตœ๋Œ€ 50์ž)

์ƒ์„ธ ๋‚ด์šฉ (ํ•„์š” ์‹œ ์ž‘์„ฑ, ์ตœ๋Œ€ 72์ž ๊ถŒ์žฅ)

# ํƒ€์ž… ์˜ˆ์‹œ
# feat     : ๊ธฐ๋Šฅ ์ถ”๊ฐ€
# fix      : ๋ฒ„๊ทธ ์ˆ˜์ •
# docs     : ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ
# refactor : ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
# chore    : ๊ธฐํƒ€ ๋ณ€๊ฒฝ์‚ฌํ•ญ
# style    : ์ฝ”๋“œ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ
# test     : ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐ ์ˆ˜์ •
# perf     : ์„ฑ๋Šฅ ๊ฐœ์„ 
# setting : ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€ ๋ฐ ์„ค์ • ์ถ”๊ฐ€

 

 

  • commit ํ…œํ”Œ๋ฆฟ ์„ค์ • (ํ•œ๋ฒˆ๋งŒ ์„ค์ • ํ•„์š”)
git config --local commit.template .gitmessage.txt

 

 

 

  • ๋ชจ๋“  ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋ ค๋ฉด
git config --global commit.template ~/.gitmessage.txt

 

 

3. PRํ…œํ”Œ๋ฆฟ ์„ค์ •

  • ๋ฃจํŠธํด๋”์—์„œ ์•„๋ž˜๊ฒฝ๋กœ๋กœ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค
.github/pull_request_template.md
## ๐Ÿ“ ์ž‘์—… ๋‚ด์šฉ

- [ ] ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- [ ] ๋ฒ„๊ทธ ์ˆ˜์ •
- [ ] ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง
- [ ] ์Šคํƒ€์ผ ์ˆ˜์ •
- [ ] ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ
- [ ] ๊ธฐํƒ€ (์„ค๋ช…):

## ๐Ÿ“Œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ฐ ์ด์œ 
- ๋ณ€๊ฒฝ์‚ฌํ•ญ๊ณผ ์ด์œ ๋ฅผ ๊ฐ„๋žตํžˆ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

## ๐Ÿ“ท ์Šคํฌ๋ฆฐ์ƒท (์˜ต์…˜)
| Before | After |
|--------|-------|
|        |       |

## โœ… ์ฒดํฌ๋ฆฌ์ŠคํŠธ
- [ ] ์ฝ”๋“œ๋Š” ๊ทœ์น™์„ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.
- [ ] ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.
- [ ] ๋ฌธ์„œ๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. (ํ•„์š”ํ•œ ๊ฒฝ์šฐ)
  • ์ด๋Ÿฐ์‹์œผ๋กœ PRํ…œํ”Œ๋ฆฟ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. PRํ…œํ”Œ๋ฆฟ์€ github์—์„œ ์ž๋™์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ๋ช…๋ น์–ด๋กœ ์„ค์ •ํ•ด์ค„ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

 

4. ISSUE ํ…œํ”Œ๋ฆฟ ์„ค์ •

 

 

5. ReadMe ์„ค์ •

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„

ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์„ค๋ช…์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ: ์ด ํ”„๋กœ์ ํŠธ๋Š” ___ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค.


๐Ÿš€ ์‹œ์ž‘ํ•˜๊ธฐ

1. ๋ ˆํฌ์ง€ํ† ๋ฆฌ ํด๋ก 

git clone https://github.com/bananana0118/repo-name.git
cd repo-name

2. ํŒจํ‚ค์ง€ ์„ค์น˜

npm install

3. ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰

npm run dev

๐Ÿ“ ํด๋” ๊ตฌ์กฐ

/src
  โ”œโ”€โ”€ app            # ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ (Next.js app ๋ผ์šฐํŒ…)
  โ”œโ”€โ”€ components       # ๊ณตํ†ต UI ์ปดํฌ๋„ŒํŠธ
  โ”œโ”€โ”€ hooks            # ์ปค์Šคํ…€ ํ›…
  โ”œโ”€โ”€ utils            # ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜
  โ”œโ”€โ”€ styles           # ์ „์—ญ ์Šคํƒ€์ผ ์ •์˜
  โ””โ”€โ”€ store            # ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ

๐Ÿ›  ์‚ฌ์šฉ ๊ธฐ์ˆ  ์Šคํƒ

  • Next.js
  • TypeScript
  • Tailwind CSS
  • ESLint / Prettier

๐Ÿ“Œ ์ปค๋ฐ‹ ์ปจ๋ฒค์…˜

  • feat: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • fix: ๋ฒ„๊ทธ ์ˆ˜์ •
  • docs: ๋ฌธ์„œ ๋ณ€๊ฒฝ
  • style: ์ฝ”๋“œ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ (ํฌ๋งทํŒ… ๋“ฑ)
  • refactor: ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง
  • test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€/์ˆ˜์ •
  • chore: ๊ธฐํƒ€ ๋ณ€๊ฒฝ์‚ฌํ•ญ
  • setting : ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€ ๋ฐ ์„ค์ • ์ถ”๊ฐ€
# ์˜ˆ์‹œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€
[feat]: ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ UI ๊ตฌํ˜„

- ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ UI๋ฅผ ์„ธ๋ถ€๊ตฌํ˜„ ํ–ˆ์Šต๋‹ˆ๋‹ค. (์˜ต์…˜)

๐Ÿ” ๋ธŒ๋žœ์น˜ ์ „๋žต

  • main: ๋ฐฐํฌ ๋ธŒ๋žœ์น˜
  • dev: ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜ (๊ธฐ๋Šฅ ๋ณ‘ํ•ฉ ์ „์šฉ)
  • feature/์ด๋ฆ„: ๊ฐœ๋ณ„ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜

PR ๊ทœ์น™

  • PR ์ œ๋ชฉ: [Feat] ๊ธฐ๋Šฅ ์ด๋ฆ„, [Fix] ๋ฒ„๊ทธ ์„ค๋ช… ๋“ฑ
  • PR ์ƒ์„ฑ ์‹œ ํ…œํ”Œ๋ฆฟ์„ ํ™œ์šฉํ•ด ์ž‘์—… ๋‚ด์šฉ ๋ช…ํ™•ํžˆ ์ž‘์„ฑ
  • ๋ฆฌ๋ทฐ์–ด ์ง€์ • ํ•„์ˆ˜
  • ๋ณธ์ธ PR์€ ์ตœ์†Œ 1๋ช… ์ด์ƒ ๋ฆฌ๋ทฐ ํ›„ ๋ณ‘ํ•ฉ

๐Ÿ“„ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

 

6. husky ์„ธํŒ…

- ์ปค๋ฐ‹๋ฉ”์‹œ์ง€ ํ…œํ”Œ๋ฆฟ์„ ์„ค์ •ํ–ˆ๋‹ค์ง€๋งŒ, ์ผ๊ด€์„ฑ ์—†์ด ์˜คํƒ€๊ฐ€ ๋‚˜๊ฑฐ๋‚˜ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๊ฐ€ ํ˜•์‹์— ๋งž๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.

๐Ÿถ 1) Husky๋ž€ ?

ํ—ˆ์Šคํ‚ค๋Š” Git์˜ ํŠน์ • ์ด๋ฒคํŠธ(์ปค๋ฐ‹, ํ‘ธ์‹œ ๋“ฑ)๊ฐ€ ์ผ์–ด๋‚  ๋•Œ๋งˆ๋‹ค ํŠน์ • ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•˜๋„๋ก ๋„๊ตฌ์ด๋‹ค.

  • ์ปค๋ฐ‹ ์ „์— (pre-commit) ESLint๋กœ ์ฝ”๋“œ ๊ฒ€์‚ฌ
  • ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•  ๋•Œ (commit-msg) Commitlint๋กœ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ํ˜•์‹ ๊ฒ€์‚ฌ
  • ํ‘ธ์‹œ ์ „์— (pre-push) ์ž๋™์œผ๋กœ ํ…Œ์ŠคํŠธ ์‹คํ–‰

๐Ÿถ 2) ์žฅ์ 

1. ์ฝ”๋“œ ํ’ˆ์งˆ ์œ ์ง€

  • ๋งค๋ฒˆ ์ปค๋ฐ‹ํ•  ๋•Œ๋งˆ๋‹ค ์ฝ”๋“œ ํฌ๋งคํŒ…์ด๋‚˜ ๋ฆฐํŒ…์„ ์ž๋™ํ™”ํ•˜์—ฌ ์ผ๊ด€์„ฑ ์œ ์ง€

2. ํœด๋จผ ์—๋Ÿฌ ๊ฐ์†Œ

  • ์ž˜๋ชป๋œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋‚˜ ์ฝ”๋“œ๊ฐ€ Git ์ €์žฅ์†Œ์— ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์„ ์‚ฌ์ „ ๋ฐฉ์ง€

3. ํ˜‘์—… ์‹œ ์ฝ”๋“œ ์ปจ๋ฒค์…˜ ํ†ต์ผ

  • ๋ชจ๋“  ํŒ€์›์ด ๋™์ผํ•œ ๊ทœ์น™๊ณผ ํ’ˆ์งˆ ๊ธฐ์ค€์„ ์ง€ํ‚ค๋„๋ก ์ž๋™ํ™” ๊ฐ€๋Šฅ

4. ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ

  • ๊ฐœ๋ฐœ์ž๋Š” ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋‚˜ CI ๊ณผ์ •์—์„œ ์ƒ๊ธธ ๋ฌธ์ œ๋ฅผ ๋ฏธ๋ฆฌ ๋ฐฉ์ง€ํ•˜๊ณ , ๋” ์ค‘์š”ํ•œ ์ž‘์—…์— ์ง‘์ค‘ ๊ฐ€๋Šฅ

 

๐Ÿถ3) ์ปค๋ฐ‹๋ฉ”์„ธ์ง€ ํ˜•์‹ ๊ฐ•์ œ ์ง€์ •ํ•˜๊ธฐ

#!/bin/sh
npx --no -- commitlint --edit ${1}

 

$1 : husky์˜ commit-msg ํ›…์—์„œ ์‚ฌ์šฉ๋˜๋Š” git์—์„œ ์ œ๊ณต๋˜๋Š” ์ธ์ž์ด๋‹ค. ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๊ฐ€ ์ €์žฅ๋œ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

       ์ฆ‰ ์ปค๋ฐ‹์„ ์ƒ์„ฑํ•  ๋•Œ ์ž…๋ ฅํ•œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ €์žฅ๋œ ์ž„์‹œ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋‹ค.

 

๐Ÿถ4) ์ปค๋ฐ‹๋ฉ”์„ธ์ง€ ํ˜•์‹ ์ปค์Šคํ…€ํ•˜๊ธฐ

import type { UserConfig } from "@commitlint/types";
import { RuleConfigSeverity } from "@commitlint/types";

const Configuration: UserConfig = {
  extends: ["@commitlint/config-conventional"],
  parserPreset:{
    parserOpts:{
        headerPattern: "^\\[([a-z]+)\\]: (.+)$",
        headerCorrespondence: ["type", "subject"],
    },
    },
  formatter: "@commitlint/format",
  rules: {
    "type-enum": [
      RuleConfigSeverity.Error,
      "always",
      [
        "feat",      // ๊ธฐ๋Šฅ ์ถ”๊ฐ€
        "fix",       // ๋ฒ„๊ทธ ์ˆ˜์ •
        "docs",      // ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ
        "refactor",  // ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
        "chore",     // ๊ธฐํƒ€ ๋ณ€๊ฒฝ์‚ฌํ•ญ
        "style",     // ์ฝ”๋“œ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ
        "test",      // ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐ ์ˆ˜์ •
        "perf",      // ์„ฑ๋Šฅ ๊ฐœ์„ 
        "setting",   // ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€ ๋ฐ ์„ค์ • ์ถ”๊ฐ€
        "ci",        // CI/CD ๊ด€๋ จ ์ž‘์—…
        "build",     // ๋นŒ๋“œ ์‹œ์Šคํ…œ ๋ฐ ์˜์กด์„ฑ ๋ณ€๊ฒฝ
        "revert",    // ์ด์ „ ์ปค๋ฐ‹์œผ๋กœ ๋˜๋Œ๋ฆผ
        "merge",     // ๋ณ‘ํ•ฉ ๊ด€๋ จ ์ž‘์—…
        "hotfix",    // ๊ธด๊ธ‰ ์ˆ˜์ •์‚ฌํ•ญ
        "improve",   // ์ฝ”๋“œ ๊ฐœ์„  ๋ฐ ์ตœ์ ํ™”
      ],
    ],
    "subject-max-length": [RuleConfigSeverity.Error, "always", 50],
    "header-max-length": [RuleConfigSeverity.Error, "always", 72],
    "body-max-line-length": [RuleConfigSeverity.Warning, "always", 72],
    "scope-case": [RuleConfigSeverity.Warning, "always", "lower-case"],
    "type-case": [RuleConfigSeverity.Error, "always", "lower-case"],
    "type-empty": [RuleConfigSeverity.Error, "never"],
    "subject-empty": [RuleConfigSeverity.Error, "never"],
  },
};

export default Configuration;

 

- ์šฐ์„  ์„ธํŒ…์— ๋“ค์–ด๊ฐˆ type๊ฐ’์€ ๋˜ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์„๊ฒƒ ๊ฐ™์•„์„œ ์ถ”๊ฐ€ํ•ด๋†จ๋‹ค.

ex) ์ปค๋ฐ‹๋ฉ”์‹œ์ง€ :  [feat]: ๋ฒ„ํŠผ ui ์ˆ˜์ •

๋‚œ ์ด๋Ÿฐ์‹์œผ๋กœ ํ•˜๊ณ ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— headerPattern์— ์ •๊ทœ์‹์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ˜•์‹์„ ๋งž์ถฐ์ฃผ์—ˆ๋‹ค.

headerPattern์„ ์„ค์ •ํ•˜๋ฉด ๊ผญ headerCorrespondence๋ฅผ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ, ๊ฐ๊ฐ ๋“ค์–ด๊ฐ€์•ผ ํ•˜๋Š” ๋ณ€์ˆ˜์ด๋ฆ„์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

 

์ปค๋ฐ‹์„ ํ•  ๋•Œ, ์˜คํƒ€์™€ ๊ฐ™์€ ํœด๋จผ์—๋Ÿฌ๋ฅผ ์žก์•„์ค€๋‹ค.

 

- ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ํœด๋จผ์—๋Ÿฌ๋ฅผ ์ตœ์†Œํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ ์ปค๋ฐ‹ํ• ๋•Œ๋งˆ๋‹ค ํ”„๋กฌํ”„ํŠธ ์—”ํ„ฐ์น˜๋ฉด์„œ ํ•˜๋ฉด ๊ท€์ฐฎ์„ ๊ฒƒ ๊ฐ™์•„์„œ ๊ทธ๋ƒฅ ํŒจ์Šคํ–ˆ๋‹ค.

 


 

 

ํ…œํ”Œ๋ฆฟ์„ ์„ค์ •ํ•ด๋‘๋ฉด ์ถ”ํ›„์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ณ  ๊ท€์ฐฎ์€ ์„ค์ •์„ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
๊ทธ๋•Œ ๊ทธ๋•Œ ํ•„์š”ํ•œ๊ฒƒ๋“ค์€ ์ปค์Šคํ…€ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ๋Œ€ํ•œ ๋Ÿฌํ”„ํ•˜๊ฒŒ ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค์—ˆ๋‹ค.

ํ—ˆ์Šคํ‚ค๋กœ commit lint๋„ ์ถ”๊ฐ€ํ•  ์ƒ๊ฐ์ด๋‹ค.

 

Reference : 

https://velog.io/@himprover/%EB%82%B4%EA%B0%80-%EC%93%B0%EB%8A%94-Next.js-%EB%B3%B4%EC%9D%BC%EB%9F%AC-%ED%94%8C%EB%A0%88%EC%9D%B4%ED%8A%B8-%EB%A7%8C%EB%93%A4%EA%B8%B0