Skip to main content

Command Palette

Search for a command to run...

당신의 코드리뷰가 어려운 이유

Updated
4 min read
당신의 코드리뷰가 어려운 이유

Back-end Engineer, Clarity in code. Calm in process.

2022년 4월 24일 Velog에 작성한 글을 옮겨왔습니다.

이미지 출처

백명석님의 코드리뷰 강의를 듣고 작성한 글입니다.

코드 리뷰 목적

  • 주목적은 품질 문제 검수(버그, 장애)

  • 추가적인 목적

    • 아키텍처 속성 개선을 위해 코드를 개선하는 것.

    • 코드, 해결책 등과 관련된 지식 공유에 기여하기 위함.

    • 집단 코드 오너십 및 결속 증대.

코드 리뷰가 어려운 이유

  • 저자는 본인이 멋지다고 생각하는 PR을 보내고

  • 리뷰어는 왜 멋지지 않은지에 대해 장황한 이유를 작성한다.

  • 코드에 대한 비판을 자신에 대한 비판으로 이해한다.

    • 특히 상대가 직책자라면 ?
  • 피드백을 조심스럽게 표현하는 것이 중요하다.

그래서 어떻게 하라고 ?

1. 지루한 작업은 컴퓨터로 처리한다.

  • 기계가 할 수 있는 것들

    • 공백, 들여쓰기 등
  • 별도의 커밋, PR로 분리해 불필요하게 리뷰할 필요 없게 한다.

2. 스타일 가이드를 통해 스타일 논쟁을 해소한다.

3. 리뷰는 즉시 시작해라.

  • 코드리뷰를 높은 우선 순위로 둔다.

    • 저자는 리뷰를 받을 때까지 Block 되므로
  • PR의 SizeComplexity가 중요.

    • 작고 범위가 좁은 PR ->

    • 쉽고 상쾌하게 리뷰하기 좋음 ->

    • 빠르게 리뷰 수행

  • 리뷰 라운드의 최대 시간은 하루

    • 우선 순위 높은 업무로 1일 내 불가하면 다른 리뷰어를 지정한다.

    • 재지정이 자주 일어난다면, 그 팀의 일하는 속도를 고려해봐야한다.

4. 고수준으로 시작, 저수준으로 내려가라.

  • 한 리뷰에 20~50개의 의견은 위험하다.

    • 초기 라운드에서 고수준 피드백으로 제한한다.

      • 인터페이스 클래스의 재설계, 복잡한 함수의 분리 등
    • 고수준 피드백 처리된 후 저수준의 이슈를 처리한다.

      • 변수명 변경, 주석을 명확하게 하는 것 등

5. 예제 코드 제공에 관대해라.

  • 하지만, 너무 긴 예제를 제공하는 것은 억압적으로 보인다.

  • 너무 많은 예제를 제공하는 것도 안좋아 보일 수 있다.

    • 저자가 코드를 작성할 수 없다고 생각한다는 신호가 될 수 있다.

6. 절대 "너"라고 하지 마라. (=~님도 같다)

  • 리뷰의 핵심은 코드가 나아지게 하기 위한 것.

  • 너라고 하는 순간 비판의 대상은 저자가 된다.

  • 단어가 틀린 경우 "너 스펠링 틀렸어 00" X -> "스펠링만 정정"

  • 주어만 빼라

7. 피드백은 명령이 아니라 요청으로 표현해라.

  • ~해(X) / ~하는게 어떨까요?(O)

8. 의견이 아니라 원칙에 기반해서 피드백해라.

  • 저자에게 의견을 줄 때는 "제안하는 변경""변경의 이유"를 모두 설명해라.

  • SW는 항상 원칙에 기반할 수는 없다.

    • 단지 그냥 보기 싫거나 직관적이지 않을 수도 있음.

    • 무엇을 할 수 있을지 객관적으로 설명해라.

      • 이거 너무 혼란스러워(X)

      • 이건 이해하기 어렵다(O)

9. 한 두 등급만 코드레벨을 올리는 것을 목표로 한다.

  • D 등급이면 C나 B 등급을 받도록 도와라.

    • Working effective with legacy code
  • Make it work, make it right, make it fast.

    • 첫번째만 필수고 나머지는 추가적인 것.
  • 완전하지는 않아도 충분히 좋은 코드가 되도록 하면 된다.

    • 승인을 보류하는 유일한 이유는 수차례 리뷰 후에도 코드가 F인 경우

10. 반복적인 패턴에 대한 피드백을 제한한다.

  • 2~3개 정도만 언급하고 끝낼 것.

  • 개별 사례가 아닌 패턴으로 언급할 것.

11. 리뷰의 범위를 존중한다.

  • PR 범위에 대해서만 언급해라.

    • 하지만 PR이 둘러싼 코드에 영향을 미칠 경우엔 언급한다.

12. 큰 리뷰를 잘게 나눌 기회를 찾아라.

  • 400 라인 이상 리뷰는 작게 분리한다.

  • 분리를 위한 논리적 경계를 식별해 짐을 덜어준다.

  • 여러 파일에 걸쳐 변경했다면, 파일별로 리뷰를 나눠라.

  • 코드 품질이 낮을 때 특히 리뷰 분리를 강조한다.

    • 품질이 낮은 코드 리뷰는 라인이 늘수록 리뷰하기 어려워지기 때문

