서평: 평소에 반복 속도를 높이기 위해 노력하고 있었는데, 조금 더 구체적인 방법과 측정 방법에 대해 알게 되었다.

시간 절약 도구에 투자하라

파이썬 프로젝트는 컴파일 시간이 긴 편이 아니라 빌드 시간이 짧은데, 이 덕을 요즘 많이 봤다. 프로젝트 진행 시간이 길어지면서 사용하지 않는 API endpoint를 제거하는 일이 있었는데 이때 빌드 시간이 짧다보니 맨눈으로 확인하는 일보다 컴파일하여 확인하는 일이 더 많아졌다. 제거된 코드가 엉뚱한 곳에서 사용되는지, 기존 테스트는 깨지지 않는지 확인하는 작업을 빌드 시간이 짧아서 더 자주 할 수 있었다.

디버깅과 검증 과정을 단축하라

요구 사항을 제대로 분석하고 테스트 코드를 작성한다고 하더라도 내가 개발한 코드가 한번에 실행되기에는 어려울 수 있다. 그래서 디버깅 능력은 개발 속도에 큰 영향을 미친다. (내가 개발한 코드가 한번에 제대로 동작한다면 너무 많은 시간을 들인게 아닌지 의심해보자.) redis나 postgresql에서 데이터를 읽어오는 코드를 작성할 때, fixture를 사용해서 필요한 데이터를 셋팅하는 작업을 자주 하게 된다. 이 작업을 자동화하고 테스트 코드를 작성하면 디버깅 시간을 줄일 수 있다. 그리고 실제 환경에 shell로 접속하여 데이터를 직접 확인하는 경우도 있다. 이런 경우에는 django shell_plus를 사용하고 ipython을 이용해 interactive shell을 사용하면 더 빠르게 확인할 수 있다.

프로그래밍 환경을 마스터하라

나는 Pycharm을 좋아하고 즐겨 사용한다. 이 부분은 내가 잘하고 있는 부분이다. 나는 최대한 마우스를 사용하지 않고 단축키를 사용한다. 그리고 파일 찾기, 함수 호출자 찾기, 코드 리팩토링, 디버깅 등을 IDE로 자주 사용한다. 이는 내가 개발할 때 속도를 높이는데 큰 도움이 된다. 또한, 내가 사용하는 IDE를 다른 팀원에게 소개했고 내가 코딩하는 모습을 잠시 지켜보더니 팀원이 내가 IDE를 사용하는 방식과 단축키 셋팅을 물어보곤 그 팀원도 같은 방식으로 IDE를 사용하게 되었다.


실천 사항

  • 배포 주기를 짧게 가져가자. 한달에 한번이 아니라 2주에 한번으로 줄이자. 한달간 코드가 너무 많이 쌓여서 배포할 때 에러가 나면 디버깅하기 힘들어진다. 그리고 고려할게 너무 많아지는건 좋지 않다.
  • django에서 test_database에 대한 설정은 기본 제공되지만 queue, redis에 대한 설정은 없다. 이 부분은 추가해서 사용하고 있어서 복리 효과를 톡톡히 누리고 있다. s3나 다른 서비스에 대해 필요한 부분이 있는지 확인해보자.
  • 데이터 팀과 작업하는 경우 데이터에 대한 검증을 먼저하고 스크립트를 작성하여 개발 전에 병목을 제거하자. 지금은 실제 개발하면서 데이터를 확인했는데, 데이터에 대한 검증 스크립트를 작성하고 이를 통과하면 개발을 시작하자. 결측값에 대한 확인, 필드의 타입이 제대로 설정되었는지 확인하는 스크립트를 작성하자. jsonschema를 사용해 json으로 변환 시 타입 체크도 가능하다.
  • 데이터베이스 연결 오류가 잦다. bastion을 사용 중인데, 연결 끊김이 너무 많아서 불편하다.
  • 외주 개발자와 같이 작업하는 일이 많은데, 환경 변수를 제공하거나 데이터베이스 접근 등 필수적으로 셋팅이 필요한 부분을 자동화해보자. iam을 부여하고 aws secret manager를 사용하고, 데이터베이스 접근 권한을 주는 스크립트를 작성해보자.
  • 데이터베이스 테이블 read only 권한을 기존 유저에게 추가한 후, 새로운 테이블이 생기면 또 권한을 추가해야한다. 이건 개선이 불가능한건지 확인 해보자. 귀찮은 작업이다.

핵심 요약

  1. 개발 주기 반복 속도가 빨라질수록 더 많은 것을 배울 수 있다.
    • 반대로 실수를 피하려고 너무 느리게 움직이면 기회를 놓칠 수 있다.
  2. 도구 제작에 투자하라.
    • 컴파일 시간, 배포 주기, 개발 소요 시간을 줄이면 시간을 절약할 수 있다. 시간을 절약해주는 도구를 사용하면 할수록 혜택이 복리 계산된다.
  3. 디버깅 작업 흐름을 최적화하라.
    • 코드가 정상 작동하는지 확인하는 데 소요되는 시간을 과소평가하지 마라. 작업 흐름을 단축시키는 데 충분한 시간을 투자하라.
  4. 자신이 사용하는 기술의 기본을 마스터하라.
    • 매일 사용하는 개발 환경을 편하게 효율적으로 쓸 수 있게 노력하라. 이러한 투자는 개발자로 일하는 내내 배당 수익을 낼 것이다.
  5. 개발 주기 반복 과정을 전체론적인 시각으로 보라.
    • 자신의 권한 범위 내에 있는 회사 또는 팀과 관련한 병목을 간과하지 마라.