개발 노트/Experience

코드가 너무 빨리 바뀐다, 그래서 PyCrunch다

j4ko 2025. 6. 26. 14:25
728x90
반응형

개요  

요 근래에는 패스트 캠퍼스 강의를 보면서 프로젝트성 강의들을 Django를 이용해 재구성해보며 시간을 보내는 중이다. 강의 내용을 Django로 재구성하는 과정에서 상당 부분 고민하고 실험해 볼 만한 요소들이 상당히 흥미롭다.

 

이 포스팅에 쓸 내용 또한 이 맥락에서의 이야기다.

 

과거 파이썬에서 테스트 코드를 작성하는데 필요한 내용들을 조사하면서 얼핏 스치면서 알게된 도구를 소개하는 내용이며 알고 있었지만 왜 그동안 사용하지 않았는지에 대한 사견을 풀어보고자 한다.

 

파이썬에서 테스트 코드 경험

지금까지 테스트 코드를 작성할 때는 unittest 또는 pytest 중 하나를 선택했다. 프레임워크 기반의 개발에는 대부분 pytest를, 단순 기능 검증에는 unittest를 사용하는 방식이었고, 사용 비중은 pytest 쪽이 훨씬 높았다.

 

다음은 관련 내용을 다뤘던 블로그 글이다.

unittest + Django Django 테스팅 삽질기 보기
pytest + Django pytest-django에서 자주 사용했던 것들 보기
pytest + Django pytest-django에서 view에 request 던지기 보기
pytest + FastAPI pytest를 이용한 imperative mapping 테스트 코드 보기
unittest + Django Python에서 테스트명을 한글로 표시하는 방법 보기

 

 

테스트 코드 작성 경험 돌아보기

그동안 테스트 코드 작성 도구를 선택하면서 가장 아쉬웠던 점 중 하나는 IDE와의 통합성이 부족하다는 점이다.

 

주로 PyCharm을 사용하고 있는데, 유용한 기능 대부분이 Pro 버전에 제한되어 있고, 플러그인만으로 이를 보완하기에는 한계가 있었다.

 

예를 들어, Java의 JUnit에서는 @DisplayName을 사용해 테스트 이름을 한글로 쉽게 표기할 수 있지만, pytest에서는 이러한 기능이 공식적으로 제공되지 않는다.

 

파이썬은 자주 사용하는 언어임에도 불구하고, Java에 비해 IDE 측면에서의 유틸리티는 부족한 편이라 생각한다. 그래서 종종 편법을 쓰거나 우회할 만한 아이디어를 떠올리게 되는데, 이런 방식이 과연 생산성을 높이는 선택인지에 대해서는 매번 의문이 남는다.

 

 

코드 수정 시 테스트 코드를 자동으로 실행할 수 없을까?

이 단락의 제목과 같은 기능이 Intelii J나 Java에서 제공되는지는 아직 모른다. 그러나 Python에서 테스트 코드를 작성하면서 이 단락의 제목과 같은 고민을 해봤던 적이 있다.

 

코드를 작성하면서 테스트 코드를 작성하는 과정에는 TDD의 순서를 따르진 않았고 대체적으로 다음과 같은 방식의 사이클이었다.

flowchart TD
    A["💻 코드 수정"] --> B["🧪 테스트 실행"]
    B --> C["📋 결과 확인"]
    C --> D{"✅ 테스트 성공?"}
    D -- "❌ 아니요" --> A
    D -- "✔️ 예" --> E["🏁 작업 완료"]

 

이러한 사이클에는 번거로운 점이 존재했다. 수동으로 테스트 코드를 매번 실행시켜야 한다는 점이다. 단축키 하나만 실행하면 되는 일이 뭐가 귀찮을는지 싶겠지만 로컬 개발처럼 코드가 변경될 때마다 서버가 자동으로 재시작되며 변경사항을 반영해 주는 흐름에 익숙해져, 테스트 코드도 자동으로 실행되면 좋겠다는 생각이 자연스럽게 든다.

 

또한 CI/CD를 이용해 테스트 코드를 실행하고 실패하는 케이스가 존재하는 경우 이에 따른 액션을 취하게끔 유도할 수 있겠지만 이는 협업 관점에서의 주제라 생각한다.

 

 

PyCrunch가 테스트 코드를 자동으로 실행해 주더라..

앞서 살펴본 것처럼, Python에서 코드를 수정할 때마다 테스트를 수동으로 실행하는 과정은 다소 번거로웠다. 이 문제를 해결하기 위해, 평소에 이름만 알고 있던 PyCrunch를 사용해 보기로 했다.

 

PyCrunch의 홈페이지에는 다음과 같은 설명이 있다.

