[개념정리] TurboModules/Fabric 별도 활성화(Opt-in)의 이유

Dou-GemGem·2025년 6월 11일
0
post-thumbnail

React Native, Expo의 TurboModules/Fabric 아키텍처는 최신 성능 개선의 핵심이지만,
기본적으로 “별도 활성화(Opt-in)”가 필요하다.
이 글은 개인 기록 목적과 함께, 앞으로 프로젝트 선택 시 참고 자료로 남기기 위해 정리한다.


TurboModules/Fabric이란?

  • TurboModules: 네이티브 모듈의 바인딩을 더욱 빠르고 효율적으로 관리하는 새로운 방식
  • Fabric: React Native UI 레이어의 최신 구조. 더욱 빠른 렌더링, 동시성(Concurrent Rendering) 지원

왜 성능이 좋음에도 별도로 활성화(Opt-in)할까?

1. 호환성/안정성 문제

  • 기존(Bridge) 방식과 완전히 달라,
    기존 네이티브 모듈이나 서드파티 라이브러리가 TurboModules/Fabric을 지원하지 않으면 오류, 크래시 등 이상동작 발생 가능
  • 새 구조에 맞지 않는 라이브러리는 런타임/빌드 타임 에러 발생

2. 기존 앱의 기능 변화/버그 위험

  • 기존 Bridge 기반 코드와 새로운 TurboModules/Fabric 아키텍처가 동시에 존재 가능
  • 이로 인해 미묘한 버그, 퍼포먼스 변화, 예기치 못한 크래시가 생길 수 있음

3. 점진적 도입을 위한 전략

  • Facebook(메타)와 Expo 모두 “모든 프로젝트 한 번에 전환 → 대규모 장애”를 피하기 위해
    옵션(실험적) 활성화 구조를 택함

4. 빌드 및 번들 변화

  • 새로운 아키텍처 활성화 시 네이티브 빌드 설정, 번들 크기 등이 달라질 수 있어
    예상치 못한 빌드/릴리즈 이슈 발생 가능성

5. Expo의 추가 제약

  • Expo는 다양한 네이티브/외부 라이브러리 호환성을 고려해야 하므로,
    Expo Go에서는 지원 불가, 직접 빌드한 앱에서만 사용 가능

활성화 방법 정리 (기록용)

  • Expo (SDK 48 이상, RN 0.71+)

    • app.json 또는 app.config.js:
      {
        "expo": {
          "jsEngine": "hermes",
          "experimental": {
            "newArchitecture": true
          }
        }
      }
    • 빌드시 환경변수 필요: EXPO_USE_NEW_ARCH=1
  • React Native CLI

    • android/gradle.properties: newArchEnabled=true
    • ios/Podfile: fabric_enabled = true
    • 공식 문서 참고

TurboModules/Fabric 활성화 시 체크리스트

  • 주요 네이티브/외부 모듈이 TurboModules/Fabric 지원 여부 확인
  • 앱 빌드/런타임 전후 전체 테스트 필수
  • 오래된 모듈은 교체/업데이트 고려

마무리

TurboModules/Fabric 아키텍처는 성능 개선을 위한 중요한 진화지만, “별도 활성화”를 요구하는 이유는
기존 코드, 라이브러리, 전체 빌드/릴리즈 흐름의 호환성 문제를 최소화하기 위함임.

profile
더 강해지고 싶은 5년차 모바일 크로스-플랫폼 개발자

0개의 댓글