Skip to content

0908

순환참조를 탐지해주는 룰

그럼 해당 룰을 무조건 설정하는게 좋을까?

  • 해당 기능을 사용하면 정적 린터가 모든 파일의 import문을 따라가면서 모듈 그래프를 그려가며 탐색하기에 계산 비용이 엄청 높다.
  • 왜 계산 비용이 높을까?
  1. 시간 복잡도 때문일까?
  • 그래프 구조를 탐색하는거니 DFS 또는 BFS 알고리즘으로 순환경로를 탐지할텐데, 그래프 구조를 인접 리스트로 사용한 경우 시간복잡도는 O(v+e)로 효율적이다.
    • V = 노드 수 = 모듈 수
    • E = 엣지 수 = import문 연결 수
txt
// Graph 구조 (예시)  
{
  'A.js': ['B.js', 'C.js'],  
  'B.js': ['C.js'],  
  'C.js': ['A.js']  
}
  • 고로 시간 복잡도는 높은 계산 비용의 원인과는 직접적인 관계가 없는 것 같다.
  • 그래서 진짜 영향을 주는 요소들은 아래 3가지라고 한다. (feat. 클로드)
  1. 파일 I/O 비용: 프로젝트의 모든 파일을 읽어야함
  2. 파싱 비용: 각 파일의 import/export 문을 분석해야됨
  3. 모듈 그래프 구축: 전체 의존성 관계를 메모리에 구성해야됨
  • 고로 해당 룰을 설정하는 것도 좋지만, 미연에 fsd 구조를 잘 지켜서 순환참조를 방지하는 습관을 지니는 것이 더 좋은 것 같다. 또는 특정 디렉토리에서만 검사를 한다든가?