pre-commit으로 품질 가드레일 5분 구축법

AI가 짠 코드, 믿어도 될까?

by 위키북스
AI가 짠 코드, 믿어도 될까?


'바이브 코딩'이라는 말 들어보셨나요? AI에게 가드레일 없이 자유롭게 코드를 맡기는 방식인데, 편해 보이지만 함정이 있습니다. 일관성 없는 스타일, 타입 오류, 보안 취약점... AI는 이런 것들을 알아서 챙겨주지 않습니다.


클로드 코드(Claude Code)나 커서(Cursor)로 생성한 코드를 그냥 쓰기엔 불안하고, 일일이 검토하자니 시간이 아까운 개발자분들께 희소식입니다. 커밋할 때마다 자동으로 AI 생성 코드의 품질을 검증하는 파이프라인을 단 5분 만에 구축할 수 있습니다.


이 글에서는 파이썬 프로젝트에서 pre-commit 훅을 활용해 코드 품질을 자동으로 검사하고, AI가 생성한 코드에 즉각적인 피드백을 주는 워크플로를 구축하는 방법을 알아봅니다.


image1.jpg?type=w966





1. AI 생성 코드에 가드레일이 필요한 이유

AI가 생성한 코드는 다양한 측면에서 검증이 필요합니다. 코드 스타일과 포매팅이 일관성을 띠는지, 타입 힌트가 올바르게 적용됐는지, 보안 취약점은 없는지, 그리고 기능이 정확히 동작하는지 등을 확인해야 합니다. 이러한 검증 과정을 수동으로 진행하는 것은 시간이 많이 소요되며 인적 오류의 가능성도 있습니다.



[AI 코드의 특성상 품질 관리가 더 중요한 이유]

AI는 문맥을 완벽히 이해하지 못할 수 있습니다

프로젝트의 암묵적인 규칙을 놓칠 수 있습니다

논리적으로 맞지만 프로젝트 스타일과 맞지 않는 코드를 생성할 수 있습니다

인간의 직관적 검토만으로는 놓치기 쉬운 미묘한 문제를 포함할 수 있습니다



[도구 기반의 품질 가드레일이 주는 이점]

일관된 코드 품질 유지: 모든 코드가 동일한 기준으로 검증됩니다

즉각적인 피드백: 문제점을 빠르게 발견하고 수정할 수 있습니다

AI 학습 효과: 도구가 감지한 문제를 AI에게 알려주면 AI는 이를 학습해 더 나은 코드를 생성할 수 있습니다

개발 효율성 향상: 개발자는 코드 품질 검사보다 비즈니스 로직과 창의적인 작업에 집중할 수 있습니다





2. 파이썬 프로젝트를 위한 5가지 품질 도구

각 도구는 서로 다른 목적을 가지며, 함께 사용할 때 더욱 효과적입니다. AI가 스스로 찾아내기 어려운 미묘한 문제나 프로젝트 특화된 규칙 위반을 감지하는 데 결정적인 역할을 합니다.



① Black - 코드 포매팅

Black은 파이썬 코드 포매터로, 일관된 코드 스타일을 강제합니다. 들여쓰기, 줄 바꿈, 공백 등에 관한 결정을 자동화해 개발자가 스타일에 신경 쓰지 않고 로직에 집중할 수 있게 합니다.

※AI 생성 코드에서 해결하는 문제: AI가 생성한 코드의 들여쓰기, 줄 길이, 따옴표 스타일 불일치



② isort - 임포트 정렬

isort는 파이썬 임포트 문을 자동으로 정렬하는 도구입니다. 표준 라이브러리, 서드파티 패키지, 로컬 모듈 등을 그룹화하고 알파벳 순으로 정렬해 가독성을 높입니다.

※AI 생성 코드에서 해결하는 문제: 무작위로 배치된 import문, 사용하지 않는 import



③ Ruff - 코드 린터

Ruff는 파이썬 코드의 린팅 및 포매팅을 매우 빠르게 수행하는 도구입니다. Flake8, Pylint, isort 등 여러 도구의 기능을 통합해서 제공하며, 성능이 뛰어납니다.

※AI 생성 코드에서 해결하는 문제: 미사용 변수, 불필요한 import, PEP8 스타일 위반



④ mypy - 타입 검사

mypy는 파이썬의 정적 타입 검사기로, 타입 힌트를 기반으로 타입 관련 오류를 실행 전 정적 분석 단계에 감지합니다. 이는 런타임 오류를 미리 방지하고 코드의 안정성을 높이는 데 도움이 됩니다.

※AI 생성 코드에서 해결하는 문제: 잘못된 타입 힌트, 타입 불일치 오류



⑤ Bandit - 보안 검사

