코드 리뷰는 어떻게 해야할까?

코드리뷰
남에게 코드 리뷰를 받는 건 왜 항상 긴장되는 걸까? 내 작업물과 나를 동일시 하면 안 된다는 건 알고 있지만, 그래도 열심히 짠 코드에 생각지도 못했던 결함이 있었다는 걸 남을 통해 알게 되는 건 참 감사하면서도 부끄러운 경험이다ㅠ_ㅠ. 하지만 이런 부끄러움이 있어야 더 성장하려는 의지가 생기는 거겠지. 이번에는 좋은 코드 리뷰를 하기 위해 고려해야 할 것들에 대해 정리해보았다. 내가 받는 코드 리뷰도 중요하지만, 남에게 해 줄 때도 성의를 보여야 한다는 것을 잊지 말자!

📌 코드 리뷰의 기본 과정

  1. 요구사항 이해
    PR의 설명을 읽고 코드가 해결하려는 문제를 이해해야 한다. “이 코드가 왜 작성되었는지”를 먼저 파악하는 게 중요하다.
  2. 전체적인 구조 확인
    한 파일에 너무 많은 책임이 몰려 있지 않은지, 디렉토리 구조가 적절한지 확인한다.
  3. 코드 스타일 체크
    팀의 컨벤션을 잘 따르고 있는지, 네이밍에 문제는 없는지 확인한다.
  4. 로직 검토 및 문제 발견
    비즈니스 로직이 올바르게 동작하는지, 중복 코드와 비효율적인 코드, 불필요한 코드가 없는지 살펴본다.
  5. 테스트 코드 검토
    테스트가 충분히 작성되었는지, 엣지 케이스를 놓치지 않았는지 확인한다.
  6. 성능 & 보안 고려
    DB 쿼리가 최적화 되었는지, 캐싱이 필요한 부분은 없는지 살펴본다.
  7. 리뷰 의견 남기기
    단순히 “여기 고쳐주세요” 가 아니라 이유를 설명하면서 피드백을 한다. 예제 코드를 간단히 제공할 수 있다면 더 좋다.

📌 기술적으로 고려해야 할 주요 사항

  1. 코드의 기능적 정확성
    • 예상한 대로 동작하는지 확인 (비즈니스 로직 검토)
    • 잘못된 입력이나 엣지 케이스를 처리하는지
    • 예외 처리가 적절하게 되어 있는지
    • 실제 데이터와 연동할 때 문제없는지 (DB, API 호출 등)
  2. 성능 및 효율성
    • 불필요한 연산이나 반복문을 사용하지 않았는지
    • 대량의 데이터가 들어와도 성능 저하가 없는지 (Big-O 고려)
    • DB 조회 횟수가 과도하지 않은지 (N+1 문제 확인)
    • 캐싱이 필요한 부분이 있는지
    • 멀티스레드 환경에서 동기화 문제가 없는지
  3. 코드의 가독성
    • 변수명, 메서드명, 클래스명이 의미를 명확하게 전달하는지
    • 함수의 길이가 너무 길거나, 한 클래스가 너무 많은 역할을 하고 있지 않은지
    • Magic Number, 하드코딩된 문자열이 없는지
    • 코드 스타일이 팀 컨벤션을 따르고 있는지
  4. 확장성과 유지보수성
    • 변화에 유연하게 대처할 수 있는 구조인지 (SOLID 원칙 준수)
    • 의존성이 잘 분리되어 있는지 (느슨한 결합, 인터페이스 사용)
    • 코드가 재사용 가능하게 작성되었는지
    • 설정값이 코드에 박혀 있지 않고 환경 변수나 설정 파일에서 관리되는지
  5. 예외 처리 및 오류 핸들링
    • 예외가 적절하게 처리되고 있는지 (try-catch 남발 여부 확인)
    • 오류 메시지가 적절하고, 원인을 파악할 수 있게 작성되었는지
    • 실패 시 적절한 대응이 있는지 (재시도, 롤백, 대체 플로우)
    • 예외 발생 시 트랜잭션이 올바르게 관리되는지
  6. 테스트 코드 및 커버리지
    • 단위 테스트가 작성되었는지, 그리고 충분한 커버리지를 가지는지
    • 단위 테스트가 독립적으로 실행될 수 있는지 (테스트 간 데이터 공유 문제 없음)
    • Mock을 적절히 활용하여 테스트가 격리되어 있는지
    • 통합 테스트가 필요한 부분에서 작성되었는지
  7. 보안 관련 고려사항
    • SQL Injection, XSS, CSRF 등의 취약점을 방어하고 있는지
    • 비밀번호, API Key 같은 민감한 정보가 코드에 노출되지 않는지
    • 입력값 검증이 충분히 이루어지는지
    • 인증/인가 로직이 적절하게 적용되었는지
  8. 의존성 관리
    • 불필요한 라이브러리를 추가하지 않았는지
    • 사용하지 않는 import가 남아있지 않은지
    • 라이브러리 버전이 최신인지, 보안 취약점이 있는 버전인지 확인
    • 종속성이 불필요하게 많거나, 특정 프레임워크에 과도하게 묶여있지 않은지
  9. 로깅 및 모니터링
    • 로그가 적절한 수준에서 찍히고 있는지 (INFO, DEBUG, ERROR 구분)
    • 너무 많은 로그를 남겨 성능 저하를 일으키지는 않는지
    • 민감한 정보를 로그에 남기지 않는지
    • 장애 발생 시 원인 분석이 가능한 수준의 로그가 남아 있는지
  10. API 및 외부 시스템 연동
    • 외부 API 호출 시 타임아웃 설정이 되어 있는지
    • API 호출 시 적절한 재시도 전략이 있는지 (Circuit Breaker, Retry)
    • API 버전 관리가 적절하게 이루어지고 있는지
  11. 데이터베이스 관련 고려사항
    • 쿼리가 최적화되어 있는지 (EXPLAIN 사용해서 실행 계획 확인)
    • 인덱스를 적절히 사용하고 있는지
    • 트랜잭션이 필요한 경우 적절히 사용하고 있는지
    • 데이터 정합성을 보장할 수 있는지 (ACID 원칙 준수 여부)

✅ 코드 리뷰 시 주요 질문 체크리스트

  1. 이 코드는 요구사항을 정확하게 반영하고 있는가?
  2. 성능에 문제가 발생할 가능성이 있는가?
  3. 유지보수하기 쉬운 구조로 작성되었는가?
  4. 예외 처리가 충분히 되어 있는가?
  5. 테스트가 잘 작성되어 있는가?
  6. 보안적으로 취약점이 없는가?
  7. 불필요한 코드, 중복 코드가 있는가?
  8. 의존성을 최소화하고 있는가?
  9. 확장성을 고려한 설계인가?
  10. 배포 및 운영 시 문제가 없을까?