| name | review-performance |
| description | 이 저장소에서 성능, 메모리, N+1, 트랜잭션 범위, Redis 사용, 스트림/컬렉션 효율, 시간/공간 복잡도를 리뷰할 때 사용한다. |
Review Performance
루트 AGENTS.md 규칙을 전제로 사용한다.
Java 17, Spring Boot 3.5, JPA, Redis 기준으로 리뷰한다.
리뷰 목적
- N+1 문제 탐지
- 불필요한 객체 생성 및 GC 부담 탐지
- 스트림/컬렉션 처리 비효율 탐지
- 트랜잭션 내부 외부 API 호출 점검
- Redis 사용 패턴 점검
- 시간/공간 복잡도 리스크 탐지
- 변경이 latency, availability, error rate SLO에 영향을 주는지 점검
1. N+1 문제
중점 확인:
- 루프 안에서 지연 로딩 연관 객체를 반복 접근하는가
- 트랜잭션 밖에서 LAZY 필드를 접근하는가
- fetch join 또는
@EntityGraph가 필요한 조회 패턴인가
2. 객체 생성 및 GC 부담
중점 확인:
- 루프 내부에서 불필요한 객체를 반복 생성하는가
- 문자열 누적을 루프 안에서
+로 처리하는가
Optional 중첩이나 불필요한 컬렉션 생성이 많은가
3. 스트림 / 컬렉션 효율
중점 확인:
collect 후 다시 stream하는 중복 흐름이 있는가
- 선형 탐색을 반복해
Map 인덱싱이 더 적절한가
- 한 번만 쓸 데이터를 과하게 materialize 하는가
4. 트랜잭션 범위
중점 확인:
- 트랜잭션 내부에서 외부 API를 호출하는가
- 읽기 전용 로직인데 쓰기 트랜잭션으로 열려 있는가
- 긴 트랜잭션 안에 불필요한 조회가 포함되는가
5. Redis 사용
중점 확인:
redisTemplate.keys() 같은 블로킹 패턴을 사용하는가
- 루프 내부 Redis 개별 호출이 과도한가
- TTL 없는 키 적재로 메모리 리스크가 있는가
6. 시간 복잡도
중점 확인:
- 중첩 루프가 운영 데이터 규모에서 문제가 될 수 있는가
stream().filter().findFirst() 같은 선형 탐색을 반복하는가
- 페이지네이션 없이 전체 테이블을 메모리에 적재하는가
7. 공간 복잡도
중점 확인:
- 원본 데이터 외에 파생 컬렉션을 과도하게 여러 개 생성하는가
- 대용량 데이터를 한 번에 적재하는가
- 캐시나 누적 구조에 크기 제한이 없는가
8. SLO 영향
중점 확인:
- 사용자가 체감하는 API latency가 악화될 수 있는가
- scheduler, Redis, FCM, 외부 API 실패가 availability나 error rate에 영향을 주는가
- 기존 metric으로 p95/p99, 성공률, 실패율을 관측할 수 있는가
- SLO 관점 정리가 필요하면 slo-check를 함께 사용한다.
출력 방식
- 성능 리스크가 있으면 원인, 영향, 개선 방향을 함께 정리한다.
- 데이터 규모 전제가 중요하면 그 전제를 명시한다.
- 문제 없음으로 보이더라도 대규모 운영 시 잔여 리스크가 있으면 남긴다.