https://pycrunch.com/

It intelligently tracks which tests are affected by code change and automatically runs them.

  • 코드 변경에 영향을 받는 테스트를 지능적으로 추적하고, 자동으로 실행합니다.

 

지속적 테스트 코드 추적과 함께 자동으로 실행해 주는 편리한 도구라는 점이 매력적이다. 이에 더해 설치와 실행도 간단하다. Pycrunch를 사용하기 위해선 다음 라이브러리가 필요하다.

$ pip install pycrunch-engine

 

그리고 PyCharm에서는 다음 Plugin을 설치해 주자.

이제 PyCharm에서 상단 메뉴 중 “Tools → PyCrunch → Run/Reset PyCrunch Engine” 경로를 통해 Pycrunch를 실행할 수 있다. 하기 이미지는 최근 Pycrunch를 사용해 테스트 코드를 작성한 PyCharm의 화면이다.

 

 

Pycrunch의 세부 설정들은 PyCrunch 사이트를 참고하자.

 

지금까지 써본 입장에서는 그다지 단점이라고 생각될 부분은 없는 듯싶다. 다만 PyCharm에서 Pycrunch 실행 시 다소 버벅거림이 생긴다는 점이다. 이는 Pycrunch가 테스트 코드를 매번 변경 감지하기 때문에 백그라운드에서 실행되는 프로세스의 영향인 듯싶지만 신경 쓰일 정도는 아니었다.

 

PyCrunch와 AI Assistant의 조합

PyCrunch는 2021년쯤부터 알고 있었던 도구다. 그럼에도 불구하고 당시에는 사용하지 않았다. 이유는 단순했다.

“테스트 코드를 얼마나 자주 실행해야 이런 도구까지 써야 하지?”

라는 생각이 들었다.

 

물론 테스트 주도 개발(TDD) 방법론에 따르면, 테스트 코드는 자주 실행할수록 좋다고 알려져 있다. 하지만 실제 개발 현장에서는 테스트 실행이 잦아질수록 개발 속도가 느려지는 불편함이 존재했다.

 

그래서 나는 “굳이 이런 도구까지 써야 할까?”라는 회의적인 시선을 가졌고,

“테스트는 적절한 시점, 예를 들면 배포 전에만 실행하면 되는 것 아닌가?”

 

라는 생각으로 결론지었다.

 

그런데 최근 AI Assistant를 적극적으로 사용하면서 이 생각이 조금 달라지기 시작했다. 프롬프트를 기반으로 빠르게 코드를 생성해 주는 AI Assistant는 말 그대로 코드를 ‘양산’했다.

 

그렇게 생성된 코드 중 일부는 기존 코드에 영향을 주었고, 결과적으로 어떤 부분이 어떻게 수정되었는지를 일일이 추적하기가 어려워졌다. 이러한 상황에서 AI가 생성하거나 수정한 코드의 안정성을 검증하는 수단으로 테스트 코드를 자주 실행하는 것이 적절하지 않을까?

 

그런 고민 끝에 자연스럽게 다시 떠오른 것이 바로 PyCrunch였고, 이번에는 실제로 적용해 보게 되었다.

 

마치며

이번 글은 최근 진행 중인 Django 기반 실습 프로젝트 속에서, 오래전부터 알고 있었지만 외면했던 도구인 PyCrunch를 다시 돌아보게 된 과정을 기록한 것이다.

 

테스트 코드를 작성하고 실행하는 일은 개발에서 중요한 습관이지만, 실제 현장에서는 번거로움과 도구의 제약, IDE와의 호환성 문제로 인해 외면받기 쉬운 영역이기도 하다. 나 역시 한동안 그런 시선을 가졌고, ‘배포 전 테스트면 충분하지 않을까?’라는 생각으로 이를 밀어두었다.

 

하지만 AI Assistant의 도입으로 코드 생성과 수정의 속도가 비약적으로 빨라진 지금, ‘코드의 안정성은 어떻게 확보할 것인가’라는 물음 앞에서, 테스트 자동화의 중요성을 다시금 실감하게 되었다.

 

PyCrunch는 그런 의미에서 다시 떠오른 도구였다. 단순히 테스트를 자동 실행해 주는 툴 그 이상으로, 변화하는 개발 환경 속에서 생산성과 안정성을 동시에 지향할 수 있게 해주는 하나의 실험적 대안이었다.

 

파이썬이 자주 쓰이는 언어인 만큼, 이런 도구들에 대한 실험과 고민은 앞으로도 계속될 것이고, 그 안에서 조금씩 나만의 개발 루틴이 정제되어 가기를 기대해 본다.

728x90
반응형