개발을 공부하는 사람들은 ‘코드 리뷰가 개발자 개인과 팀 전체의 성장에 중요한 역할을 한다’고 생각합니다. 그래서 취준생을 대상으로 하는 유료 코드 리뷰 서비스가 있기도 하고, 좋은 개발 문화를 가진 기업은 저마다의 코드 리뷰 방식이 있습니다. 그렇다면 개발자가 코드 리뷰를 받고 성장하려면 어떤 자세를 가지고 있어야 할까요? 코드 리뷰를 잘하는 방법을 소개하는 글은 많지만, 코드 리뷰를 받는 사람이 알아야 하거나 지녀야 할 자세와 관련된 자료는 부족한데요.

이번 포스팅에서는 코드 리뷰로 성장하기 위해 리뷰이가 지녀야 할 자세를 저의 경험과 더불어 정리했습니다. 아울러 인포그랩 프로덕트 팀의 코드 리뷰 문화도 함께 다뤘습니다.

photo | 인포그랩 GitLab | 인포그랩 GitLab

코드 리뷰란?

코드 리뷰(Code Review)는 개발자들이 서로의 코드를 의도적이고 체계적으로 검토하는 행위를 의미합니다. 더 자세히 설명하자면, 이는 다른 사람이 작성한 코드를 검토하며 궁금한 부분을 질문하거나, 버그가 있는 부분을 알려주거나, 더 효율적으로 개선할 수 있는 부분을 찾아 피드백을 주고받으며 서로의 코드를 개선해 나가는 과정입니다.

코드 리뷰의 중요성

1. 다른 사람이 잘 만든 코드를 활용한 배움의 기회

개발에는 경험을 해야만 얻을 수 있는 지식이 있습니다. 구글링을 해서도 지식을 얻을 수 있지만, 가장 쉽고 빠르게 경험 지식을 배울 수 있는 좋은 방법은 바로 ‘코드 리뷰’입니다. 따라서 코드 리뷰를 통해 자신이 해보지 못한 경험과 노하우를 전수받을 수 있습니다.

2. 코딩 스타일 통일

개발자마다 다양한 코딩 스타일이 존재합니다. 하지만 여러 코딩 스타일이 섞이면 가독성이 떨어지고 유지 보수가 어려워집니다. 코드 리뷰를 하면 개발 결과물이 일관된 스타일을 유지하는 데 도움이 됩니다.

3. 버그와 장애의 사전 예방

본인은 쉽게 발견하지 못하는 실수를 다른 사람은 금방 발견할 수 있습니다. 코드 리뷰를 하면 코드의 부작용(side effect)과 오류를 좀 더 일찍 발견하여 버그와 장애를 프로덕션 환경에 배포하기 전에 예방할 수 있습니다.

4. 코드 품질 향상

'좋은 코드'의 절대적인 기준은 없습니다. 그러나 다른 사람에게 본인의 코드를 보여주고 피드백을 받으면, 스스로 코드를 작성할 때 '좋은 코드'를 한 번 더 생각하게 됩니다. 이러한 과정을 거쳐 전반적인 코드 품질을 향상할 수 있습니다.


코드 리뷰로 성장하는 리뷰이의 자세

photo | 인포그랩 GitLab | 인포그랩 GitLab

1. 하나의 이슈에는 하나의 코드 리뷰를

코드 리뷰는 코드를 작성한 사람이 아닌 다른 사람이 수행하므로, 코드 맥락을 충분히 이해하지 않아도 리뷰할 수 있어야 합니다. 이를 위해, 가능한 작은 단위로 MR(Merge Request)을 생성하여 리뷰어가 이를 빠르게 확인하고 merge 하도록 하는 것이 중요합니다.

2. 리뷰어가 빠르게 이해할 수 있도록 최대한 많은 맥락을 제공해 주기