13. 진정한 칭찬을 해라.

  • 잘못된 부분만 리뷰하지 말고 긍정적인 행위에 대해서도 PR 해라.

14. 사소한 이슈만 남았다면 승인해라.

  • 모든 comment가 수정되는 걸 확인하고 나서야 승인하지 않아도 된다.

  • 중요한 comment가 완료되었다면 승인해도 된다.

  • 아래 조건 중 하나라도 만족되면 승인한다.

    • 더 이상 comment가 없을 때

    • 남겨진 comment가 사소한 이슈일 때 (오타 등)

    • 남겨진 comment가 선택적 제안인 경우

      • ex) 높은 수준의 리팩토링 / 디자인 패턴 적용 등

15. 교착상태를 적극적으로 처리해라

  • comment를 반영하지 않고 승인 거부 하는 경우.

  • 저자는 comment 반영을 거부하는 경우

    • 만나서 얘기해라

    • 인정하거나 Escalate

  • 인정이 불가한 경우

    • 팀장이나 테크 리더에게 Escalation을 권유한다.

    • 다른 리뷰어에게 할당

좋은 리뷰어가 되기 위한 방법

  • 학습, 연습 뿐이다.

  • 사례를 공유한다.

  • Letter Grade

    • Make it work / right / fast : working 할 정도로만 해라
  • PR Template(Chrome Plugin 등)을 사용해라.

안하는 사람들을 어떻게 해야할까

  • 자신에게 이득이 되어야 한다.

    • 멋져보여야 하고 싶어진다. 그게 뭐든
  • Refactoring Tip을 공유한다.

Code Review 문화 정착의 어려움과 극복 방법

  • On / Offline의 차이에서 오는 어려움

    • 꾸중 vs 토론

      • Online에서의 토론이 꾸중처럼 느껴질 수 있다.
  • Author의 노력

    • 작성자의 노력이 제일 중요하다.

    • 어떻게 작성하느냐에 따라 다수의 리뷰어의 시간을 절약하고, 효과적인 리뷰가 가능하다.

  • Leader의 관심과 의지가 필요하다.

  • 코드 비난에 대한 두려움 -> 나에 대한 비난이 아니다.

PR 효과

  • 예상 못한 버그를 타 프로젝트에서 발견하기도 한다.

  • 선플이 달리기 시작함.

  • 많은 사람이 코드를 보고 있다는 생각에 PR 올리기 전 코드를 더 다듬게 된다.

  • 좋은 설계, 아키텍처, 클린코드, TDD 등에 대한 공감대가 형성된다.

기타

  • 변경 내역이 많으면, 커밋을 의미있게 나눠서 한 경우 커밋 단위로 봐달라고 요청을 하자

    • 그래도 잘라서 올리자 200-400자 내외로
24 views

More from this blog

2025 게으른 개발자 컨퍼런스 제 2회 후기

게으르다면서 세상 부지런한 개발자 컨퍼런스에 다녀왔다 🏃‍♀️ 2025 게으른 개발자 컨퍼런스는 테크살롱에서 진행되었다. 몰랐는데 우아한형제들이 만든 곳이라고.후원사가 한빛미디어와 넥스트스텝이었다. 백엔드 컨퍼런스가 많지 않아서인지(?) 티켓팅 경쟁이 꽤나 치열했는데, 운 좋게 아는 분에게 양도 받아서 다녀왔다. 컨퍼런스 순서는 아래와 같다. 24/7 끊기지 않는 잔고 서비스 개발기 (황보성우님) Go 서버 메모리 누수 버그 개선 (김환석...

Apr 20, 20255 min read27
2025 게으른 개발자 컨퍼런스 제 2회 후기

AWS Bedrock(생성형 AI) 관련 자료 모음

Bedrock이란? AWS에서 제공하는 생성형 AI 서비스 플랫폼으로 개발자가 다양한 Foundation Model (FMs)를 쉽게 사용하고 애플리케이션에 통합할 수 있도록 지원하는 서비스. 대표적인 생성형 모델(ex. 텍스트 생성, 요약, 이미지 생성 등)을 API 형태로 바로 호출 가능 머신러닝 모델을 직접 학습하거나 인프라 운영하지 않아도 됨 주요 특징 항목설명 멀티 모델 제공여러 AI 모델 제공사(예: Anthr...

Mar 30, 20255 min read44
AWS Bedrock(생성형 AI) 관련 자료 모음

2022 하반기~2024 상반기 까지의 회고글

어디서부터 글을 써야할까.그동안 정말 많은 일이 있었다. 새 회사 이 회고글 이후, 들어간 새 회사. 초반엔 정말 좋았었다.바쁘지만 열정 넘치는 회사 분위기, 성장을 추구하는 동료들, 나은 결과를 함께 만들어 나간다는 성취감..그러다 점점 상황이 어긋나기 시작한 것은 수습이 지나고, 2023년 상반기부터 였다. 감당할 수 없는 일 일이 감당할 수 없을 정도로 밀려들어왔다. 팀 대내외 적으로 계속 달리는 분위기였고, 리더는 그런 분위기를 조장하고...

Jul 8, 20246 min read712
2022 하반기~2024 상반기 까지의 회고글
L

let.it.log

11 posts

간단히 기록하는 블로그