← 모든 글

PR 리뷰에서 나는 무엇을 안 보고 무엇을 보나

리뷰 시간은 한정적이다. 무엇을 먼저 볼지 정하지 않으면 스타일만 잡다 끝난다.

리뷰 시간은 한정적이다. 그런데 막상 PR을 열면 줄 바꿈 한 칸에 코멘트를 달고, 정작 트랜잭션 경계는 넘어간다. 오래 돼서야 깨달았다 — 리뷰 품질은 얼마나 많이 보느냐가 아니라 무엇을 먼저 보느냐로 결정된다.

스타일은 도구에 맡긴다

들여쓰기, 따옴표, import 정렬. 이걸 사람이 보면 지는 거다. 우리 팀은 올해 초 prettier + eslint auto-fix를 CI에 묶었다. 그 전까지는 리뷰의 체감 30%가 “여기 세미콜론” 이었다.

  • prettier 설정을 레포에 커밋하고 CI에서 --check 플래그로 돌린다. 실패하면 머지가 막히도록 branch protection을 걸었다. 처음엔 레거시 파일이 전부 빨개져서 한 주가 날아갔지만, 그 이후로는 스타일 코멘트가 0이다. 말 그대로 0.
  • 팀원 한 명이 “나는 탭이 편한데”라며 설정을 건드리자고 했다. 정중히 거절했다. 스타일 논쟁에 드는 에너지가 실제 버그 찾는 에너지보다 비싸다는 걸 경험으로 안다.

스타일을 도구에 넘기고 나면 눈이 비로소 중요한 곳으로 간다.

맨 먼저 보는 것: 경계

DB 트랜잭션 경계, API 응답 경계, 에러가 어디서 잡히는지. 로직이 아무리 깔끔해도 트랜잭션 밖에서 외부 API를 호출하면 결국 터진다.

  • 실제 사건. 작년 말 결제 서비스에서 트랜잭션 안에서 PG사 HTTP 요청을 날리는 PR이 들어왔다. 로직은 문제없었다. PG사가 30초 타임아웃을 내면 우리 DB 커넥션이 그대로 물려 있었고, 피크 때 커넥션 풀이 바닥났다. 리뷰에서 잡지 못하고 스테이징에서 재현해서 간신히 막았다.
  • 그 이후 트랜잭션 블록이 있는 PR은 무조건 외부 I/O가 그 안에 들어갔는지부터 확인한다. 5초면 보인다. 잡으면 장애 하나를 막는 거다.

경계를 먼저 보는 습관이 생긴 뒤로, 리뷰에서 실제 장애로 이어졌을 케이스를 최근 6개월 기준으로 세 번 잡았다.

두 번째: 실패 경로

정상 경로는 보통 잘 짜여 있다. 문제는 예외다. try-catch 가 있긴 한데 아무것도 안 하거나, 에러를 삼키거나, 잘못된 레이어에서 잡거나.

  • 코드 한 줄. catch (e) {} — 이거 보이면 무조건 코멘트를 단다. 왜 삼켰는지, 의도적이라면 주석이라도 있어야 한다. 아무 설명 없이 삼킨 에러가 프로덕션에서 조용히 사라지는 걸 두 번 겪었다. 두 번 모두 데이터 정합성 이슈로 돌아왔다.
  • 실패 시 재시도가 필요한 케이스인데 그냥 throw만 하는 경우도 자주 보인다. 이건 기능이 틀린 게 아니라 운영 요구사항을 모르고 짠 거다. 리뷰 코멘트보다 먼저 슬랙으로 물어본다. “이 작업 실패하면 사용자한테 어떻게 보여요?”

실패 경로를 추적하다 보면 PR 설명에 없는 요구사항이 숨어 있는 경우가 꽤 있다.

세 번째: 변경의 크기

500줄 넘는 PR은 제대로 리뷰가 안 된다. 이건 솔직히 리뷰어 역량 문제가 아니라 인지 한계다. 내가 아무리 집중해도 400줄 이후로는 눈이 미끄러진다.

  • 팀에서 PR 사이즈를 300줄 이하로 가이드했다. 처음엔 “기능 단위로 쪼개기 어렵다”는 말이 많았다. 직접 몇 개를 같이 쪼개봤다. 대부분 가능했다. 불가능한 경우는 리팩터 PR과 기능 PR을 분리하는 방식으로 해결됐다.
  • 이 가이드 이후 리뷰 turnaround가 평균 이틀에서 반나절로 줄었다. 실제로 측정한 수치다. 작은 PR은 집중력이 유지되니 코멘트 밀도도 높아졌다.

크기를 줄이는 것 자체가 리뷰 품질을 높이는 설계다.

안 보는 것을 명시한다

이게 의외로 중요하다. 리뷰어가 무엇을 건너뛰었는지를 PR 작성자가 알아야 한다. 안 그러면 “리뷰 통과했으니 괜찮겠지”가 된다.

  • 우리 팀은 리뷰 코멘트에 [no-review: perf], [no-review: security] 같은 태그를 달기 시작했다. “이 부분 성능은 이번 리뷰 범위 밖이니 따로 확인 필요”를 명시하는 거다. 처음엔 어색했는데, 이 태그가 붙은 부분에서 나중에 별도 이슈가 생기면 추적이 된다.
  • 보안 관련 변경은 내가 직접 다 볼 수 없다. 그래서 인증/권한 관련 PR은 무조건 보안 담당자를 리뷰어로 추가한다. 내가 lgtm 누르는 게 아니라 전문가 눈을 하나 더 붙이는 거다.

무엇을 안 봤는지 적는 것, 이게 솔직한 리뷰다.

다음 한 가지

PR description 템플릿에 “리뷰어가 집중해줬으면 하는 한 곳”을 필수 항목으로 넣는다. 작성자가 먼저 위험 지점을 지목하면 리뷰 시간이 절반으로 줄 거라 보고 있다.


🛒 이 글과 어울리는 추천 상품

위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.