파이썬 코딩의 기술

Kingjo·2023년 6월 3일
0

전 직장에 신입 개발자로 입사해 몇 달 정도 지났을 때, 파이썬으로 프로젝트를 몇 건 진행하다보니 ENTP의 고질적인 질병인 자아도취가 발생했던 적이 있다. 그렇다. 우매함의 봉우리이다. 나 스스로가 대단한 파이썬 개발자인 양 생각하고 있던 때에, 우연히 CTO께서 직접 본인이 짠 코드를 리뷰해주셨다. 코드를 열어보니... '내가 이제까지 했던 건 파이썬이 아니라 파이썬처럼 생긴 무언가다' 하는 깨달음을 얻고 나서 한동안 울적해졌었다.

물론 이 분야에서 몇십 년을 일해오신 CTO와 내 코드가 같은 수준일 거라고는 기대도 안했지만 나 스스로 내 코딩 실력에 크게 실망한 것은 사실이다. 어찌되었건 개발자로 먹고 살기로 결심했으니, 울적한 상태로 지내서는 이도 저도 안되겠다 싶었다. 마음을 다잡고, 파이썬을 이용한 어떤 주제(ML이나 DL, 데이터 등)보다 먼저 파이썬 자체에 대해서 공부를 해봐야겠다 싶었다. 그 때 산 책이 이 책이다. 전 직장을 퇴사하고, 다른 회사에 들어가서 일하고, 그 사이에 개인적인 여러가지 일을 하는 등 바쁘게 지내다보니(사실 변명이다) 정작 이 책을 완독한 적은 없었다. 최근 여유가 조금 생겼으니, 이 책을 완독해봐야겠다는 생각을 가지고 읽어보았다.

사실 완독하는게 쉬운 일은 아니었다. 으레 개발 서적들이 그러하듯 이 책도 구약성경과 비슷하게 '~하지 마라' 혹은 '~하라'와 같은 내용이 매우 밀도있게 구성되어 있었고, 한 번에 그 모든 내용을 흡수하는 건 불가능해 보였다. 며칠에 걸쳐 나눠 읽고 난 뒤, 내 나름대로 느낀 점을 정리해보았다. 쓰고 나서 든 생각인데, 느낀 점도 결국 구약성경에 나오는 것처럼 고루하고 원론적인 이야기인 것 같다.

PEP8 스타일을 준수할 것

내가 진행한 프로젝트들은 대개 1회성에 지나지 않는 것들이라, 개발 시간 엄수가 최고의 가치이며 그 외의 다른 요소(코드 품질, 가독성, 리소스 고려 등)은 중요시하지 않는 환경이었다. 이는 내가 퇴사를 결심하게 된 가장 큰 원인이기도 하다. 더군다나 투입되는 개발자 중 내 코드와 직접적인 연관이 있는 개발자는 많으면 한 명, 보통은 나 혼자인 경우가 대부분이었다. 이런 프로젝트 내에서 PEP(Python Enhancement Proposal)에서 제시하는 코딩 스타일에 대한 준수는 크게 중요시되지 않았다. SI 회사는 언제나 '작동되는지, 작동되지 않는지'만 생각하니까.

당시에도 막연히 든 생각이지만, 수만, 수십만에 달하는 코드가 관여하는 서비스를 운영한다면 이런 식으로 코딩할 수 있을까? 하는 생각이 들었었다. 어쩌다 내 코드를 누군가에게 보여줘야 할 일이 생긴다면, 일일이 함수와 로직을 설명해야 했으니까. 결국 이건 커뮤니케이션 비용이라 할 수 있는데, 팀 내에서 코딩 스타일을 준수하며 개발을 진행하면 이런 커뮤니케이션 비용을 획기적으로 줄일 수 있지 않나 싶었다.

또한 이런 커뮤니케이션 비용은 나 스스로에게도 해당되는 것 같다. 서비스를 운영한다는 것은, 기존 코드를 유지보수는 과정을 포함하는데, 지저분하게 짜인 코드는 개발자 스스로에게도 해독하는 과정이 필요하다. 이런 상황을 미연에 방지하려면(혹은 유지보수하는 수고를 조금이라도 덜려면) 코딩 스타일을 지키며 개발하는 것이 중요하다 생각했다.

요즘은 Black같은 코딩 스타일 검사 라이브러리도 있으니 이런 부분에 대한 우려를 많이 덜 수 있을 것 같다. 나중에 Black을 통한 코딩 스타일 체크도 포스트 해야겠다.

내장 함수를 적극적으로 사용할 것

Python은 정말 많은 내장 함수들이 있고, 버전이 업데이트 될 때마다 개발자의 편의성을 올려주는 많은 기능들이 추가된다. 이런 기능들은 (내가 경험했던 프로젝트에서는) 아는 사람도 별로 없고, 쓰는 사람은 더더욱 없었다. 가끔 보인다 싶으면 구글의 어딘가에서 가져온 코드 속에 포함되어 있던 것이었다. 당연히 어떤 역할을 수행하는지는 관심도 없었다.

나도 지난 1년간 파이썬을 이용한 여러 프로젝트(주로 ML, Data에 관련된)을 진행했었고, 하다보니 여러 파이썬의 초보적인 기능들(리스트 컴프리헨션이나 map, zip, enumerate, lambda같이 잘 알려진 기능들)을 체득하게 되었지만, 이 책을 읽으며 내가 생각했던 것보다 더 많은 내장 함수들이 있으며, 또 내가 알고 있다고 생각했던 그런 내장 함수나 기타 기능들에는 내가 생각해본 적 없는 다양한 활용처가 존재한다는 걸 느꼈다.

이런 함수들을 잘 활용하고, 파이썬 고유의 문법을 잘 살린 코드를 Pythonic하다고 표현하는데, 이런 코드는 리소스 효율 측면에서도 뛰어나겠지만, 일단 가독성에서 큰 차이를 보였던 것 같다. 일단 멋있다! 일전에 누군가 파이썬 개발자를 '코드를 축약하는데 목숨을 거는 사람들'이라고 표현하였는데, 이 관점에서 내장 함수는 필수적인 요소인 것 같다.

 

아쉽게도 이 책에서 소개한 용례를 다 이해하지는 못했다. 이후 프로젝트를 진행하면서 지속적으로 다시 읽어보아야 할 것 같다.

profile
나사 빠진 걸 좋아합니다

0개의 댓글