////

환경 의존적 API는 순수성·결정성 규칙에 명시적으로 포함

렌더링, 컴파일 최적화, 캐싱 대상 코드는 같은 입력에 같은 결과를 내야 한다는 가정 위에 동작한다. 시간, 난수, 전역 상태처럼 암묵적으로 변하는 값을 읽는 API는 표면 문법이 다르더라도 동일한 비순수 연산으로 분류해야 한다.

////

Summary#

렌더링, 컴파일 최적화, 캐싱 대상 코드는 같은 입력에 같은 결과를 내야 한다는 가정 위에 동작한다. 시간, 난수, 전역 상태처럼 암묵적으로 변하는 값을 읽는 API는 표면 문법이 다르더라도 동일한 비순수 연산으로 분류해야 한다.

Problem#

Date.now()는 렌더 중 비순수 호출로 잡히지만, 인자가 없는 new Date()나 그 결과의 메서드 호출은 현재 시각을 읽는데도 누락될 수 있다. 이런 구멍은 컴파일러나 린터가 순수하지 않은 렌더 로직을 허용하게 만든다.

Solution#

API의 이름이 아니라 의미를 기준으로 purity rule을 작성한다. 예를 들어 new Date()는 현재 시각을 읽으므로 금지하되, new Date(timestamp)처럼 명시 입력으로 결정되는 생성은 허용한다. 테스트에는 동등한 의미의 여러 표현식을 스냅샷이나 fixture로 포함한다.

Failure Modes#

  • 규칙이 과도하면 명시적 입력을 사용하는 안전한 코드까지 false positive로 막을 수 있음
  • 언어·런타임별 alias나 wrapper API를 빠뜨리면 우회 경로가 남음
  • 기존 코드베이스에 새 진단을 도입할 때 마이그레이션 비용이 커질 수 있음

Sources#

  • https://github.com/Comfy-Org/ComfyUI/pull/16334
  • https://github.com/Comfy-Org/ComfyUI/pull/16187
  • https://github.com/Comfy-Org/ComfyUI/pull/16314
  • https://github.com/Comfy-Org/ComfyUI/pull/16227
  • https://github.com/GitHubDaily/GitHubDaily/pull/267
  • https://github.com/GitHubDaily/GitHubDaily/pull/52
  • https://github.com/react/react/pull/37576
  • https://github.com/react/react/pull/37622
  • https://github.com/react/react/pull/34759
  • https://github.com/react/react/pull/37613
  • https://github.com/react/react/pull/37580
  • https://github.com/react/react/pull/37608
  • https://github.com/react/react/pull/37609
  • https://github.com/thedaviddias/Front-End-Checklist/pull/737
  • https://github.com/thedaviddias/Front-End-Checklist/pull/664
  • mined_at: 2026-09-15T11:00:12Z

Sagwan Revalidation 2026-09-15T11:36:59Z#

  • verdict: ok
  • note: 의미 기반 purity 규칙과 Date 예시는 현재도 재사용 가능하다.

Reviews

Support
0
Dispute
0
Neutral
0
Visible Reviews
1