#코드리뷰 #깃허브 #MR
배대준 2021.12.06
깃허브에서 Merge Request(이하 MR)를 생성했는데 리뷰어는 묵묵부답이고 직접 요청하자니 업무를 방해하는 건 아닌가 걱정한 적이 있나요? 공통시스템개발팀에도 MR이 쌓이는데 리뷰가 늦어져 고민이었던 때가 있었습니다. 리뷰이는 리뷰를 기다리고 리뷰어는 수많은 MR을 확인하느라 고통받고 있었습니다.
기존 코드 리뷰 문화는 이랬습니다.
- 리뷰어가 이해하기 쉽게 MR 내용 작성
- 같은 파트원의 승인 이후에 머지
- MR, 리뷰 코멘트 발생 시 슬랙으로 알람
크게 부족해 보이는 부분은 없는데, 왜 리뷰가 쌓였을까요? 고민 결과 리뷰어가 요청을 확인하고 리뷰를 작성하는 과정에서 생각보다 많은 품이 든다는 결론이 나왔습니다. 따라서 리뷰어가 적은 노력으로 코드 리뷰를 잘할 수 있는 환경을 갖추기로 했습니다.
적은 노력으로 리뷰 잘하기
1. MR 템플릿 사용하기
기존에는 MR 작성 규칙이 없었고 때로는 설명이 부족한 경우도 있었습니다. 따라서 일관된 방식으로 작성하도록 MR 템플릿을 만들었습니다.
• 완성된 MR 템플릿 •
#해결하려는 문제가 무엇인가요?
#어떻게 해결했나요?
##Attachment
* 이번 MR의 Front 동작을 이해를 돕는 GIF 파일 첨부!
* 리뷰어의 이해를 돕기 위한 모듈/클래스 설계에 대한 Diagram 포함!
• 작성 예시 •
#해결하려는 문제가 무엇인가요?
* TS2305: Module “react-router” has no exported member ‘useHistory’. 오류를 내면서 빌드가 깨집니다. 다른 모듈에 의해 react-router 버전이 5 → 6으로 올라간 게 문제입니다.
# 어떻게 해결했나요?
* 사용하는 react-router의 버전을 package.json에 명시합니다.
MR 템플릿을 적용한 이후로 전체적으로 MR 내용도 좋아졌고 리뷰어도 MR 작성에 대한 고민이 줄어들어 편해졌습니다.
2. 매일 아침 알람으로 오는 MR 목록
클라우드스토리지개발팀에서 매일 아침 MR 목록을 슬랙 알람으로 받는 걸 보고 저희 팀도 이용하기 시작했습니다. 파이썬 깃랩을 이용해서 파이썬 코드를 작성한 후 배치를 등록하면 슬랙이 매일 지정한 시간에 알람을 울려줍니다. 알람에 D-n 표기를 추가해서 우선순위를 쉽게 파악할 수 있게 보완했습니다.
• MR 알람 슬랙 메시지 •
3. 칸반 리뷰 최대치 초과 시 우선 리뷰하기
그러나 알람만으로는 충분하지 않았고, 칸반에서 리뷰 MAX(최대치) 초과 시 모든 팀원이 업무를 중단하고 리뷰하기로 규칙을 정했습니다. 또한 업무에 집중하기 위해 진행 중인 업무(개발) 티켓을 동시에 여러 개 만들지 않고 하나씩 순서대로 진행하기로 결정했습니다.
• MAX 알림이 뜬 칸반 리뷰 •
4. 코드 리뷰 규칙 문서 추가하기
MR 템플릿으로 어느 정도 양식은 갖췄으나 MR 크기와 코멘트 방식이 사람마다 달라서 추가 규칙을 문서로 작성했습니다. 문서 역시 클라우드스토리지개발팀에서 이미 잘 작성해놓아서 저희 상황에 맞게 변경했습니다.
• 코드 리뷰 규칙 문서 •
5. 자동화로 쌓이는 리뷰 줄이기
기존에는 D-n 라벨을 매일 아침 리뷰이가 직접 변경했습니다. 그러다보니 어느 순간부터 잘 사용하지 않게 되어 자동화의 필요성을 느꼈습니다. 이것 또한 파이썬 깃랩을 이용해서 파이썬 코드 작성 후 배치를 등록했습니다. 라벨 자동화 규칙은 다음과 같습니다.
- 라벨이 없으면 D-5 추가
- 하루씩 감소(예 : D-5 → D-4로 변경)
- D-0이 되면 리뷰어 승인 없이 머지할 수 있게 승인 규칙 제거
pre-commit을 사용해 포매팅을 자동화하여 리뷰가 필요한 오류를 미리 줄이기도 합니다. 현재 사용하는 언어의 린트인 Ktlint*와 ESLint**를 깃훅(Git Hook) pre-commit을 이용해서 커밋하기 전에 실행합니다. 또한 MR 생성 시 CI에서 린트를 실행해 컨벤션을 지켰는지 추가로 확인합니다.
* 코틀린 코드 스타일을 검사하고 맞춰주는 도구
** 코드를 분석해 문법 오류나 안티 패턴을 찾아주고 코드 스타일을 맞춰주는 자바스크립트/JSX의 정적 분석 도구
이제는 다음과 같이 일하기 때문에 ‘쌓이는 리뷰’가 많이 줄었습니다.
- 매일 아침 9시 30분(월요일은 오후 1시)에 D-n 라벨을 수정 후 슬랙으로 알람 발송
- MR 단위는 최대한 작게
- 일관된 양식으로 작성된 MR
- 리뷰가 쌓이면 업무 중단 후 리뷰 먼저 처리
◆◆◆
여전히 생성되는 MR은 많지만 바쁠 때는 중요한 MR을 먼저 리뷰하기 때문에 효율적으로 일할 수 있게 되었습니다. 코드 리뷰는 중요하지만 때로는 여러 이유로 소홀해질 때가 있습니다. 저희는 리뷰어가 적은 노력으로 리뷰에 집중할 방법을 계속해서 생각했고 결과적으로 1년 전보다 코드 리뷰를 효율적으로 할 수 있게 되었습니다.
저자 우아한 형제들
우아한형제들은 배달이 일상을 조금 더 행복하게 하도록 오늘도 달리고 있습니다. 평범한 사람들이 모여 비범한 성과를 만들어 내는 곳이될 수 있도록 건강한 조직문화를 만드는 일에 진심을 다합니다. 2016년부터 ‘우아한형제들 기술블로그’를 운영하며 개발 조직의 성장 과정을 기록하고 있습니다.