Skip to content

Latest commit

 

History

History
112 lines (87 loc) · 4.1 KB

File metadata and controls

112 lines (87 loc) · 4.1 KB

코드 리뷰 체크리스트

이 문서는 KubeMigrate 프로젝트의 코드 리뷰 시 확인해야 할 항목들을 정리한 체크리스트입니다.

📋 기본 체크리스트

✅ 코드 스타일 및 컨벤션

  • Go 스타일 가이드라인을 준수하는가?
  • gofmt로 포맷팅되었는가?
  • golangci-lint 검사를 통과했는가?
  • 네이밍 컨벤션이 일관되는가? (PascalCase, camelCase)
  • 패키지명이 소문자로 되어 있는가?

✅ 주석 및 문서화

  • 모든 공개 함수에 한글 주석이 작성되었는가?
  • 주석이 함수의 동작을 명확히 설명하는가?
  • 복잡한 로직에 인라인 주석이 있는가?
  • API 문서가 업데이트되었는가? (Swagger)

✅ 에러 처리

  • 모든 에러가 적절히 처리되었는가?
  • response.RespondWithErrorModel을 사용하는가?
  • echo.NewHTTPError 사용을 최소화했는가?
  • 에러 메시지가 사용자에게 도움이 되는가?
  • 에러 로깅이 적절한가?

✅ 로깅

  • fmt.Printf 대신 구조화된 로깅을 사용하는가?
  • 로그 레벨이 적절한가? (Error, Warn, Info, Debug)
  • 로그에 필요한 컨텍스트 정보가 포함되었는가?
  • 민감한 정보가 로그에 노출되지 않았는가?

✅ 테스트

  • 새로운 기능에 대한 테스트가 작성되었는가?
  • 테스트 커버리지가 충분한가?
  • 테스트가 독립적으로 실행 가능한가?
  • 테스트 데이터가 적절히 정리되었는가?

✅ 성능 및 최적화

  • 불필요한 반복문이나 중첩이 없는가?
  • 메모리 누수가 발생할 수 있는 코드가 없는가?
  • 데이터베이스 쿼리가 최적화되었는가?
  • 캐시를 적절히 활용하고 있는가?

✅ 보안

  • 사용자 입력이 적절히 검증되었는가?
  • SQL 인젝션 가능성이 없는가?
  • 민감한 정보가 하드코딩되지 않았는가?
  • 인증/인가 로직이 올바른가?

🔍 상세 체크리스트

📁 프로젝트 구조

  • 파일이 올바른 디렉토리에 위치하는가?
  • 패키지 의존성이 올바른 방향인가? (internal → pkg)
  • 순환 의존성이 없는가?

🏗️ 아키텍처

  • 단일 책임 원칙을 준수하는가?
  • 의존성 주입이 적절히 사용되었는가?
  • 인터페이스가 적절히 정의되었는가?

🔧 설정 관리

  • 매직 넘버가 상수로 정의되었는가?
  • 환경 변수를 적절히 사용하는가?
  • 설정 검증이 충분한가?

📊 데이터 처리

  • 데이터 바인딩이 안전한가?
  • 타입 어설션이 안전한가?
  • JSON 직렬화/역직렬화가 올바른가?

🌐 API 설계

  • RESTful 원칙을 준수하는가?
  • HTTP 상태 코드가 적절한가?
  • 요청/응답 형식이 일관되는가?
  • API 버전 관리가 올바른가?

🚨 특별 주의사항

⚠️ 금지사항

  • fmt.Printf 사용 금지
  • echo.NewHTTPError 직접 사용 금지
  • 매직 넘버 사용 금지
  • 하드코딩된 문자열 사용 금지
  • 패닉 사용 금지

✅ 권장사항

  • 구조화된 로깅 사용
  • 표준 에러 응답 형식 사용
  • 상수 정의 및 사용
  • 적절한 주석 작성
  • 테스트 코드 작성

📝 리뷰 체크리스트 사용법

  1. 코드 작성 후: 작성자가 체크리스트를 먼저 확인
  2. 리뷰 요청 시: 체크리스트 항목들을 확인하여 준비
  3. 리뷰 진행 시: 각 항목을 체크하며 리뷰
  4. 리뷰 완료 후: 미완료 항목들을 이슈로 등록

🔄 지속적 개선

이 체크리스트는 프로젝트의 발전에 따라 지속적으로 업데이트되어야 합니다.

  • 새로운 패턴이나 모범 사례 추가
  • 프로젝트 특화된 규칙 추가
  • 팀 피드백 반영

참고: 이 체크리스트는 코드 품질 향상을 위한 가이드라인입니다. 모든 항목을 완벽히 준수하는 것이 목표이지만, 상황에 따라 유연하게 적용할 수 있습니다.