남에게 코드 리뷰를 받는 건 왜 항상 긴장되는 걸까? 내 작업물과 나를 동일시 하면 안 된다는 건 알고 있지만, 그래도 열심히 짠 코드에 생각지도 못했던 결함이 있었다는 걸 남을 통해 알게 되는 건 참 감사하면서도 부끄러운 경험이다ㅠ_ㅠ. 하지만 이런 부끄러움이 있어야 더 성장하려는 의지가 생기는 거겠지. 이번에는 좋은 코드 리뷰를 하기 위해 고려해야 할 것들에 대해 정리해보았다. 내가 받는 코드 리뷰도 중요하지만, 남에게 해 줄 때도 성의를 보여야 한다는 것을 잊지 말자!
📌 코드 리뷰의 기본 과정
- 요구사항 이해
PR의 설명을 읽고 코드가 해결하려는 문제를 이해해야 한다. “이 코드가 왜 작성되었는지”를 먼저 파악하는 게 중요하다. - 전체적인 구조 확인
한 파일에 너무 많은 책임이 몰려 있지 않은지, 디렉토리 구조가 적절한지 확인한다. - 코드 스타일 체크
팀의 컨벤션을 잘 따르고 있는지, 네이밍에 문제는 없는지 확인한다. - 로직 검토 및 문제 발견
비즈니스 로직이 올바르게 동작하는지, 중복 코드와 비효율적인 코드, 불필요한 코드가 없는지 살펴본다. - 테스트 코드 검토
테스트가 충분히 작성되었는지, 엣지 케이스를 놓치지 않았는지 확인한다. - 성능 & 보안 고려
DB 쿼리가 최적화 되었는지, 캐싱이 필요한 부분은 없는지 살펴본다. - 리뷰 의견 남기기
단순히 “여기 고쳐주세요” 가 아니라 이유를 설명하면서 피드백을 한다. 예제 코드를 간단히 제공할 수 있다면 더 좋다.
📌 기술적으로 고려해야 할 주요 사항
- 코드의 기능적 정확성
- 예상한 대로 동작하는지 확인 (비즈니스 로직 검토)
- 잘못된 입력이나 엣지 케이스를 처리하는지
- 예외 처리가 적절하게 되어 있는지
- 실제 데이터와 연동할 때 문제없는지 (DB, API 호출 등)
- 성능 및 효율성
- 불필요한 연산이나 반복문을 사용하지 않았는지
- 대량의 데이터가 들어와도 성능 저하가 없는지 (Big-O 고려)
- DB 조회 횟수가 과도하지 않은지 (N+1 문제 확인)
- 캐싱이 필요한 부분이 있는지
- 멀티스레드 환경에서 동기화 문제가 없는지
- 코드의 가독성
- 변수명, 메서드명, 클래스명이 의미를 명확하게 전달하는지
- 함수의 길이가 너무 길거나, 한 클래스가 너무 많은 역할을 하고 있지 않은지
- Magic Number, 하드코딩된 문자열이 없는지
- 코드 스타일이 팀 컨벤션을 따르고 있는지
- 확장성과 유지보수성
- 변화에 유연하게 대처할 수 있는 구조인지 (SOLID 원칙 준수)
- 의존성이 잘 분리되어 있는지 (느슨한 결합, 인터페이스 사용)
- 코드가 재사용 가능하게 작성되었는지
- 설정값이 코드에 박혀 있지 않고 환경 변수나 설정 파일에서 관리되는지
- 예외 처리 및 오류 핸들링
- 예외가 적절하게 처리되고 있는지 (try-catch 남발 여부 확인)
- 오류 메시지가 적절하고, 원인을 파악할 수 있게 작성되었는지
- 실패 시 적절한 대응이 있는지 (재시도, 롤백, 대체 플로우)
- 예외 발생 시 트랜잭션이 올바르게 관리되는지
- 테스트 코드 및 커버리지
- 단위 테스트가 작성되었는지, 그리고 충분한 커버리지를 가지는지
- 단위 테스트가 독립적으로 실행될 수 있는지 (테스트 간 데이터 공유 문제 없음)
- Mock을 적절히 활용하여 테스트가 격리되어 있는지
- 통합 테스트가 필요한 부분에서 작성되었는지
- 보안 관련 고려사항
- SQL Injection, XSS, CSRF 등의 취약점을 방어하고 있는지
- 비밀번호, API Key 같은 민감한 정보가 코드에 노출되지 않는지
- 입력값 검증이 충분히 이루어지는지
- 인증/인가 로직이 적절하게 적용되었는지
- 의존성 관리
- 불필요한 라이브러리를 추가하지 않았는지
- 사용하지 않는 import가 남아있지 않은지
- 라이브러리 버전이 최신인지, 보안 취약점이 있는 버전인지 확인
- 종속성이 불필요하게 많거나, 특정 프레임워크에 과도하게 묶여있지 않은지
- 로깅 및 모니터링
- 로그가 적절한 수준에서 찍히고 있는지 (INFO, DEBUG, ERROR 구분)
- 너무 많은 로그를 남겨 성능 저하를 일으키지는 않는지
- 민감한 정보를 로그에 남기지 않는지
- 장애 발생 시 원인 분석이 가능한 수준의 로그가 남아 있는지
- API 및 외부 시스템 연동
- 외부 API 호출 시 타임아웃 설정이 되어 있는지
- API 호출 시 적절한 재시도 전략이 있는지 (Circuit Breaker, Retry)
- API 버전 관리가 적절하게 이루어지고 있는지
- 데이터베이스 관련 고려사항
- 쿼리가 최적화되어 있는지 (EXPLAIN 사용해서 실행 계획 확인)
- 인덱스를 적절히 사용하고 있는지
- 트랜잭션이 필요한 경우 적절히 사용하고 있는지
- 데이터 정합성을 보장할 수 있는지 (ACID 원칙 준수 여부)
✅ 코드 리뷰 시 주요 질문 체크리스트
- 이 코드는 요구사항을 정확하게 반영하고 있는가?
- 성능에 문제가 발생할 가능성이 있는가?
- 유지보수하기 쉬운 구조로 작성되었는가?
- 예외 처리가 충분히 되어 있는가?
- 테스트가 잘 작성되어 있는가?
- 보안적으로 취약점이 없는가?
- 불필요한 코드, 중복 코드가 있는가?
- 의존성을 최소화하고 있는가?
- 확장성을 고려한 설계인가?
- 배포 및 운영 시 문제가 없을까?