Bandit는 파이썬 코드에서 일반적인 보안 이슈를 찾아내는 도구입니다. SQL 인젝션, 불안전한 암호화, 하드코딩된 비밀번호 등의 취약점을 검사합니다.

※AI 생성 코드에서 해결하는 문제: 보안 취약점, 안전하지 않은 함수 사용





3. 셸 스크립트로 한 번에 실행하기

각 도구를 직접 커맨드라인에서 실행하는 것도 가능하지만, 도구가 많으면 모든 도구를 직접 실행하는 것은 번거로울 것입니다. 간단한 셸 스크립트를 작성해 모든 검사를 한 번에 실행할 수 있습니다.


[품질 관리 셸 스크립트] (예제 10.13, p.330~331)

#!/bin/bash

set -e # 오류 발생 시 스크립트 중단

echo " Python 코드 품질 검사 시작..."

echo "\n 코드 포매팅 (Black)..."
black .

echo "\n 임포트 정렬 (isort)..."
isort .

echo "\n 코드 린팅 (Ruff)..."
ruff check .

echo "\n 타입 체크 (mypy)..."
mypy .

echo "\n 보안 취약점 검사 (Bandit)..."
bandit -r .

echo "\n 테스트 실행 (pytest)..."
pytest

echo "\n 모든 검사가 성공적으로 완료되었습니다!"


셸 스크립트는 작성하기가 간편하며, 특별히 다른 도구를 추가 설치할 필요가 없고, 다양한 환경에 적용하기가 쉽다는 측면에서 장점이 있습니다.





4. pre-commit으로 자동화 완성하기

코드 관리를 위해 Git을 사용하고 있다면 셸 스크립트를 작성하고 실행하는 번거로움마저 제거할 수 있는 방법이 있습니다. 바로 pre-commit을 사용하는 것입니다.


Git의 pre-commit 훅을 이용하면 코드를 커밋하기 전에 자동으로 품질 검사를 실행할 수 있습니다. 이는 저품질의 코드가 저장소에 들어가는 것을 방지합니다.



[설치 방법]

pip install pre-commit


[.pre-commit-config.yaml 설정 파일] (예제 10.14, p.331~332)



[pre-commit 훅 설치]

pre-commit install


이제 git commit을 실행할 때마다 자동으로 모든 품질 검사가 실행됩니다. 검사를 통과하지 못하면 커밋이 거부되어 저품질 코드가 저장소에 들어가는 것을 방지할 수 있습니다.





5. AI에게 피드백하는 워크플로

검증에서 문제가 발견됐을 때 AI에게 피드백하여 수정을 요청하는 워크플로를 구축하면 더욱 효과적입니다. '검증 → 피드백 → 재생성 → 검증'의 반복 사이클이 핵심입니다.



[실제 워크플로 예시]

1. AI가 코드를 생성합니다

2. git commit을 실행합니다

3. pre-commit이 자동으로 품질 검사를 실행합니다

4. 검사 결과(성공/실패)를 확인합니다

5. 실패 시, 오류 메시지를 AI에게 전달하여 수정을 요청합니다


[검증 성공 시 출력 예시] (p.334)


[검증 실패 시 출력 예시] (p.334~335)





AI에게 피드백 전달하는 방법

위와 같이 검증 실패 시 출력되는 오류 메시지를 AI에게 그대로 전달하면 됩니다. 오류 메시지에는 실패 원인과 위치에 대한 정보가 상세하게 포함되어 있기 때문에 AI가 올바른 수정을 할 수 있습니다.



[피드백 프롬프트 예시]

"코드를 검증한 결과 다음과 같은 문제가 발견되었어. 이 문제들을 해결한 코드를 다시 작성해줘.pytest 실패:[오류 메시지 붙여넣기]"


AI가 수정한 코드를 다시 저장하고 pre-commit을 통해 검증합니다. 모든 검사를 통과할 때까지 이 과정을 반복하면 됩니다.





핵심 메시지 정리

AI와 협업할 때는 '생성 → 검증 → 피드백'의 사이클을 자동화하는 것이 핵심입니다. pre-commit은 이 사이클의 검증 단계를 자동으로 처리해줍니다.


품질 가드레일을 설정하면

AI의 창의성과 생산성을 활용하면서도 엄격한 품질 기준을 유지할 수 있습니다.

코드 품질을 타협하지 않으면서도 개발 속도를 높이는 균형 잡힌 접근법을 제공합니다.

장기적으로 더 견고하고 유지보수하기 쉬운 소프트웨어를 만드는 데 기여합니다.



� Tip: 이 글에서 소개한 예제 코드는 아래 GitHub 저장소에서 확인할 수 있습니다.

https://github.com/wikibook/clean-architecture-guide/tree/main/ch10


https://wikibook.co.kr/clean-architecture-guide/



keyword
작가의 이전글ADsP 합격 비법|수험생 대화 31,000개 분석함