데브허브 | DEVHUB | Are We Turbo Yet?
- TurboAC의 핵심 목표는 애플리케이션 크기가 아닌 변경 사항의 복잡성에 비례하여 빌드 비용을 줄이는 증분 빌드입니다. 🚀
- 기존 번들러는 중복 작업과 비증분성으로 인해 파일 파싱 및 의존성 해결을 반복하는 비효율성이 있었습니다. 🐢
- 초기 캐싱 시도는 캐시 키, 무효화, 데이터 변이, 복잡한 설정 관리 등의 문제에 직면했습니다. 🤯
- 콜백 기반 무효화 방식은 완전한 증분성을 제공하지 못하고 코드 유지보수를 극도로 어렵게 만들었습니다. 🕸️
- TurboAC는 모든 고비용 작업을 쉽게 캐싱하고, 개발자가 수동으로 의존성을 추적하지 않도록 자동화하며, 콜백 없이 반응적으로 변경 사항을 처리하고, 멀티스레딩을 활용하는 시스템을 목표로 했습니다. 🎯
- 이러한 요구사항을 충족하기 위해 Rust 컴파일러의 Salsa와 같은 "시그널" 개념에서 영감을 받은 증분 반응형 프로그래밍 모델을 채택했습니다. 💡
- "Turbo 함수"는 캐시 가능한 작업 단위로,
VC (Value Cell) 타입의 반응형 값을 await하여 자동으로 의존성을 추적합니다. 🔗
- 핵심 증분성 메커니즘은 의존성이 변경되면 함수가 재실행되지만, 함수의 결과값이 이전과 동일하면 더 이상 무효화를 전파하지 않아 불필요한 재계산을 방지합니다. ♻️
- 예를 들어, 파일 내용이 바뀌어도 모듈의 임포트 목록이 동일하면 청킹이나 트리 쉐이킹 같은 후속 작업은 다시 실행되지 않아 HMR(Hot Module Replacement) 속도를 극대화합니다. 🔥
- TurboAC는 약 2500개의 Turbo 함수와 수백만 개의 태스크로 구성된 복잡한 의존성 그래프를 통해 작동하며, 변경 사항이 발생하면 이 그래프를 따라 무효화를 전파하고 필요한 부분만 재계산합니다. 🌳
- 이러한 접근 방식은 수동 캐싱 및 복잡한 무효화 로직 문제를 해결했지만, 대신 복잡한 캐싱 인프라 관리와 시스템 자체의 오버헤드라는 새로운 트레이드오프를 가져왔습니다. ⚖️
- 결론적으로 TurboAC는 정교한 증분 반응형 프로그래밍 모델을 통해 뛰어난 성능을 달성하며, 자동 캐싱 및 의존성 추적에 중점을 둡니다. ✨