zerovoids.dev
react-compiler설정

gating

gating: { source: string, importSpecifierName: string } | null

런타임 피처 플래그로 컴파일된 코드를 켜고 끈다. 점진 출시·A/B 테스트에 쓴다.

verified v1.0 · 2026-08-05
react-compilergatingfeature-flagconfig

무엇

gating은 컴파일된 코드를 런타임 피처 플래그로 켜고 끄게 하는 옵션이다. 기본값은 null(비활성)이다.

플래그 함수가 있는 모듈 경로(source)와 그 함수 이름(importSpecifierName)을 준다.

['babel-plugin-react-compiler', {
  gating: {
    source: './src/utils/feature-flags',
    importSpecifierName: 'shouldUseCompiler',
  },
}]

무슨 일이 일어나나

gating을 켜면 컴파일러가 각 함수에 대해 최적화 버전과 원본 버전을 둘 다 내보내고, 지정한 플래그 함수의 반환값으로 둘 중 하나를 고른다.

import { shouldUseCompiler } from './src/utils/feature-flags'

const Button = shouldUseCompiler()
  ? function Button_optimized(props) { /* 컴파일된 버전 */ }
  : function Button_original(props) { /* 원본 */ }

플래그 함수는 모듈 로드 시점에 한 번 평가된다. 번들이 파싱·실행되고 나면 그 선택은 브라우저 세션 내내 고정된다.

사용법

플래그 함수는 boolean을 돌려주는 named export여야 한다(default export 아님). 이름은 importSpecifierName과 정확히 맞춘다.

src/utils/feature-flags.js
export function shouldUseCompiler() {
  return getFeatureFlag('react-compiler-enabled')
}

실무 예시

컴파일러를 전 사용자에게 한 번에 켜는 대신, 일부에게만 켜서 성능·회귀를 관찰한 뒤 넓히고 싶을 때 쓴다. 플래그 백엔드가 켜라고 하면 최적화 버전이, 아니면 원본이 실행된다.

babel.config.js
module.exports = {
  plugins: [
    ['babel-plugin-react-compiler', {
      gating: {
        source: './src/utils/feature-flags',
        importSpecifierName: 'shouldUseCompiler',
      },
    }],
  ],
}

왜 중요한가

컴파일러를 안전하게 굴리는 안전밸브다. 대규모 앱에서 한 번에 전환하기 부담스러울 때, 소수에게 먼저 켜서 문제를 잡고 점진적으로 넓힐 수 있다. 다만 두 벌의 코드가 번들에 실리는 비용이 있어, 전환이 끝나면 걷어내는 게 맞다. 대부분의 앱은 이 옵션 없이 그냥 컴파일러를 켠다.

Reference