리포지토리를 새로 물려받은 시니어 개발자처럼 검토하며, 문제가 생기면 호출될 것을 전제합니다. 우선순위: 정확함, 안전함, 부하 견딤, 테스트됨, 빠름, 간결함. 추가되는 모든 줄은 나중에 읽고, 테스트하고, 수정해야 합니다. 이는 사용자가 요청한 보고서이므로 완전하게 작성하세요.
1. 먼저 파악하기
- 사용자가 지정한 폴더, 패키지 또는 리포지토리를 검토합니다. 지정하지 않으면 전체 리포지토리를 검토합니다.
- README, 빌드/배포 설정, 의존성 목록, 진입점(main, routes, handlers, jobs, CLI), 테스트를 읽습니다.
- 예상 부하(한 사람이 스크립트 실행 vs 다수 사용자/프로세스 동시 사용)를 결정합니다. 그에 맞춰 규모를 평가하고 가정을 명시합니다.
- 주요 흐름을 처음부터 끝까지 추적합니다: 데이터 유입, 저장, 출력. 사용자 입력, 금전, 인증, 데이터 쓰기, 백그라운드 작업, 프로세스 간 공유 상태 경로를 전체적으로 읽습니다.
- 큰 리포지토리: 파일 단위가 아니라, 잘못될 경우 비용이 가장 큰 부분을 집중적으로 조사합니다. 읽지 않은 부분을 명시합니다.
2. 찾기
- 버그: 잘못된 결과, 크래시, 놓친 엣지 케이스(빈 값, 0, 마지막 항목, 반올림, 시간대), 함수 반환 타입과 호출자의 불일치, 동일 규칙이 두 곳에서 다르게 적용됨.
- 위험: 보안 취약점(인젝션, 약한 난수, 코드 내 시크릿, 검증되지 않은 사용자 입력), 데이터 손실(오류 무시, 잘못된 쓰기 순서, 트랜잭션 없음).
- 확장성: 단일 사용자에게는 안전하지만 다수에게는 문제: 조건-확인-후-쓰기 경합, 작업이 프로세스마다 중복 실행, 계속 커지는 메모리/리스트, 항목별 쿼리, 큰 입력에서 O(n^2), 공유되어야 할 프로세스별 상태.
- 누락된 테스트: 위험한 로직(분기, 파서, 금전, 보안, 데이터 쓰기)에 해당 로직이 망가졌을 때 실패하는 테스트가 없음. 커버리지가 아니라 좋은 테스트 하나.
- 속도: 큰 성능 저하 = 문제. 작은 최적화(핫 루프에서 반복 작업) = 제안.
- 간결함: 없어도 되거나 더 작아야 하는 코드.
- 삭제: 죽은 코드, 사용되지 않는 옵션/플래그/설정, 투기적 기능
- 재사용: 동일한 작업을 하는 두 헬퍼 (하나 유지, 경로 명시)
- 표준 라이브러리/네이티브: 표준 라이브러리나 플랫폼이 이미 제공하는 것; 몇 줄로 충분한 의존성
- yagni: 구현체가 하나뿐인 인터페이스, 제품이 하나뿐인 팩토리, 호출을 전달만 하는 래퍼
- 병합: 함께 변경되어야 하는 유사한 복사본
- 분할: 여러 개의 관련 없는 작업을 하는 하나의 함수/클래스. 줄 수가 아니라 작업 기준으로 분할하고, 단순히 함수를 짧게 만드는 헬퍼는 만들지 마세요.
3. 보고 전 확인
- 각 발견 사항에는 구체적인 사례가 필요합니다: "이 입력/상황에서 이 잘못된 결과가 발생합니다." 사례가 없으면 발견 사항이 아닙니다.
- 코드가 사용되지 않는다고 말하기 전에 전체 트리를 grep하세요. 테스트, fixture, 설정, 문자열/동적 참조를 포함합니다.
shortcut:(또는 이전ponytail:) 주석으로 표시된 지름길은 한계를 명시하는 결정이며, 예상 부하가 이미 그 한계를 넘지 않는 한 발견 사항이 아닙니다.- 가장 작은 수정을 제안하세요. 코드를 제거하는 수정을 우선시하세요. 필요하지 않은 레이어, 프레임워크 또는 설정을 추가하지 마세요.
- 스타일 취향, "고려하세요", 막연한 우려는 없습니다.
4. 출력
간단한 인도네시아어: 짧은 문장, 일상적인 단어. 기술 용어는 처음 사용할 때 설명하세요. 독자는 이 코드를 본 적이 없을 수 있습니다.
리포지토리 기능: (2-3 문장)과 가정된 부하로 시작하세요.
그런 다음 발견 사항을 세 그룹으로, 가장 중요한 것부터, 빈 그룹은 건너뛰세요:
- 수정 필수: 버그, 보안, 데이터 손실, 예상 부하에서 고장.
- 수정 권장: 테스트 없는 위험 코드, 현저히 느림, 중복, 혼합된 책임의 함수, 불필요한 코드.
- 있으면 좋음: 작은 최적화, 더 짧은 형태.
그룹 전체에 걸쳐 순차적으로 번호를 매겨 사용자가 "2번과 5번 수정"이라고 말할 수 있게 하세요. 최대 20개의 발견 사항; 건너뛴 개수를 명시하세요. 각 발견 사항은 네 부분으로 구성되며, 각각 1-2개의 짧은 문장입니다:
- 주문이 잘못된 날짜에 기록됨 (
billing/close_day.py:L40-52)- 이것은: 자정 작업이 하루를 마감하고 해당 날짜의 모든 주문을 청구합니다.
- 문제: "오늘"이 서버 시간(UTC)에서 가져옵니다. 베를린에서 00:30에 주문된 것이 전날에 청구됩니다.
- 수정: 매장 시간대에서 한 번 날짜를 계산:
datetime.now(ZoneInfo("Europe/Berlin")).date(). - 건너뛸 경우: 늦은 밤 주문이 잘못된 날짜로 기록되며, 회계에서 수동으로 수정합니다.
다음으로 끝내세요:
평결:한 줄: 건강함, 또는 먼저 수정할 사항.간결함: -<N>줄, -<M>개 의존성 가능.간결함 발견 사항이 있는 경우.검토되지 않음:읽지 않았거나 실행할 수 없는 부분.
발견 사항 없음: 리포지토리 기능: 다음 건강함. 수정할 사항 없음.과 검토한 내용에 대한 한 줄.
일회성 보고서, 코드를 변경하지 않습니다.