회사나 팀에서 이미 설정한 이슈 템플릿이 있다면 해당 템플릿을 사용합니다. 그렇지 않다면 ‘코드가 어떻게 동작하는지’가 아닌 ‘왜 이렇게 코드를 짰는지’ why를 작성합니다. 이를 뒷받침하는 공식 문서 링크를 추가하면 리뷰어를 쉽게 납득시킬 만큼 명확하고 강력한 논리적인 근거를 제공할 수 있습니다.

또한 작업 내용을 중심으로 확인받고 싶은 부분을 미리 적으면 리뷰어의 시간을 절약할 수 있습니다.

3. 빠른 시일 내에 리뷰를 받도록 최선을 다하기

‘코드를 작성하고 리뷰어를 선택하는 것까지’만 내 업무가 아니라, ‘리뷰 받은 내용을 반영해서 다시 업데이트한 다음 최종적으로 승인을 받는 것까지(내 기능을 merge 하는 것까지)’가 나의 업무임을 인지하고 책임을 져야 합니다. 그래서 리뷰어를 선택하기 전에 리뷰어가 휴가 중인지, 너무 바쁘진 않은지, 빠르게 대체할 수 있는 사람이 있는지 알아봐야 합니다.

리뷰어를 선택한 후에는 알람이 가기는 하지만, ‘리뷰를 언제까지 받을 수 있는지’ 확인하는 것이 좋습니다. 또한, 며칠이 지났는데도 무소식이라면 이 기능이 반드시 배포되어야 하기에 꼭 리뷰해 줘야 함을 주기적으로 상기시켜 주는 것도 중요합니다.

4. 리뷰어의 코멘트에 피드백 남기기

리뷰어가 코드 리뷰를 마치고 피드백을 남겨주었다면, 그것을 반영하여 코드를 수정한 다음, 다시 코드 리뷰를 요청해야 합니다. 이때 리뷰어가 남긴 코멘트에 명확하게 피드백을 남겨서 리뷰어가 확실하게 상황을 이해할 수 있도록 해주는 것이 좋습니다.

동의한다면 "반영했다", "수정했다", "업데이트했다" 등으로 답장을 남기는 걸 권장합니다. 질문이나 동의하지 않는 내용이 있다면 추가로 코멘트를 작성해 주는 것이 좋습니다.

5. 코드는 내가 아니라는 점 명심하기

코드 리뷰를 감정적으로 받아들이지 않도록 합니다. 코드 리뷰를 받으면 작성한 코드가 비판받는 것 같은 불안감이 생기기도 하고, 감당되지 않는 코멘트를 받게 되면 내 실력에 좌절감을 느끼기도 합니다. 또한 동료나 후임에게 지적받아 불편하고 자존심 상하는 기분이 들 수도 있습니다.

하지만 내가 꾸준히 실력을 쌓아나가기 위해서 코드 리뷰만큼 좋은 건 없습니다. 따라서 코드 리뷰에 이런 마인드를 가지게 되면 성장하기 어려울 수 있습니다. 이에 가급적 리뷰어의 좋은 의도를 생각하도록 합니다.

코드 리뷰는 나를 비판하는 게 아니라, ‘나의 코드를 더욱 개선하는 제안’이라고 생각합니다. 또한, 코멘트를 많이 받았다면, 그것은 배우고 성장할 기회이며, 다음에 동일한 코멘트를 받지 않도록 실력을 향상하는 것이 중요합니다. 나보다 경험이 적은 엔지니어일지라도 다른 관점에서 볼 수 있기 때문에, 항상 배울 점이 있다는 것을 인지하며, 성장하려는 자세를 유지합니다.


인포그랩의 코드 리뷰 문화

인포그랩은 GitLab을 사용해 Merge Request를 보내고, 선임이 리뷰해 주는 ‘온라인 코드 리뷰’와 데일리스를 통한 ‘Pre 코드 리뷰’를 진행합니다.

참고로 GitLab은 GitHub의 PR(Pull Request)이라는 용어 대신 MR(Merge Request)이라는 용어를 사용합니다.

