파이썬을 이용해서 데이터 분석을 하는 분들이라면(경우에 따라서는 R유저라고 해도) 분석과 코딩 과정에서 주피터 노트북을 사용하시는 경우가 많을텐데요. 분명 EDA(탐색적 데이터 분석)나 전처리 과정에서 많은 도움이 되는 툴이긴 하지만, 과도하게 의존하다보면 유지보수가 어렵고 가독성도 떨어지는 스파게티 코드를 만드는 원인이 되기도 합니다.
오늘 여러분께 공유드릴 글도 그런 주피터 노트북 중독(?)의 위험성을 지적하면서 코딩의 기본기라고 할 수 있는 몇가지 부분들을 지적하는 내용입니다. 저도 이 글을 다시 한번 정독하면서 협업과 재사용이 용이한 코딩에 대해 다시 한번 신경써보는 기회로 삼아봐야겠습니다 :)
* 주피터 노트북이 가진 단점
1. 모든 객체가 한 곳에 정의되어 있어 유지보수가 매우 어려워진다.
2. 변수를 함수 안에서 선언하는 대신 전역함수로 선언하는 습관이 들게 되어 코드를 효과적으로 재사용하기 어렵게 된다
3. 버전 관리가 잘 안된다
4. 애초에 EDA와 프로토타이핑을 위해 만들어진 툴이라 재사용성도 떨어지고 프로덕션 레벨의 코드에 적합하지도 않다.
5. VSCode와 같은 IDE와 비교하였을 때 Linting, Style Formatting 처럼 코딩에 도움이 되는 보조 기능들이 부족하다.
* 좋은 코드 작성을 위한 팁
1. 클린 코드를 작성한다
- 변수 이름을 이해하기 쉽게 만들 것
- 변수를 선언할 때 알아듣기 힘든 약어나 지나치게 긴 이름을 사용하지 말 것
- 숫자를 이용할 땐 하드코딩하기보다 우선 변수로 선언해서 왜 사용되었는지 이해할 수 있게 할 것
- 파이썬의 컨벤션을 준수할 것
- 들여쓰기와 공백문자를 적절히 활용할 것
2. 모듈화 된 코드를 작성한다
- 반복을 피한다
- 한 함수가 복수의 기능을 수행하지 않게 할 것
- 로직을 추상화하되 오버 엔지니어링은 피할 것
3. 리팩토링에 힘쓴다
4. 코드를 좀 더 효율적으로 작성한다
- 뭔가 돌리기 전에 알고리즘의 복잡도를 체크하여 실행시간을 평가해본다
- 코드 안에 있을 수 있는 병목을 체크한다.
- for 반복문은 피하고 가능한 벡터화된 연산을 사용한다 (특히 NumPy나 pandas를 사용할 경우)
- 멀티프로세싱을 사용한다
5. GIT이나 다른 버전 관리 시스템을 사용한다
6. 코드를 테스트 해본다
7. 로깅을 활용한다