초보자를 위한 품질 커맨드 4편: requirements-dev.txt + setup.cfg로 개발용 코드 품질 도구 세트 꾸리기

1. 왜 “개발용 requirements”를 따로 두는 걸까?
지금까지는
를 살펴봤죠.
이번 4편부터는 “품질 커맨드를 지원해 주는 도구들” 이야기를 합니다.
특히 두 가지 파일에 집중할 거예요.
requirements-dev.txtsetup.cfg
먼저 이런 고민부터 해볼게요.
“운영 서버에서 꼭 필요한 패키지”랑
“개발할 때만 쓰는 코드 품질 도구들”
같은 파일에 섞어두면 어떨까?
- 운영 서버에는 black, isort, flake8, mypy가 사실 필요 없을 수 있고
- bandit, coveragedegree 개발 단계용 도구죠.
- 그런데 이걸 전부
requirements.txt하나에 섞어두면,- 운영 서버도 쓸데없이 다 설치해야 하고
- 설치 시간, 이미지 크기(도커), 의존성 충돌 위험도 커집니다.
그래서 보통은 이렇게 정리합니다.
requirements.txt→ Β 운영에 필요한 최소 패키지requirements-dev.txt→ Β 개발 + 품질 도구 전용 패키지
오늘의 포커스는 바로 이 두 번째,
개발용 코드 품질 도구 전용 리스트인 requirements-dev.txt.
2. requirements-dev.txt 안에는 누가 살고 있을까?

예시로, requirements-dev.txt 안에 들어갈 수 있는 품질 도구들을 정리해 볼게요.
📦 품질 도구 후보들
black==23.12.1→ 코드 자동 포매터isort==5.13.2→ import 정렬기flake8==7.0.0→ 코드 스타일 검사기pylint→ 좀 더 엄격한 정적 분석기mypy→ 타입 힌트 검사기bandit==1.7.6→ 보안 취약점 패턴 검사coverage→ 테스트 커버리지 측정pre-commit→ git 커밋 전에 자동으로 도구 실행
이 도구들이 하는 일은 각각 조금씩 다르지만,
한 줄로 정리하면 이렇습니다.
“내 코드를 더 안전하게, 읽기 좋게, 유지보수하기 쉽게 만들어주는 도우미들”
이걸 한 파일에 모아서 관리하는 게 requirements-dev.txtAnswer.
3. 초보자 입장에서 보는 사용 흐름
requirements-dev.txt를 만들었을 때,
실제 사용하는 흐름은 보통 이렇게 됩니다.
(깃을 사용한다고 했다는 가정하에 운영과 개발 각각 분리되었다면)
- 개발 환경(로컬 PC, 가상환경 등)을 새로 만들었다.
- 프로젝트를 git clone 했다.
- 다음 두 줄만 실행하면 된다.
pip install -r requirements.txt
pip install -r requirements-dev.txt그러면
- 운영에 필요한 기본 패키지 +
- 개발용 품질 도구 세트까지
한 번에 준비 완료 🎉
초보자 입장에서는,
“개발 환경 세팅 = requirements 두 개를 순서대로 설치하면 된다”
는 굉장히 단순한 룰이 생깁니다.
4. setup.cfg