GitLab에서의 코드 리뷰는 다음과 같이 진행됩니다.

  1. MR에 ‘Reviewer’를, Labels에 ‘status:reviewing’을 추가합니다.

    photo | 인포그랩 GitLab | 인포그랩 GitLab
  2. MR 댓글 창에 리뷰어를 태그하고 리뷰 요청을 합니다. 코멘트에는 코드 맥락과 더불어 ‘언제까지 리뷰해달라’는 내용을 담습니다.

    photo | 인포그랩 GitLab | 인포그랩 GitLab
  3. 리뷰어는 GitLab 파이프라인으로 미리 배포된 review app 링크를 통해 변경 사항을 쉽게 파악하고 코멘트를 남깁니다.

    photo | 인포그랩 GitLab | 인포그랩 GitLab
  4. 리뷰이는 코드 리뷰 피드백을 확인하고 코드를 수정한 후, 다시 코드 리뷰를 요청합니다. GitLab 스레드 기능을 활용하여 이때 리뷰어가 남긴 코멘트에 명확하게 피드백을 남깁니다. 이로써 리뷰어가 상황을 확실하게 파악할 수 있도록 합니다.

    photo | 인포그랩 GitLab | 인포그랩 GitLab
  5. 리뷰어는 리뷰이의 업데이트 사항을 확인하고 GitLab 스레드가 해결(Resolved)되면 최종 브랜치에 merge 합니다.


Pre 코드 리뷰인 데일리스는 다음과 같이 진행합니다.

photo | 인포그랩 GitLab | 인포그랩 GitLab
매일 진행하는 데일리스 모습과 비슷합니다.

데일리스(dailies)는 약속한 시각에 팀원 모두가 전날 작업한 코드를 공유하면서 이야기를 나누는 시간입니다. 모두의 시간을 허비한다고 생각할 수도 있겠지만, 3개월 동안 데일리스를 직접 경험한 결과, 문제를 조기에 발견하고 코드의 품질을 높이는 데 매우 중요한 시간임을 깨달았습니다. 동료의 작업을 검토함으로써 전문적인 경험 포인트를 더 빨리 모을 수 있었고, 팀에서 오류나 버그를 집단지성으로 찾아내며, 잘한 일에는 칭찬을, 필요할 때는 조언하거나 다른 해결 방안을 제안하는 시간으로 자유롭지만, 결코 가볍지 않은, 적당한 무게를 가진 코드 리뷰입니다.

데일리스는 GitLab을 통한 온라인 코드 리뷰 과정에 나왔던 내용을 기반으로 자유로운 토론을 진행하기도 하고, 코드 리뷰 요청 전에 사전 리뷰를 요청하는 시간이기도 합니다.

맺음말

많은 사람이 코드 리뷰를 오해하는 부분 중 하나는, 경력이 많거나 실력이 뛰어난 개발자가 신입 개발자의 코드를 검사하는 것입니다. 하지만 코드 리뷰에서는 리뷰이와 리뷰어 중 누가 더 경력이 높거나 낮을 필요가 없습니다. 코드 리뷰의 목적은 코드 작성자에게 피드백을 주는 것도 있지만, 개발자가 피드백을 보고 학습해 성장하도록 돕는 측면이 더 큽니다. 그렇기 때문에 코드 리뷰어, 리뷰이 모두 배려하는 마음은 기본으로 바탕에 두고, 친절하고 명확한 피드백을 주려는 노력과 좋은 점을 배우려는 노력, 이 두 가지 노력의 균형을 맞추며 코드 리뷰를 진행하는 것이 필요합니다.

코드 리뷰를 하면서 모두가 함께 성장하면 좋겠습니다.

인포그랩은 GitLab 및 DevOps에 대한 맞춤 기술 지원을 제공합니다. GitLab(Omnibus/Cloud Native Hybrid) 구축 관련한 지원이 필요하시면 문의하기 로 연락해 주십시오.

<참고자료>

  1. 효과적인 코드리뷰를 위한 리뷰어의 자세
  2. 코드리뷰를 시작하자
  3. 코드리뷰(Code Review)