프로그램 실행 속도와 웹사이트 표시 속도는 몇 초 개선을 위해 엔지니어는 고심을 해야 하지만 때론 맥 빠질 만큼 어이 없이 극적인 개선이 이뤄지기도 한다. 사진 공유 서비스 핀터레스트(Pinterest)가 자체 블로그를 통해 단 한 줄 코드 변경으로 실행 시간을 99% 단축한 사례를 소개해 눈길을 끈다.
실행 속도 단축을 한 건 핀터레스트 내 소프트웨어 빌드와 배포 관련 엔지니어링을 지원하는 엔지니어링 생산성팀. 핀터레스트는 깃허브에 6개(Pinboard, Optimus, Cosmos, Magnus, iOS, Android) 저장소를 운용하고 있다. 이 가운데 가장 오래된 건 핀보드 저장소다. 35만 개 이상 완결 계수 전체를 복제하면 데이터 크기가 20GB가 넘는 거대한 저장소인 것. 팀은 이런 저장소 유지 보수 등을 실시하고 있다.
핀터레스트는 자동화 도구인 젠킨스(Jenkins)로 소프트웨어를 빌드, 배포하고 있으며 자동화된 처리 시작 부분에 코드를 배치해 깃허브 저장소에서 최신 패키지를 복제한다. 최든 50개 커밋만 얻거나(depth : 50), 최신 커밋 기록만 얻는 옵션(shallow)이 지정하는 등 거대한 저장소 복제 속도를 높일 수 있도록 궁리를 하고 있다.
이 코드를 개선한 코드를 보면 “refspec:+refs/heads/master:refs/remotes/origin/master”가 추가되어 있다. 개선된 코드에 추가된 건 처리 대상 지점 범위 등을 지정할 수 있는 옵션(refspec)이다. 깃 설계와 옵션(refspec)을 지정하지 않고 복제하면 원격 저장소 모든 브랜치를 가져오는 커밋 히스토리를 얻게 된다. 핀터레스트 저장소의 경우 개선 전 저장소에 있는 2,500개 이상 지점을 모두 인출하고 마스터 브랜치를 복제하는 비효율적인 상태였다. 개선된 코드는 refspec로 인출 분기를 마스터 브랜치로 제한하고 있다.
이 딱 한 줄 변경으로 저장소 복제에 걸리는 시간은 40분 30초. 비율로는 99% 단축에 성공했다. 소프트웨어 빌드에 걸리는 전체 속도도 획기적으로 개선했다. 핀터레스트 측은 한 줄 차이가 때론 큰 차이를 만들 수 있다고 밝히고 있다. 관련 내용은 이곳에서 확인할 수 있다.