버즈니는 모바일앱 파트를 제외한 모든 개발직군에서 파이썬(Python)을 사용합니다. 물론 서비스를 구성하는 모든 구현물들이 파이썬을 기반으로 동작합니다. 버즈니 개발자가 함께 일하는 방법 그 첫번째. 결론부터 얘기하면 우리는 PEP 8을 규정하고 사용합니다.
코드 스타일 가이드 or 코딩 컨벤션
새로운 프로젝트를 진행하거나 기존의 프로젝트를 운영하는 환경에서 많은 사람들이 하나의 공간을 공유하고 다양한 표현방법으로 소스코드를 표현하게 됩니다. 다양한 스타일로 작성된 코드는 수정을 요하거나 담당자가 변경되는 상황에서 많은 부가 비용들을 만들어냅니다. 개발자가 가진 본연의 역할인 창작과 재활용은 뒷전이고 번역과 해석을 하고 있어야 한다는 것이죠. 마치, 처음 영어 논문을 읽고 이해하는 대학원 초년생 처럼 말이죠. 그래서, 버즈니는 함께 일하는 우리들을 위해 코드 스타일을 통일 합니다. 코드 스타일을 통일하는 것이 주는 의미는 명확합니다. 사소한 규칙 이지만 개발자 서로에게 본질의 행위를 지원하는것으로 시작 됨이 작게는 본인의 코드 품질을 높이는데 도움을 주고, 나아가 속해있는 프로젝트의 품질을 높여주는데 많은 도움이 됩니다.
Python Enhance Protocol: PEP
파이썬 개선 제안서, 말 그대로 파이썬을 개선하기 위한 제안들을 모아 놓은 문서입니다. 크게 3가지의 개선 포인트를 규정하고 있으며, Standard Track, Informational, Process로 명명 되어있습니다. Standard Track: 기능 및 구현 제안 Informational: 기능/구현을 제외한 디자인등을 포함한 일반적인 지침에 대한 제안 Process: 개발 과정에 관련된 제안
PEP 8
PEP 8은 PEP의 Process 영역에 해당되며, 파이썬의 코드 스타일 가이드를 제안하고 제공하고 있습니다. 원문에는 많은 가이드 내용을 담고 있지만, 여기서는 몇몇 내용을 집어서 풀어보도록 하겠습니다.
한줄 최대 글자수
80자 이내, 120자 이내 등의 사용하는 조직이나 그룹마다 한줄 최대 글자수를 규정함은 조금씩 차이가 있습니다. 규정 글자수를 맞추기 위한 방법은 특정 몇가지로 나눌수 있습니다. 하지만, 결국 라인의 연속성을 명시 하면서 적정한 들여쓰기를 통해 규정된 글자수를 맞춘다는 점에서는 모두 동일한 특징을 가지고 있습니다. 아래의 예시는 한줄로 된 코드가 규정 글자수를 맞추기 위해 다양한 방식으로 재구성된 모습입니다. 이중에 정답은 없지만, 원하는 가독성의 특징에 따라서 선택이 달라질것입니다.
Import 순서
표준라이브러리, 외부라이브러리, 로컬라이브러리 순서로 Import를 나열하고 사용합니다. 깔끔함과 잘 정돈된 인덱스를 만든다는 목적이 보이는 부분입니다. 개인적인 생각은 코드의 시작점으로서 코드 스타일을 맞춘다의 시작점이 되는 부분이라 봅니다.
네이밍룰
코드 스타일을 맞추면서 가장 까다로울 수 있는 부분이 네이밍이지 않을까 합니다. 대/소문자 규칙부터 네이밍내의 언더라인 사용여부등이 결정되어야 합니다.
- 클래스명은 카멜케이스를 변수, 함수, 모듈명은 소문자로 상수는 대문자를 사용합니다.
- 소문자 l, 대문자 I, 그리고 대문자 O는 변수명으로 사용하면 폰트에 따라 가독성이 떨어지기때문에 사용하지 않습니다.
- 밑줄 사용은 의미 전달 여부에 따라서 구성하도록 합니다.
사용하기
파이썬을 사용한 개발은 특별히 단일의 정석적인 환경이 없기 때문에 다양한 개발 환경이 존재 합니다. 때문에 각각의 영역별 대표격의 환경을 선택하여 PEP 8을 적용하는 방법을 소개합니다.
VIM
flake8을 vim에서 사용하도록 연결해주고 관련 플러그인을 설치해주면 됩니다.
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
pip install flake8
...(~/.vimrc)
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'gmarik/Vundle.vim'
Plugin '<https://github.com/nvie/vim-flake8'>
call vundle#end()
filetype plugin indent on
let g:flake8_show_in_file=1 " show
let g:flake8_max_markers=500 " maximum # of markers to show(500 is default)
:PluginInstall
Pycharm
Editor>Inspections 에서 pep로 직접 검색하여 확인/설정 가능합니다.
Jupyter(IPython-Notebook)
autopep8과 nbextension조합으로 인스턴트한 Jupyter에서도 PEP 8을 사용할 수 있습니다.
pip install autopep8
pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install
PEP 8 어디까지..?
간단히 코드 스타일 가이드에 대해 얘기도 해보고 PEP, PEP 8도 언급해 보았습니다. 하지만 이걸 어디서 어디까지 지켜야 하나, 무조건 지켜야 하나 등의 얘기를 하지는 않았습니다. 사실 이 부분이 중요합니다. 좋은 코드 스타일 가이드를 갖고 있거나 만들었다고 해서 함께 일하기 위한 요소를 헤치는 영향을 준다면 굳이 지키지 않아도 됩니다. PEP 8 문서에서 이런 비슷한 언급을 합니다. 가독성을 해친다면 굳이 가이드를 따르지 않아도 되거나, 기존 작성된 코드를 가이드를 맞추기 위해 무리하게 리팩토링 하지 않습니다. 버즈니의 PEP 8 규칙들도 모든 가이드를 그대로 따르지 않습니다. 함께 일하는 방식의 목적으로 PEP 8의 좋은 뼈대와 요소를 취하고 불 필요함 또는 굳이 따르지 않아도 된다고 판단하는 내용을 과감히 버리고 시작하고 사용하고 있습니다.