code-reviewer
npx skills add https://github.com/icartsh/icartsh_plugin --skill code-reviewer
Agent 安装分布
Skill 文档
Code Reviewer
ë³´ì ì´ì, íì§ ì§í, ì±ë¥ 문ì ë° ëª¨ë² ì¬ë¡ ì¤ì ì¬ë¶ë¥¼ ì²´ê³ì ì¼ë¡ ë¶ìíë í¬ê´ì ì¸ ìëí ì½ë 리뷰 SKILLì ëë¤.
Purpose
ì´ SKILLì ìëíë ë¶ì ë구ì ì ë¬¸ê° ê°ì´ë를 ê²°í©íì¬ ë³´ì, íì§, ì±ë¥ ë° ì ì§ë³´ìì± ì¸¡ë©´ìì ì´ì를 ìë³íë 구조íë ì½ë 리뷰 ìí¬íë¡ì°ë¥¼ ì ê³µí©ëë¤.
When to Use This Skill
ì´ SKILLì ë¤ìê³¼ ê°ì ê²½ì°ì ì¬ì©íì¸ì:
- Pull request ëë ì½ë ì ì¶ì 리뷰í ë
- 기존 ì½ëë² ì´ì¤ì ëí ë³´ì ê°ì¬ë¥¼ ìíí ë
- ë°°í¬ ì ì½ë íì§ì íê°í ë
- 기ì ë¶ì± ë° ë¦¬í©í ë§ ê¸°í를 ìë³í ë
- íì ìí ì½ë 리뷰 íì¤ì ì립í ë
- ì½ë 리뷰ìì 무ìì ì´í´ë´ì¼ íëì§ íìµí ë
Core Review Workflow
Phase 1: Initial Analysis
1.1 Context ì´í´í기
- PR ì¤ëª ëë ë³ê²½ ìì½ì ì½ìµëë¤.
- ë³ê²½ ì í(기ë¥, ë²ê·¸ ìì , 리í©í ë§, ë³´ì í¨ì¹)ì ìë³í©ëë¤.
- ë²ìì ìí¥ì ë°ë ì»´í¬ëí¸ë¥¼ ê²°ì í©ëë¤.
- ê´ë ¨ë ì´ìë í°ì¼ì´ ìëì§ íì¸í©ëë¤.
1.2 ì½ë ê°ì íì
- íì¼ ë³ê²½ ì¬íê³¼ ì¶ê°/ìì ë ë´ì©ì ê²í í©ëë¤.
- ë³ê²½ë 모ëê³¼ ê·¸ ê´ê³ë¥¼ ìë³í©ëë¤.
- ììì¹ ëª»í ë³ê²½ì´ë ë²ì íì¥(Scope creep)ì ì°¾ìµëë¤.
- Breaking changeê° ìëì§ íì¸í©ëë¤.
Phase 2: Security Review
2.1 ì¼ë°ì ì¸ ì·¨ì½ì í¨í´
ë¤ìê³¼ ê°ì ì¤ìí ë³´ì ì´ì를 íì¸í©ëë¤:
Input Validation
- ê²ì¦ëì§ ìì ì¬ì©ì ì ë ¥ì´ ë¯¼ê°í ìì ì ëë¬íëì§ íì¸
- SQL injection ì·¨ì½ì
- Command injection ê°ë¥ì±
- Path traversal 공격
- XML/XXE injection í¬ì¸í¸
Authentication & Authorization
- ì¸ì¦ ì²´í¬ ëë½
- Broken access control
- ìì íì§ ìì ë¹ë°ë²í¸ ì ì¥
- ì·¨ì½í ì¸ì ê´ë¦¬
- CSRF ë³´í¸ ëë½
Data Exposure
- íëì½ë©ë ì격 ì¦ëª (Credential) ëë API key
- ë¡ê·¸ ë´ ë¯¼ê°í ë°ì´í° í¬í¨ ì¬ë¶
- ë¶ì ì í ìí¸í
- ìë¬ ë©ìì§ë¥¼ íµí ì ë³´ ë ¸ì¶
- ë ¸ì¶ë ì¤ì íì¼
Code Injection
- ìì íì§ ìì Deserialization
- Template injection
- ì¬ì©ì ì ë ¥ì ìí ì½ë ì¤í(Code evaluation)
- ìì íì§ ìì Reflection ì¬ì©
2.2 ìëí ë³´ì ì¤ìº
ë³´ì ë¶ì ë구를 ì¬ì©í©ëë¤:
Python:
# ë³´ì ì´ì를 ìí´ bandit ì¤í
python scripts/review_helper.py --security-scan path/to/code
# ìë ¤ì§ ì·¨ì½ì ì ëí´ ì¢
ìì± ì²´í¬
safety check
pip-audit
JavaScript/Node.js:
# ì·¨ì½ì ì²´í¬
npm audit
yarn audit
# ESLint ë³´ì íë¬ê·¸ì¸ ì¬ì©
eslint --plugin security path/to/code
Go:
# ë³´ì ì¤ìºë
gosec ./...
ìì¸í ì·¨ì½ì í¨í´ì references/security_patterns.md를 참조íì¸ì.
Phase 3: Code Quality Analysis
3.1 ì½ë 구조
Modularity & Organization
- Single Responsibility Principle ì¤ì ì¬ë¶
- ì ì í Separation of concerns
- ì ì í ì¶ìí ìì¤
- ëª íí 모ë ê²½ê³
- ë ¼ë¦¬ì ì¸ íì¼ êµ¬ì±
Complexity Metrics
- Cyclomatic complexity (목í: í¨ìë¹ < 10)
- í¨ì ê¸¸ì´ (목í: < 50 ë¼ì¸)
- í´ëì¤ í¬ê¸° (목í: < 300 ë¼ì¸)
- Nesting depth (목í: < 4 ë¨ê³)
- íë¼ë¯¸í° ê°ì (목í: < 5ê°)
Code Smells
- ì¤ë³µ ì½ë
- ë무 긴 ë©ìë ëë God class
- Feature envy (ë©ìëê° ë¤ë¥¸ í´ëì¤ë¥¼ ë ë§ì´ ì¬ì©í¨)
- Data clumps (ë°ë³µëë íë¼ë¯¸í° 그룹)
- Primitive obsession
- í´ëì¤ ê°ì ë¶ì ì í ê´ê³(Inappropriate intimacy)
3.2 ëª ëª (Naming) ë° ê°ë ì±
Naming Conventions
- ìë를 ëë¬ë´ë ìì ì ì¸ ì´ë¦
- ì¼ê´ë ëª ëª í¨í´
- ì ì í ê¸¸ì´ (ë무 ì§§ê±°ë ê¸¸ì§ ìê²)
- íì¤ì´ ìë ê²½ì° ì½ì´ ì¬ì© ì§ì
- Boolean ì´ë¦ì is/has/should/canì¼ë¡ ìì
Code Clarity
- ëª íí Control flow
- ì¸ì§ ë¶í ìµìí
- Self-documenting code
- ì ì í 주ì (Whatì´ ìë Whyì ì§ì¤)
- ì¼ê´ë í¬ë§·í
3.3 Error Handling
Robustness
- ì ì í Exception handling
- ë¹ except/catch ë¸ë¡ ì§ì
- ì ì í ìë¬ ë©ìì§
- 리ìì¤ ì 리 (File handles, connections)
- Graceful degradation
Edge Cases
- Null/None ì²´í¬
- ë¹ ì»¬ë ì ì²ë¦¬
- Boundary conditions
- ëì ì¡ì¸ì¤ ì´ì
- Race condition ë°©ì§
Phase 4: Performance Review
4.1 ì¼ë°ì ì¸ ì±ë¥ ì´ì
Algorithm Efficiency
- ë ëì ëìì´ ìììë O(n²) ì´ìì ìê³ ë¦¬ì¦ ì¬ì©
- ë¶íìí 루í ëë ë°ë³µ
- ë¹í¨ì¨ì ì¸ ë°ì´í° 구조 ì¬ì©
- Memoization/caching 기í ëë½
Resource Management
- Memory leaks
- ë«íì§ ìì File handles ëë connections
- ê³¼ëí ë©ëª¨ë¦¬ í ë¹
- Thread/process pool ê³ ê°
Database Operations
- N+1 query 문ì
- ì¸ë±ì¤ ëë½
- SELECT * ì¬ì©
- ë¹í¨ì¨ì ì¸ JOIN ìì
- 쿼리 ìµì í ëë½
Network Calls
- ë기ì Blocking calls
- Timeout ì¤ì ëë½
- ì¬ìë(Retry) ë¡ì§ ë¶ì¬
- ê³¼ëí API í¸ì¶
- Connection pooling ëë½
ìµì í ì ëµì references/performance_guide.md를 참조íì¸ì.
Phase 5: Testing Assessment
5.1 Test Coverage
Coverage Metrics
- Line coverage (목í: > 80%)
- Branch coverage (목í: > 75%)
- Function coverage (목í: > 90%)
- Critical path coverage (목í: 100%)
Test Quality
- í ì¤í¸ê° ì¤ì ë¡ ì미 ìë ëìì ê²ì¦(Assert)íëì§ íì¸
- í ì¤í¸ê° ë 립ì ì´ê³ 격리ëì´ ìëì§ íì¸
- í ì¤í¸ ì´ë¦ì´ í ì¤í¸ ëìì ëª íí ì¤ëª íëì§ íì¸
- Mock ë° Stubì ì ì í ì¬ì©
- í ì¤í¸ ê° ìí¸ ìì¡´ì± ë¶ì¬
5.2 Test Completeness
íì í ì¤í¸ ì í
- ë¹ì¦ëì¤ ë¡ì§ì ìí Unit tests
- ì»´í¬ëí¸ ìí¸ìì©ì ìí Integration tests
- Edge case ë° boundary í ì¤í¸
- ìë¬ ì¡°ê±´ í ì¤í¸
- ë³´ì ê´ë ¨ í ì¤í¸
ëë½ë í ì¤í¸
- í ì¤í¸ëì§ ìì ìë¬ ê²½ë¡
- ë¶ì ì (Negative) í ì¤í¸ ì¼ì´ì¤ ëë½
- 커ë²ëì§ ìì edge condition
- ë²ê·¸ ìì ì ìí Regression tests ë¶ì¬
Phase 6: Documentation Review
6.1 ì½ë 문ìí
í¨ì/ë©ìë 문ìí
- 목ì ë° ëì ì¤ëª
- íì ì í¬í¨í íë¼ë¯¸í° ì¤ëª
- 리í´ê° 문ìí
- Exception 문ìí
- ë³µì¡í API를 ìí ì¬ì© ìì
모ë/í´ëì¤ ë¬¸ìí
- ìì ìì¤ì 목ì
- ìí¤í ì² ê°ì
- ì¤ê³ ê²°ì ì¬í
- ì¢ ìì±(Dependencies)
- Public API contracts
6.2 ì¸ë¶ 문ìí
README ì ë°ì´í¸
- ì¤ì¹ ë°©ë²
- ì¤ì ë³ê²½ ì¬í
- ìë¡ì´ ê¸°ë¥ ë¬¸ìí
- Breaking change ê³µì§
- Migration ê°ì´ë
API Documentation
- ìëí¬ì¸í¸ ì¤ëª
- Request/response íì
- ì¸ì¦ ì구 ì¬í
- ìë¬ ìëµ
- Rate limiting
Review Checklist
í¬ê´ì ì¸ ë¦¬ë·°ë¥¼ ìí´ ì´ ì²´í¬ë¦¬ì¤í¸ë¥¼ ì¬ì©íì¸ì:
Security
- íëì½ë©ë ì격 ì¦ëª ì´ë Secretì´ ìì
- 모ë ì¬ì©ì ì ë ¥ì ëí´ Input validation ìí
- ì ì í Authentication ë° Authorization
- SQL/Command injection ì·¨ì½ì ìì
- ìì í ë¹ë°ë²í¸ ì²ë¦¬
- 민ê°í ë°ì´í°ì ëí´ HTTPS/TLS ì¬ì©
- ë³´ì ì¤ìº ë구 ì¤í ìë£
- ì¢ ìì± ì·¨ì½ì ì²´í¬ ìë£
Code Quality
- í¨ìê° Single Responsibility Principleì ë°ë¦
- Cyclomatic complexityê° 10 미ë§ì
- ì½ë ì¤ë³µ ìì
- ì¼ê´ë Naming conventions ì¤ì
- ì ì í Error handling
- í°ì¼ ë²í¸ê° ìë TODO/FIXME ìì
- ì½ëê° Self-documentingí¨
Performance
- ëª ë°±í ì±ë¥ ë³ëª© íìì´ ìì
- í¨ì¨ì ì¸ ìê³ ë¦¬ì¦ ë° ë°ì´í° 구조 ì¬ì©
- ì ì í 리ìì¤ ì 리
- ë°ì´í°ë² ì´ì¤ 쿼리 ìµì í ìë£
- N+1 query 문ì ìì
- ì ì í Caching ì ëµ ì¬ì©
Testing
- ìë¡ì´ 기ë¥ì ëí´ í ì¤í¸ í¬í¨ë¨
- Edge casesê° ì»¤ë²ë¨
- í ì¤í¸ 커ë²ë¦¬ì§ê° íì¤ì 충족í¨
- í ì¤í¸ê° ë 립ì ì´ê³ ë°ë³µ ê°ë¥í¨
- Flaky testsê° ëì ëì§ ìì
Documentation
- Public APIê° ë¬¸ìíë¨
- ë³µì¡í ë¡ì§ì´ ì¤ëª ë¨
- íìí ê²½ì° README ì ë°ì´í¸ë¨
- Breaking changes 문ìíë¨
- íìí ê²½ì° Migration ê°ì´ë ì ê³µë¨
Using the Review Helper Script
scripts/review_helper.pyë ìëíë ë¶ìì ì ê³µí©ëë¤:
# ì ì²´ ì½ë 리뷰 ë¶ì
python scripts/review_helper.py --file path/to/file.py --report full
# ë³´ì ì¤ì¬ ì¤ìº
python scripts/review_helper.py --security-scan path/to/directory
# ë³µì¡ë ë¶ì
python scripts/review_helper.py --complexity path/to/file.py
# 리뷰 ë³´ê³ ì ìì±
python scripts/review_helper.py --file path/to/file.py --output report.md
Best Practices
리뷰ì´ë¥¼ ìí ì¡°ì¸ (For Reviewers)
ê±´ì¤ì ì¸ íë (Be Constructive)
- ë¹íì´ ìë ê°ì ì ì§ì¤íì¸ì.
- ì ì ë¤ì ì¨ê²¨ì§ “Why”를 ì¤ëª íì¸ì.
- ëìì´ë í´ê²°ì± ì ì ìíì¸ì.
- ì¢ì ì½ëì í¨í´ì ì¹ì°¬íì¸ì.
ì² ì íì§ë§ í¨ì¨ì ì¸ ë¦¬ë·° (Be Thorough but Efficient)
- ë°ë³µì ì¸ ì²´í¬ìë ìëí ë구를 ì¬ì©íì¸ì.
- ì¬ëì 리뷰ë ë¡ì§ê³¼ ì¤ê³ì ì§ì¤íì¸ì.
- ì¤íì¼ì ë무 ì§ì°©íì§ ë§ì¸ì (Linter ì¬ì©).
- ì¤íì¼ë³´ë¤ ë³´ìê³¼ ì íì±ì ì°ì ìíì¸ì.
ì¼ê´ì± ì ì§ (Be Consistent)
- 모ë ì½ëì ëì¼í íì¤ì ì ì©íì¸ì.
- í ì½ë© íì¤ì 참조íì¸ì.
- ì¬ì¬ì© ê°ë¥í 리뷰 í í릿ì ë§ëì¸ì.
- ê³µíµë í¼ëë°± í¨í´ì 문ìííì¸ì.
ì½ë ìì±ì를 ìí ì¡°ì¸ (For Code Authors)
리뷰 ì¤ë¹
- 리뷰를 ìì²í기 ì ì ì¤ì¤ë¡ 리뷰(Self-review)íì¸ì.
- Linterì í¬ë§·í°ë¥¼ ì¤ííì¸ì.
- í ì¤í¸ ìí¸ë¥¼ ì¤ííì¸ì.
- PR ì¤ëª ì 컨í ì¤í¸ë¥¼ ì¶ê°íì¸ì.
- ë³ê²½ ì¬íì ìê³ ì§ì¤ë ë¨ìë¡ ì ì§íì¸ì.
í¼ëë°± ëì
- 모ë ì½ë©í¸ì ëìíì¸ì.
- ë¶ëª íí ê²½ì° ì§ë¬¸íì¸ì.
- í¼ëë°±ì ê°ì¸ì ì¼ë¡ ë°ìë¤ì´ì§ ë§ì¸ì.
- ìë£ë ëíë í´ê²°ë¨(Resolved)ì¼ë¡ íìíì¸ì.
Common Review Feedback Patterns
ë³´ì ì´ì
â Security: íëì½ë©ë API key ë°ê²¬
â íê²½ ë³ì ëë secret managementë¡ ì´ëíì¸ì.
â ì°¸ê³ : references/security_patterns.md#secrets-management
â Security: SQL injection ì·¨ì½ì
â 문ìì´ ì°ê²° ëì íë¼ë¯¸í°íë 쿼리를 ì¬ì©íì¸ì.
â ìì: cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
íì§ ì´ì
â Quality: í¨ìì ë³µì¡ëê° ë무 ëì (complexity: 15)
â ë ìê³ ì§ì¤ë 기ë¥ì í¨ìë¤ë¡ ëëì¸ì.
â 목í: < 10 cyclomatic complexity
â Quality: 3ê° ìì¹ìì ì¤ë³µ ì½ë ë°ê²¬
â ê³µíµ ë¡ì§ì ê³µì í¨ìë¡ ì¶ì¶íì¸ì.
â DRY ìì¹ ìë°
ì±ë¥ ì´ì
â Performance: N+1 query 문ì íì§ë¨
â JOIN ëë eager loadingì ì¬ì©íì¸ì.
â ì°¸ê³ : references/performance_guide.md#database-optimization
â Performance: ë¹í¨ì¨ì ì¸ O(n²) ìê³ ë¦¬ì¦
â O(1) ì¡°í를 ìí´ set/hash ì¬ì©ì ê³ ë ¤íì¸ì.
â íì¬: ì¤ì²© 루í, ê¶ì¥: set intersection
Additional Resources
- Security Patterns:
references/security_patterns.md– ì¼ë°ì ì¸ ì·¨ì½ì ë° í´ê²° ë°©ë² - Performance Guide:
references/performance_guide.md– ìµì í ì ëµ - Review Checklist:
examples/review_checklist.md– í¬ê´ì ì¸ ë¦¬ë·° í í릿 - Helper Scripts:
scripts/review_helper.py– ìëíë ë¶ì ë구
Language-Specific Considerations
Python
- Context managers(with 문)ì ì ì í ì¬ì© íì¸
- List comprehensionì´ ê³¼ëíê² ë³µì¡íì§ ììì§ íì¸
- Generator ì¬ì© 기í íì
- Mutable default arguments íì¸
JavaScript/TypeScript
- async/awaitì ì ì í ì¬ì© íì¸
- Callback hell íì¸
- Event listenerììì ë©ëª¨ë¦¬ ëì íì¸
- TypeScriptììì ì ì í Typing íì¸
Java
- ì ì í Exception handling íì¸
- 리ìì¤ ì 리 íì¸ (try-with-resources)
- Immutabilityì ì ì í ì¬ì© íì¸
- Thread safety ì´ì íì¸
Go
- ì ì í Error handling íì¸ (ìë¬ ë¬´ì ê¸ì§)
- Goroutine leak ë°©ì§ ì¬ë¶ íì¸
- Race conditions íì¸
- ì ì í Context ì¬ì© íì¸
Conclusion
í¨ê³¼ì ì¸ ì½ë 리뷰ë ìëíë í´ê³¼ ì¬ëì ì 문ì±ì ê²°í©í ë ì´ë£¨ì´ì§ëë¤. 기ê³ì ì¸ ì²´í¬(ë³´ì, ì¤íì¼, ë³µì¡ë)ìë ìëí ë구를 ì¬ì©íê³ , ì¬ëì 리뷰ë ë¡ì§, ì¤ê³ ë° ì ì§ë³´ìì±ì ì§ì¤íì¸ì. íì ê±´ì¤ì ì´ê³ ì² ì íë©° ì¼ê´ì± ìë 리뷰를 ì§í¥íììì¤.