Intro
안녕하세요, 오늘은 제가 오레일리의 고성능 파이썬이라는 책을 보다가, 모범적인 개발 절차에 대한 좋은 글을 보게되어서, 공유드리고자 글을 쓰게 되었습니다.
저도 주니어 개발자로서 부족함을 많이 느끼고 있는데요, 이 글에 쓰여져있는 내용을 잘 새겨듣고 실천하면서 실력을 기르려고 합니다.
문서화/ 좋은 구조/ 테스트
이 책에서는 모범적인 작업 절차의 핵심 요소가 문서화/ 좋은 구조/ 테스트라고 했는데요, 각각에 대해서 정리해보겠습니다.
문서화
문서화... 저도 회사에서 일하면서 느끼는 거지만 문서화 만큼 중요하면서 귀찮은 건 없는거 같습니다 ㅋㅋㅋ 하지만 지금이 아닌 나중을 위해서, 문서화는 꼭꼭 필요한 절차라고 생각합니다. 책의 저자는 프로젝트에 대한 설명을 README.md
파일이나 docs/
폴더에 적으면 좋다고 하는데요, 이 설명에 들어갈 내용은 아래와 같습니다.
- 프로젝트 목적
- 폴더 내용 (디렉토리 구조 및 용도)
- 데이터 출처
- 중요한 파일 목록
- 프로그램과 파일의 실행 방법
- 테스트 실행 방법
또한 코드의 모든 함수, 클래스, 모듈에 docstring
을 추가하는 것도 좋다고 합니다. docstring에는 함수가 달성하고자 하는 내용과 예상 출력을 보여주는 간단한 예시를 적으라고 합니다. 저같은 경우는 로직이 복잡하거나 특수한 제약 사항에 의해서 코드가 어색해질 때 docstring을 추가하는데요, 모든 함수, 클래스, 모듈에 docstring을 추가하라니... 벌써부터 머리가 아프네요 ㅋㅋㅋ. 이런 docstring은 우리가 많이 쓰는 numpy가 정말 잘 되어 있는거 같아요.
아래는 PyCharm에서 numpy의 concatenate
함수에 대한 docstring을 보여줍니다.
함수의 파라미터의 타입과 역할, 비슷한 함수 뿐만 아니라 함수 설명, 예시까지 정말 완벽한 docstring이라고 생각됩니다. 하지만 현업에서는 이런 걸 다 지키면서 일하기에는 무리가 있어 보이네요 ㅎㅎ
하지만 저도 저자가 말한 것처럼 일하면서 최대한 다른 사람들이 코드를 사용하고, 이해하기 쉽게하기 위해서 문서화에 더 신경을 써야할 거 같아요.
좋은 구조
저자는 프로젝트의 코드 작성 및 관리에 대해서도 여러 팁을 줍니다. 아래에 하나씩 열거해보고 제 생각을 적겠습니다.
코드는 짧게 만들어야 한다. 그러면 테스트하기도 쉽고, 이해하기도 쉽다.
- 정말 맞는 말 같아요. 저도 회사에게 사수에게 한 함수는 반드시 하나의 일만 해야된다는 피드백을 자주 받았는데요, 각 함수가 하나의 일만 하도록 하다보니 코드 가독성이 좋아지는 거 같았어요.
소스 관리를 해라 (== git을 잘 사용해라). commit을 작은 단위로 자주해라
- git의 중요성에 대해서는 말할 필요가 없는 거 같아요. 뒤에 commit을 작은 단위로 자주하라는 피드백은 공감가는게, 변경사항을 commit하지 않고 개발하다가 나중에 commit하려다 보면, 서로 관계없는 변경사항끼리 엉켜있어서 적절한 commit message를 사용하기 어렵더라고요. commit message는 디버그 및 코드 변경 히스토리를 파악하기 위해서 꼭 필요한 거 같아요!
PEP8 코딩 표준을 지켜라 (feat.
black
,flake8
,pylint
,isort
...)PEP8 스타일은 파이썬 프로그래밍에 있어서 기본이죠. 그리고 우리가 만든 코드가 PEP8에 맞춰 작성되었는지 확인해주는 여러 보조 라이브러리들이 있습니다.
black
: 코드의 identation이 잘 되어있는지, 한 줄의 길이가 길진 않은지 등을 판단하고 적절하게 formatting을 해주는 라이브러리 입니다.flake8
,pylint
: 코드를 lint한다고 하는데요, 코드에 문법상이나 스타일 상으로 문제가 있는지 등을 알려줍니다. 눈으로 발견하기 어려운 실수를 찾아줘서 좋은 거 같아요.isort
: 프로젝트가 커지다 보면 import하는게 많아질 때가 있잖아요? isort는 import를 알파벳순으로, 보기 좋게 formatting해주는 라이브러리 입니다.위와 같이 도움을 주는 여러 라이브러리가 있지만, 사람에 따라서 이를 사용하는 걸 선호하는 사람도 있고, 아니면 스스로 잘 지키도록 단련?하는게 중요하다고 하는 사람도 있는 거 같아요. 결론은 개취를 존중하자 ㅋㅋㅋ
운영체제와 분리된 환경을 만들어라
- 프로젝트에 따라서 필요한 라이브러리나 버전이 다를 수 있죠. 그래서 프로젝트마다 독립된 환경을 만드는게 중요합니다. 가장 간단하고 많이 알려진 방법으로는
Anaconda
또는pipenv
를 통해서 가상환경을 만드는 방법이 있습니다. - 요즘 더 핫한 거는
docker
를 이용해서 환경을 구성하는 방법같아요. 저도 잘은 모르지만, 위의 방법들 보다 강한? 독립성을 보장해주는 방법인 거 같습니다.
- 프로젝트에 따라서 필요한 라이브러리나 버전이 다를 수 있죠. 그래서 프로젝트마다 독립된 환경을 만드는게 중요합니다. 가장 간단하고 많이 알려진 방법으로는
자동화해라
- 자동화가 많이 하고 수동 작업을 줄일수록 실수할 여지는 적어진다고 합니다. CI/CD 자동화를 통해서 누구나 실행하고 지원할 수 있는 표준 절차를 만드는 것이 바람직하다고 하네요. 저에게는 아직 어려운 일인거 같아요 ㅜ
테스트
특정 입력에 대해서 코드 작성자가 예상한 출력이 나오는지 확인해보는 것을 테스트라고 합니다. 코드를 실제 서비스에 배포하기 전에, 이상이 없는지 확인하는 것이죠. 파이썬의 경우 unittest
라는 내장 모듈을 제공하고, 이에 기반한 pytest
도 있습니다. 테스트가 중요한만큼, 기존 코드에 테스트 코드가 없는 경우에는 반드시 추가를 해줘야한다고 합니다. 테스트 코드는 주로 tests/
폴더에 작성하고 관리하는게 좋다고하네요. 검증이 필요한 부분부분을 테스트하는 코드를 통해, 최종적으로 프로젝트 전체 흐름을 검사하는 intergration test가 되야한다고 합니다. 테스트에 관해서는 저도 경험이 적어서 전달밖에 못하겠네요 ㅎㅎ.
아무튼 모든 코드가 내가 의도한 대로 작동하는지 확인하기 위해서는 테스트가 반드시 필요하니, 저도 pytest
같은 모듈을 통해 테스트 코드를 작성하는 연습을 해봐야겠습니다.
마무리
오늘은 제가 공부하고 있는 책에 나온 모범적 작업 절차에 대해서 정리해봤습니다. 우리 모두 좋은 개발자가 되어봐요! 화이팅!
참고
'[기타]' 카테고리의 다른 글
CPU vs GPU 비교 (0) | 2023.07.20 |
---|---|
[UML]클래스 다이어그램(Class Diagram) 작성법 (0) | 2023.07.18 |
[기타 - 유닛 테스트(Unit test)란? (0) | 2021.07.25 |
[기타 - 독시젠(Doxygen) 사용법(1)] (0) | 2021.05.31 |
개발자 취업 준비 추천 사이트 (구글, 원티드 ) (0) | 2021.05.23 |