코드리뷰
개발 품질을 높이기 위해서는 TDD를 도입할 수도 있지만, 그보다도 먼저 코드리뷰에 대한 체계를 정착시켜야 합니다. TDD는 그 후에 도입을 해도 늦지 않은 선택입니다. 그만큼 코드리뷰는 중요합니다. 코드리뷰는 다양한 방법으로 시도할 수 있는데, 각각 장단점을 가지고 있습니다. 하지만 프로세스를 정착시키기 위해서는 도구를 사용하는 것만큼 뛰어난 것도 없죠. 이번에는 코드리뷰 시스템, Upsource에 대해 이야기 해볼까 합니다. Upsource에 대해 알아보기 전에 코드리뷰에 어떤 방법이 존재하는지 살펴보시죠. 다음 글은 코드 리뷰 방법 별 장단점를 번역(일부 의역)한 글입니다.
600명 이상의 개발자, 테스터 및 IT/운영 전문가에게 코드 리뷰를 할 때 가장 큰 이점이 무엇인지 물어보았습니다.
- 59% 코드의 유지보수 가능성 향상
- 90% 향상된 소프트웨어 품질
- 72% 팀 간 지식 공유
개발팀이 현재 수행 중인 코드리뷰 유형을 물었습니다.
- 63% 도구 기반 코드리뷰
- 72% over the shoulder 코드리뷰
- 53% 회의 기반 코드리뷰
회의기반 코드리뷰
일반적으로 3~6명 참가자가 회의실에서 인쇄물 혹은 프로젝터를 사용하여 토의합니다.
장점
- 심층 분석: 소스코드가 가진 결함/문제를 식별할 수 있습니다.
- 문서화: 코드 오류를 발견할 수 있으며, 심각도에 따른 우선순위를 정할 수 있습니다.
단점
- 시간/자원: 긴 코드리뷰 회의는 팀 구성원 일정에 차질을 발생시킬 수 있습니다. 수시로 참석하기 힘드며, 초대된 사람들은 코드리뷰를 효과적으로 진행할 준비가 되어 있지 않습니다.
- 공간 제약: 개발팀은 종종 다른 지역/지사에 위치합니다.
이메일 기반 코드리뷰
코드리뷰를 받을 준비가 되면 이메일을 통해 자료를 해당 동료에게 전달합니다. 워크플로우가 허용되는 즉시 검토할 수 있는 방법입니다.
장점
- 유연성: 참가자들은 보다 유연하게 자신의 시간을 분배하여 코드리뷰를 참여 할 수 있습니다.
- 즉시 도입: 추가적인 설정이나 비용이 필요하지 않습니다.
- 간편한 참여: 팀 구성원 일정을 제한할 필요가 없습니다. 이메일 발송대상에 포함하면 됩니다.
단점
- 복잡함: 이메일을 통해 코드리뷰할 경우 복잡해지기 쉽습니다. 리뷰 대상자는 이를 직접 정리하고 처리하여야 합니다.
- 가시성 부족: 정보를 검색하고 실제로 어떤 변화가 있었는지 추적하기 어렵습니다.
- 측정 항목 부족: 보고가 부족하여 방향성을 수립하거나 코드리뷰 효과를 추적하기 어렵습니다.
Over the shoulder 기반 코드리뷰
코드리뷰를 받는 동안 리뷰어가 곁에 있는 것입니다.
장점
- 공동 작업: 예제를 작성하거나, 토론을 위해 화이트 보드 등을 활용할 수도 있습니다.
- 준비 필요 없음: 누구나 언제든지 할 수 있습니다. 별다른 준비 없이 필요할 때마다 리뷰할 수 있습니다.
- 직접 학습: 이메일이나 메신저 대신 직접 대화하며 개선할 수 있습니다.
단점
- 도입 가능한 프로세스가 아님: 코드 리뷰에 대해 아무 것도 측정할 수 없습니다.
- 추적 불가: 변경 사항으로 이어지는 대화를 찾는 것은 불가능합니다.
- 근시안적: 리뷰어는 코드 변경으로 인한 사이드이펙트 발생 여부를 직접 확인할 수 없습니다.
- 공간 제약: 리뷰가 진행되려면 동일한 건물에 있어야 합니다. 일부 개발팀만 리뷰가 가능합니다.
도구 기반 코드리뷰
팀이 코드리뷰에 공동 작업하는데 사용할 수 있는 중앙 집중식 플랫폼을 제공합니다.특정 IDE와의 통합을 통해 개발자가 코드를 체크인하고 검토하는 과정을 보다 쉽게 수행할 수 있습니다. 코드리뷰 도구의 다른 중요한 기능으로 자동 파일 수집, 결함 및 주석 표시, 심층적인 보고 및 검수가 있습니다.
장점
- 통합: 버전관리 시스템 및 IDE와 통합할 수 있습니다.
- 추적 가능: 하나의 중앙 집중식 플랫폼에서 메모, 변경 사항 및 결함을 문서화할 수 있습니다.
- 보고: 필요한 데이터를 얻을 수 있습니다. 결함 밀도 및 검사 비율을 추적하면 코드 리뷰 프로세스를 개선할 수 있습니다.
- 규정 준수 관리: 프로그래밍 준수 요구 사항에 대한 감사 및 추적을 쉽게 증명할 수 있습니다.(ISMS 등)
- 협업/의사소통: 무엇이 바뀌었는지, 그 이유는 무엇인지 명확하게 파악 가능합니다. 개발자가 새로운 리뷰에 참여할 때 효율적으로 접근할 수 있습니다.
단점
- 비용: 오픈소스도 존재하지만, 필요한 기능이 부족합니다.
- 도입 가능한 도구 선택: 워크플로우에 완벽하게 들어맞는 도구를 찾아야 합니다.
JetBrains Upsource
IDE 추가 화면 구성
- Upsource를 연동하면 하단에 리뷰 탭이 생성되며, 해당 탭을 통해 리뷰 대상에 포함된 Revision 묶음을 살펴볼 수 있습니다.
- 리뷰어가 코멘트를 달 경우 리뷰대상자는 실시간으로 알림을 받을 수 있습니다.
- 리뷰 피드를 통하여 어떤 식으로 리뷰가 진행되고 있는지 살펴볼 수 있습니다.
IDE를 통한 리뷰 생성 및 수정 방법
- JetBrains IDE - Version Control - Repository - 대상 Revision 선택 - 우클릭 - Upsource - Review Changes
- 선택 후 Review ID를 선택하지 않을 경우 신규 리뷰가 생성되며, Review ID를 지정할 경우 해당 리뷰에 Revision이 포함됩니다.
IDE 실시간 알림
- 해당 리뷰에 자신이 등록될 경우 IDE가 실시간알림을 통해 알려줍니다.
- IDE를 키고 있지 않더라도 누가 자신에게 리뷰를 요청했는지, 리뷰 코멘트가 작성되었는지 등 전반적인 변경사항에 대하여 이메일로 받아볼 수 있습니다.
IDE 코드리뷰 화면
- IDE 하단 탭, 리뷰 범위에서 파일명을 더블클릭할 경우 다음과 같은 화면을 통해 리뷰를 진행할 수 있습니다.
- 말풍선을 클릭할 경우 어느 코드에 코멘트가 달려있는지 확인할 수 있습니다.
- IDE를 통하여 코드리뷰를 진행하기 때문에 개발자 본인에게 익숙한 개발환경으로 코드리뷰를 진행할 수 있습니다.
- Web이 아닌 IDE로 코드리뷰를 진행할 경우 얻을 수 있는 강점
IDE 설정 방법
1.플러그인 Upsource 설치
2.Upsource 연동
Analytics - Upsource Web
- 해당 스크린샷은 Upsource Web이 제공하는 통계 기능 중 하나입니다.
- 이 외에 Reviewer 관계도 라든지, 어떤 파일이 가장 많이 수정되었는지 등 다양한 통계를 제공합니다.
Upsource 연간 가격 정책
인원 | 가격 |
---|---|
10명 이내 | $0 |
25명 이내 | $1,300 |
50명 이내 | $2,500 |
100명 이내 | $4,500 |
250명 이내 | $9,000 |
사용 후기
Upsource는 기본적으로 서버 메모리를 많이 차지합니다. 실시간으로 버전관리에 붙어서 변경사항이 있는지 체크합니다. 또한 IDE에 실시간 알림을 보내기도 합니다. 따라서 서버 성능을 생각보다 많이 잡아먹습니다.
그럼에도 불구하고 코드리뷰 통합 관리 시스템을 통하여 얻는 이점이 적지 않습니다. 저는 입사 초기에 이메일을 통해 코드리뷰를 받았었고, 얼마 전까지만 해도 회의 기반, 혹은 over the shoulder 방식으로 코드리뷰를 진행하였습니다. 다른 코드리뷰 방식과 가장 큰 차별점은 IDE를 활용할 수 있다는 점입니다. 수많은 기업이 JetBrains IDE를 이용하고 있고, 개발자는 각자 자신에게 맞는 설정을 통하여 본인에게 특화된 개발환경에서 프로젝트를 진행합니다. 다른 세 방식은 이 부분이 무시되기 때문에 리뷰가 수월하지 않습니다. 다른 화면을 통해 코드를 보기도 힘들고, 분석하기 위한 시간도 오래 걸립니다. 당연히 회의를 한다면 길어질 수 밖에 없죠. 심지어 그렇게 공을 들인다고 한들 코드리뷰를 통해 무엇을 얻었는지 나타내기도 힘듭니다.
Upsource는 이러한 단점들을 상쇄시킵니다. IDE 명가 JetBrains 답게 IDE만으로도 코드리뷰를 진행할 수 있죠. 만약 팀이 10명 이내라면 팀단위로 운영해도 문제가 없기 떄문에 비용적 측면은 서버 한 대 뿐입니다. 비용에 비해 개발자들이 많은 이득을 취할 수 있습니다. 소프트웨어 품질을 챙기며, 동료와 지식을 나눌 수도 있고, 축적되는 데이터를 통하여 프로그램 히스토리도 쉽게 파악할 수 있습니다.
아직까지 코드리뷰 프로세스가 정책되지 않은 곳이라면 도입을 검토해보셨으면 합니다. JetBrains IDE를 처음 썼을 때 느낀 그 희열을 Upsource를 통해 똑같이 느낄 수 있으실겁니다.
Devellany
back-end Developer
PHP, Java, JavaScript, MySQL, Redis, Ubuntu, Nginx
Codeigniter, Laravel, Zend, Phalcon, Spring Boot, JPA
PHPStorm, IntelliJ, Upsource, SVN, Git, Telegram Bot