개발자 블로그
Onechain 거래소: pre-commit으로 코드 포매팅 자동화 본문
이번 포스팅에서는 우리 팀이 어떻게 코드 품질을 높이고 일관된 코드 스타일을 유지하기 위해 자동 포매팅 도구들을 도입했는지 이야기해 보려 합니다. 특히 협업이 많은 환경에서 코드 스타일의 일관성은 유지보수성과 가독성에 큰 영향을 미치기 때문에, 도입을 위해 동료 개발자들과의 논의도 중요했던 경험이었습니다.
왜 자동 포매팅이 필요한가?
협업 환경에서는 다양한 개발자들이 각자의 스타일로 코드를 작성하게 되기 때문에, 시간이 지나면 코드베이스는 일관성을 잃고 가독성이 떨어지기 쉽습니다. 이로 인해 코드 리뷰 시 불필요한 논쟁이 발생하거나, 코드 디버깅과 유지보수에 더 많은 시간이 소요될 수 있습니다. 자동 포매팅을 통해 코드 스타일을 일관되게 유지하면 코드 리뷰가 간소화되고 품질 관리도 수월해집니다. 그래서 우리 팀은 다음과 같은 장점에 공감하며 자동 포매팅 도입을 추진했습니다:
- 코드 스타일에 대한 불필요한 고민을 줄이고 일관된 포맷을 유지
- 코드 리뷰가 간편해지며 스타일 문제로 인한 논쟁 감소
- 품질 관리가 자동화되면서 유지보수 비용 절감
팀원 설득 과정과 논의
처음 자동 포매팅을 도입하려 할 때, 모든 팀원이 그 필요성을 바로 이해한 것은 아니었어요. "굳이 코드스타일을 맞출 필요가 있는지, 그리고 많은 코드가 수정이 되는데, 배포 시 불안하다"는 의견도 있었습니다. 그래서 먼저 자동 포매팅이 왜 필요한지와 장점을 팀원들과 공유하고, 이로 인해 얻을 수 있는 시간 절약과 코드 가독성의 개선을 설명했습니다. 이를 통해 코드 작성 시 스타일에 대한 고민이 줄고, 리뷰 시간도 단축될 것이라는 데 공감대를 형성할 수 있었습니다.
특히 팀원들이 도구의 장점을 직접 경험할 수 있도록, 작은 파일에 직접 적용해보고 이후에 스테이징 서버부터 차례로 적용하여 문제가 없는지 확인하는 방식으로 진행했습니다. 덕분에 모든 팀원이 자연스럽게 새 방식을 받아들일 수 있었고, 이후로는 pr 리뷰 시 수정한 부분에만 집중하여 리뷰하는 시간을 줄일 수 있었습니다.
도입한 자동 포매팅 도구들
코드 포매팅을 자동화하기 위해 다음과 같은 주요 도구들을 도입했고, 이를 pre-commit 훅에 통합하여 사용했습니다.
- Black: 코드 스타일을 자동으로 맞춰주는 포매터로, PEP 8 스타일을 준수하여 팀 내 코드 스타일 일관성을 보장합니다. Black은 주관적인 코드 스타일 논쟁을 줄여주며, 항상 같은 방식으로 코드를 정렬합니다.
- Flake8: 코드 내 문법 오류나 스타일 가이드 위반을 체크해 주며, 잠재적인 버그를 빠르게 발견할 수 있도록 도와줍니다. Black과 함께 사용하면 스타일 일관성뿐 아니라 코드 오류 방지도 가능합니다.
- isort: Python 파일 내 임포트를 자동으로 정렬해 주어, 코드 가독성을 높이는 데 큰 도움이 됩니다. Black과 호환되는 방식으로 설정하여 일관성을 유지할 수 있도록 했습니다.
- autoflake: 사용되지 않는 임포트와 변수를 자동으로 제거하여, 코드베이스를 정리하고 불필요한 코드로 인한 혼란을 줄여줍니다.
Pre-commit과 자동화된 워크플로우
이 모든 도구는 pre-commit 훅을 통해 Git 커밋 시 자동으로 실행되도록 설정했습니다. 즉, 개발자가 코드를 커밋할 때마다 코드 스타일이 자동으로 점검되고, 스타일에 맞지 않는 부분은 자동으로 수정됩니다. 덕분에 스타일 오류를 사전에 방지할 수 있고, 팀원들 모두가 일관된 스타일을 유지하게 되었습니다.
도입 결과
자동 포매팅 도구들을 통해 코드 스타일의 일관성을 유지하게 되면서, 팀 내 코드 리뷰가 훨씬 원활해졌고, 코드 가독성도 크게 향상되었습니다. 이로 인해 유지보수 비용이 줄어들고, 품질 관리가 자동화되면서 개발 효율성도 높아졌습니다. 이번 자동 포매팅 도입은 우리 팀에게 코드 스타일을 넘어선 큰 변화를 가져다 주었고, 협업의 효율성도 높아졌습니다. 또한, 새로운 도구를 라이브에 적용함에 있어 팀원들을 설득하는 과정이 얼마나 중요한 부분인지 소통의 중요성을 다시 한번 느끼고, 개발자로서 소통에 대한 부분에서 성장할 수 있었습니다.
참고 문헌
pre-commit 으로 git hook 사용하기 with python
git hook 이란? pre-commit 이란? pre-commit 설치하기 pre-commit 세팅하기 설정 파일 추가 black 추가 flake8 추가 autoflake 추가 isort 추가 세팅 최종 결과물 pre-commit 실행하기 모든 파일에 pre-commit 적용하기 마
pypy.dev
'잡담' 카테고리의 다른 글
pipenv로 의존성 관리 개선하기: requirements.txt에서의 전환 경험 (0) | 2024.10.02 |
---|---|
Harmony 서비스 팀의 CQRS 도입 사례: Deadlock 문제 해결과 데이터 정합성 개선 (0) | 2024.09.22 |
대용량 데이터 엑셀 다운로드 최적화: 이커머스 서비스 백오피스 사례 (0) | 2024.09.22 |
라이드 플럭스(추가 서류) (0) | 2022.07.26 |
작당모의 - 사전 과제 (0) | 2022.07.06 |