일전에 PHP 프로젝트에 써봄직한 Code formatter를 소개했습니다. 이번에는 Python 프로젝트에 써볼만한 도구를 소개하려고 합니다. 운영중인 Python 프로젝트는 Python의 문법적 특성으로 인해 PHP 프로젝트보다 상대적으로 깔끔한 코드 베이스를 갖추고 있습니다. 다만, 빠른 기능구현에 집중하다 보니 코딩 컨벤션 측면에선 다소 아쉬운 부분이 있습니다. 조금이라도 일찍 도구를 도입해서 표준화를 시키는게 여러모로 이득이라고 생각하여 리서치를 진행하게 됐습니다.

이 글을 정리하기 위해 구글링을 하던 중 코딩 컨벤션이 무엇인지, 왜 중요한지, 일관성이 있는 기준이 어떤 이점을 가질 수 있는지 아주 잘 설명한 글을 먼저 소개하고 본론으로 들어가도록 하겠습니다.


Black을 소개합니다. Black은 Python 언어에서 사용할수 있는 Code formatter입니다. The uncompromising code formatter. 라고 소개하고 있는데 다소 엄격해 보이는 문구가 뭔가 마음에 듭니다. 이는 Black이 추구하는 코딩 컨벤션이 개발자가 작성한 코드 스타일과 타협을 하지 않는다고 해석할수 있을것 같아요. 그렇다면, 이 도구는 어떤 코딩 컨벤션을 기준으로 규칙을 정의하는지 궁금해서 소스를 까보았습니다.

Black의 컨벤션 확인 로직은 pycodestyle토대로 구현되어 있습니다. pycodestyle은 Python 언어에서 사용하는 linter라고 볼 수 있는데, 컨벤션 규칙을 PEP 8를 기준으로 하고 있습니다. 따라서, Black의 컨벤션 규칙은 PEP 8에 맞춰져 있다고 생각하면 될것 같습니다.


설치 방법은 매우 간단합니다.

1
$ pip install black

실행 방법 또한 간단합니다.

1
$ black blah.py

각종 실행 옵션은 공식 문서를 참고하시면 됩니다.


귀찮음 덜기

코드 변경이 생길때마다 매번 CLI로 돌릴 순 없으니 사용하고 있는 에디터에 통합해서 사용해 봅시다. (또는 git hook을 써서 커밋 전에 돌릴수도 있겠고요.) 각종 에디터별 플러그인 등은 아래 목록 참고해 주세요!


Outro

팀 내 도입 이후 로직을 구현하는 스타일은 서로 다르겠지만, 외형적인 코드의 스타일은 어느정도 표준화 되어가고 있는걸 느꼈습니다. 누가 작성해도 일관성 있는 가독성을 보장하게 되었고 이는 더 나은 생산성과 퀄리티로 이어지길 기대해봅니다. 클린 코드 하세요! :)


참고