커밋 메시지 컨벤션 & Linting · Formatter
커밋 메시지와 코드 스타일, 두 가지를 규칙으로 통일하고 자동화하는 방법을 모았습니다.
Conventional Commit: 커밋 메시지 규칙
커밋 메시지는 코드 변경 사항을 빠르게 파악하는 핵심 단서입니다. 나중에 문제가 생겼을 때 원인을 추적하는 데도 큰 도움이 되죠. 이걸 체계적으로 하기 위해 만들어진 규칙이 Conventional Commit입니다.
형식은 다음과 같습니다.
<type>(<scope>): <subject>type: 커밋의 종류scope: 영향을 받는 범위subject: 간단한 설명 (명령형 동사로 시작)
예를 들어 로그인 화면에 이메일 인증 기능을 추가했다면:
feat(UserProfile): Add email verification자주 쓰는 type
| type | 의미 |
|---|---|
feat | 새로운 기능 추가 |
fix | 버그 수정 |
docs | 문서 수정 |
style | 코드 포맷팅 (로직 변화 없음) |
refactor | 기능 변화 없는 코드 구조 개선 |
test | 테스트 코드 추가/수정 |
chore | 빌드, 설정 등 자잘한 작업 |
왜 굳이 이렇게까지 규칙을 지킬까?
이렇게 통일된 형식으로 커밋을 쌓으면, 나중에 feat 타입 커밋만 골라 모아서 Release Note를 자동으로 생성하는 것도 가능해집니다. 사람이 일일이 변경 이력을 정리할 필요가 없어지는 것이죠.
Linting과 Formatter로 스타일 자동화하기
개발자는 반복 작업을 극도로 싫어합니다. 코드 스타일 규칙을 사람이 외우고 매번 손으로 맞추는 건 비효율적이죠. 그래서 등장한 게 Linting과 Formatter입니다.
- Linting: 코드의 스타일·문법·잠재적 오류가 규칙에 어긋나는지 자동으로 검사
- Formatter: Linting 규칙에 맞도록 코드를 자동으로 고쳐주는 도구
Linting은 팀 전체의 코딩 스타일을 통일시켜 가독성을 높이고, 리뷰어가 스타일 대신 로직에만 집중할 수 있게 해줍니다. 설정 파일을 프로젝트 루트에 두고 Git으로 공유하면, 새 팀원이 합류해도 규칙을 구두로 설명할 필요가 없습니다.
JavaScript: ESLint + Prettier
적용 전:
const name="John",age=25;function greet(name,age){console.log('Hello, '+name)}적용 후:
const name = 'John',
age = 25;
function greet(name, age) {
console.log('Hello, ' + name);
}.eslintrc로 Lint 규칙을, .prettierrc로 포맷 규칙을 지정합니다. 단, 둘이 충돌할 수 있어서 eslint-config-prettier 같은 플러그인으로 충돌 규칙을 꺼줘야 합니다.
Python: Flake8 + Black + isort
Python은 동적 타입 언어인 데다 쓰이는 분야(서버, 데이터, ML 등)가 워낙 다양해서 Linting 도구도 여러 가지입니다.
- Flake8: PEP 8 기반 스타일 검사 + 복잡도/논리 오류 검사 (
.flake8설정) - Black: PEP 8에 맞춰 코드를 자동 정렬하는 Formatter (
pyproject.toml설정) - isort: import 문을 표준 라이브러리 / 서드파티 / 프로젝트 내부 순으로 자동 정렬 (
.isort.cfg설정)
pip3 install flake8 black isort
flake8 src/
black src/
isort src/정리
| 개념 | 한 줄 요약 |
|---|---|
| Conventional Commit | <type>(<scope>): <subject> 형식으로 커밋 메시지 규칙화, 자동 문서화 가능 |
| Linting / Formatter | 코드 스타일을 자동 검사(Linting)하고 자동 교정(Formatter) |
출처: Codyssey-B1/B2-2
