개발자 블로그

Onechain 거래소: pre-commit으로 코드 포매팅 자동화 본문

잡담

Onechain 거래소: pre-commit으로 코드 포매팅 자동화

hayongwoon 2024. 9. 22. 21:31

 이번 포스팅에서는 우리 팀이 어떻게 코드 품질을 높이고 일관된 코드 스타일을 유지하기 위해 자동 포매팅 도구들을 도입했는지 이야기해 보려 합니다. 특히 협업이 많은 환경에서 코드 스타일의 일관성은 유지보수성과 가독성에 큰 영향을 미치기 때문에, 도입을 위해 동료 개발자들과의 논의도 중요했던 경험이었습니다.

왜 자동 포매팅이 필요한가?

 협업 환경에서는 다양한 개발자들이 각자의 스타일로 코드를 작성하게 되기 때문에, 시간이 지나면 코드베이스는 일관성을 잃고 가독성이 떨어지기 쉽습니다. 이로 인해 코드 리뷰 시 불필요한 논쟁이 발생하거나, 코드 디버깅과 유지보수에 더 많은 시간이 소요될 수 있습니다. 자동 포매팅을 통해 코드 스타일을 일관되게 유지하면 코드 리뷰가 간소화되고 품질 관리도 수월해집니다. 그래서 우리 팀은 다음과 같은 장점에 공감하며 자동 포매팅 도입을 추진했습니다:

  • 코드 스타일에 대한 불필요한 고민을 줄이고 일관된 포맷을 유지
  • 코드 리뷰가 간편해지며 스타일 문제로 인한 논쟁 감소
  • 품질 관리가 자동화되면서 유지보수 비용 절감

팀원 설득 과정과 논의

 처음 자동 포매팅을 도입하려 할 때, 모든 팀원이 그 필요성을 바로 이해한 것은 아니었어요. "굳이 코드스타일을 맞출 필요가 있는지, 그리고 많은 코드가 수정이 되는데, 배포 시 불안하다"는 의견도 있었습니다. 그래서 먼저 자동 포매팅이 왜 필요한지와 장점을 팀원들과 공유하고, 이로 인해 얻을 수 있는 시간 절약과 코드 가독성의 개선을 설명했습니다. 이를 통해 코드 작성 시 스타일에 대한 고민이 줄고, 리뷰 시간도 단축될 것이라는 데 공감대를 형성할 수 있었습니다.

 특히 팀원들이 도구의 장점을 직접 경험할 수 있도록, 작은 파일에 직접 적용해보고 이후에 스테이징 서버부터 차례로 적용하여 문제가 없는지 확인하는 방식으로 진행했습니다. 덕분에 모든 팀원이 자연스럽게 새 방식을 받아들일 수 있었고, 이후로는 pr 리뷰 시 수정한 부분에만 집중하여 리뷰하는 시간을 줄일 수 있었습니다.

도입한 자동 포매팅 도구들

 코드 포매팅을 자동화하기 위해 다음과 같은 주요 도구들을 도입했고, 이를 pre-commit 훅에 통합하여 사용했습니다.

  1. Black: 코드 스타일을 자동으로 맞춰주는 포매터로, PEP 8 스타일을 준수하여 팀 내 코드 스타일 일관성을 보장합니다. Black은 주관적인 코드 스타일 논쟁을 줄여주며, 항상 같은 방식으로 코드를 정렬합니다.
  2. Flake8: 코드 내 문법 오류나 스타일 가이드 위반을 체크해 주며, 잠재적인 버그를 빠르게 발견할 수 있도록 도와줍니다. Black과 함께 사용하면 스타일 일관성뿐 아니라 코드 오류 방지도 가능합니다.
  3. isort: Python 파일 내 임포트를 자동으로 정렬해 주어, 코드 가독성을 높이는 데 큰 도움이 됩니다. Black과 호환되는 방식으로 설정하여 일관성을 유지할 수 있도록 했습니다.
  4. autoflake: 사용되지 않는 임포트와 변수를 자동으로 제거하여, 코드베이스를 정리하고 불필요한 코드로 인한 혼란을 줄여줍니다.

Pre-commit과 자동화된 워크플로우

 이 모든 도구는 pre-commit 훅을 통해 Git 커밋 시 자동으로 실행되도록 설정했습니다. 즉, 개발자가 코드를 커밋할 때마다 코드 스타일이 자동으로 점검되고, 스타일에 맞지 않는 부분은 자동으로 수정됩니다. 덕분에 스타일 오류를 사전에 방지할 수 있고, 팀원들 모두가 일관된 스타일을 유지하게 되었습니다.

.pre-commit-config.yaml

도입 결과

 자동 포매팅 도구들을 통해 코드 스타일의 일관성을 유지하게 되면서, 팀 내 코드 리뷰가 훨씬 원활해졌고, 코드 가독성도 크게 향상되었습니다. 이로 인해 유지보수 비용이 줄어들고, 품질 관리가 자동화되면서 개발 효율성도 높아졌습니다. 이번 자동 포매팅 도입은 우리 팀에게 코드 스타일을 넘어선 큰 변화를 가져다 주었고, 협업의 효율성도 높아졌습니다. 또한, 새로운 도구를 라이브에 적용함에 있어 팀원들을 설득하는 과정이 얼마나 중요한 부분인지 소통의 중요성을 다시 한번 느끼고, 개발자로서 소통에 대한 부분에서 성장할 수 있었습니다.

참고 문헌

  1. 기술 블로그
 

pre-commit 으로 git hook 사용하기 with python

git hook 이란? pre-commit 이란? pre-commit 설치하기 pre-commit 세팅하기 설정 파일 추가 black 추가 flake8 추가 autoflake 추가 isort 추가 세팅 최종 결과물 pre-commit 실행하기 모든 파일에 pre-commit 적용하기 마

pypy.dev