requirements-dev.txtThe
“도구 목록”이라면,
setup.cfgThe
“이 도구들을 어떻게 사용할지에 대한 공통 규칙서”입니다.
여기에는 예를 들어 이런 것들을 적어둘 수 있어요.
4-1. flake8 설정
- 최대 라인 길이: 120자
- 일부 규칙은 무시(E203, W503 등)
- 예: 블랙(black) 포매터와 충돌하는 스타일 규칙들
예시 느낌
[flake8]
max-line-length = 120
extend-ignore = E203, W503
exclude =
.venv,
migrations,
__pycache__
이렇게 해두면
- 팀원 누구든
flake8을 돌리면
같은 규칙으로 검사합니다. - “내 flake8이랑 네 flake8이랑 결과가 왜 달라?”
이런 말이 없어져요.
4-2. isort 설정
isort는 import 정렬 도구인데,
Django 프로젝트에서 많이 쓰는 패턴을 이렇게 맞출 수 있어요.
[isort]
profile = django
line_length = 120
skip = migrations이렇게 설정해두면
isort를 어떤 사람이 돌리든- import 줄 길이,
- Django 관련 그룹 순서,
- 마이그레이션 폴더 제외 등
동일한 스타일로 정렬됩니다.
4-3. coverage 설정
테스트 커버리지를 볼 때도,
마이그레이션이나 테스트 파일 자체는
커버리지 계산에서 제외하는 경우가 많아요.
[coverage:run]
omit =
*/migrations/*
*/tests/*
*/__init__.pyThis will make the
- 실제 비즈니스 로직이 담긴 코드들만
커버리지 통계에 집중할 수 있습니다.
5. requirements-dev.txt + setup.cfg + 품질 커맨드의 관계
이제까지 들은 내용을 하나의 그림으로 한번 묶어볼게요.
- requirements-dev.txt
- 품질 도구가 뭉쳐 있는 “개발용 장비 창고”
pip install -r requirements-dev.txt한 번이면
black, isort, flake8, mypy, bandit, coverage, pre-commit 등
한꺼번에 설치 완료
- setup.cfg
- black은 “이런 스타일로”
- isort는 “이렇게 정렬하고”
- flake8은 “라인 길이 120자에, E203/W503은 무시하고”
- coverage는 “마이그레이션/테스트는 빼고 커버리지 계산”
→ 이런 공통 규칙을 적어두는 “룰북”
- 품질 커맨드 (quality_check.bat / pre-commit 등)
- 위의 도구들을 실제로 순서대로 실행해 주는 스크립트들
- 초보자는 도구 이름이나 옵션을 몰라도,
품질 커맨드만 실행하면 전부 돌게 설계
한 줄로 정리하면
requirements-dev.txt+setup.cfg+ 품질 커맨드
→ “우리 팀 개발환경과 코드 품질 기준을
파일로 표준화한 것”
이라고 볼 수 있습니다.

6. 초보자에게 추천하는 실전 사용 루틴
앞으로 새 개발자가 프로젝트에 합류했다고 가정하고,
이렇게 안내할 수 있어요.
- 레포지토리 클론
git clone [프로젝트 주소] cd [프로젝트 폴더] - Virtual Environments 만들고 활성화
python -m venv .venv .venv\Scripts\activate (Windows 기준) - 운영용 + 개발용 requirements 설치
pip install -r requirements.txt, pip install -r requirements-dev.txt - 처음 품질 커맨드 실행
quality_check.batorpre-commit install - 이후부터는
- 코드를 수정하고
- 품질 커맨드를 돌려보고
- 깔끔하게 통과하면 커밋/푸시
이렇게만 적어줘도,
초보자도 “어디서부터 손대야 하는지” 방향을 잡기 쉬워집니다.
7. 용어 정리
requirements-dev.txt
개발 단계에서만 필요한 도구들(포매터, 린터, 타입체커, 보안 스캐너, pre-commit 등)을
모아 둔 개발용 패키지 목록 파일.requirements.txt
주로 운영/실행에 필요한 패키지를 적어두는 기본 의존성 목록.setup.cfg
여러 Python 도구(예: flake8, isort, coverage 등)의 공통 설정을 모아 두는 파일.
ini 형식으로 섹션을 나누어 옵션을 적습니다.- 린터(linter)
코드 스타일/잠재적 오류를 분석해 주는 도구의 총칭.
예: flake8, pylint. - 포매터(formatter)
코드 스타일을 자동으로 맞춰주는 도구.
예: black. - 테스트 커버리지(coverage)
테스트를 실행했을 때, 전체 코드 중 어느 부분까지 실행됐는지 비율로 보여주는 지표.






