피드로 돌아가기
Dev.toFrontend
원문 읽기
캐시 오염 해결을 통해 Next.js 내 숨겨진 245개 순환 참조 탐지
no-cycle finds 0 cycles in next.js (and other lies caches tell you)
AI 요약
Context
DFS 기반의 Circular Dependency 탐지 시 성능 최적화를 위해 nonCyclicFiles 캐시를 도입한 구조임. 하지만 maxDepth 제한으로 인해 탐색이 중단된 파일을 무조건 Acyclic으로 판단하여 캐싱하는 설계 결함이 존재함.
Technical Solution
- DFS 탐색 중
maxDepth도달 시depthLimitHit플래그를 통해 탐색 중단 상태를 기록하는 로직 구현 allCycles.length === 0조건에!depthLimitHit를 추가하여 완전 탐색이 완료된 경우에만 캐싱하도록 제어- 잘못된 Acyclic 판단이 하위 SCC(Strongly Connected Components) 트리 전체로 전파되는 Cache Poisoning 현상 차단
- 단순 근사치 기반의 DFS 대신 Tarjan's Algorithm을 활용한 SCC 그래프 구축 방식의 정확성 검토
- 소규모 유닛 테스트가 아닌 실제 프로덕션 규모(14K+ 파일)의 스트레스 테스트를 통한 검증 체계 강화
실천 포인트
1. DFS/BFS 구현 시 Depth Limit 도입 여부와 그에 따른 예외 처리 및 캐싱 전략의 정합성을 검토할 것
2. 알고리즘의 정밀도가 중요한 경우 근사치 기반의 캐싱보다 SCC와 같은 Exact Algorithm 도입을 우선 고려할 것
3. 캐시 전파(Cascade) 효과가 발생하는 시스템은 프로덕션 수준의 대규모 데이터셋으로 엣지 케이스를 검증할 것