Turborepo 1.2
1월 말 Turborepo v1.1을 출시한 이후, 놀라운 채택률과 커뮤니티 성장을 보였습니다:
- 6.5k+ GitHub Stars
- 140k+ 주간 npm 다운로드 (지난 v1.1 블로그 포스트 이후 2배 증가)
- 95+ OSS 기여자
- 900+ Turborepo Community Discord 회원
- 1.6년의 시간 절약 - Vercel의 Remote Caching을 통해 매주 2.5개월 이상 절약
Turborepo v1.2는 사용성, 관찰 가능성 및 보안을 더욱 개선했으며 다음 기능을 제공합니다:
- 새로운 Task Filtering API:
--filter가turbo run에 더 강력한 작업 필터링 기능을 추가합니다 - 사람이 읽을 수 있고 JSON 형식의 dry run:
--dry-run플래그로 작업을 실행하지 않고turbo run에 대한 정보를 사람이 읽을 수 있고 JSON 파싱 가능한 형식으로 출력할 수 있습니다 - 개선된 내부 스케줄러 및 그래프:
turbo의 내부 스케줄러와 그래프를 리팩터링하여 더욱 인체공학적이고 예측 가능하게 만들었습니다 - 향상된 Remote Cache 보안: 자체 비밀 키로 원격 캐시 아티팩트에 암호화 서명을 할 수 있습니다
npm install turbo@latest를 실행하여 오늘 업데이트하세요. turbo run을 처음 실행하면 @turbo/codemod를 사용하여 v1.2에 대한 자동 마이그레이션을 실행하는 방법에 대한 지침이 표시됩니다.
New Task Filtering API
가장 많이 요청된 기능 중 하나인 --filter 플래그를 통한 표현력 있는 작업 필터링 기능을 출시하게 되어 기쁩니다. --filter 플래그는 현재 --scope, --include-dependencies, --since, --no-deps 플래그의 조합보다 훨씬 강력한 후속 기능입니다.
--filter를 사용하면 이름, 폴더 또는 git commit ref 이후 변경 여부를 기준으로 모노레포에서 일치하는 패키지의 하위 집합으로만 명령 실행을 제한하도록 turbo에 지시할 수 있습니다.
새로운 --filter 명령으로 수행할 수 있는 작업의 몇 가지 예를 살펴보세요:
--filter=<package_name>- 정확한 패키지 이름 또는 glob 패턴으로 일치--filter=...<package_name>- 패키지 이름/glob으로 일치하고 일치하는 항목의 모든 의존 패키지 포함--filter=...^<package_name>- 패키지 이름/glob으로 일치하고 일치하는 항목의 모든 의존 패키지를 포함하지만 일치하는 항목 자체는 제외--filter=<package_name>...- 패키지 이름/glob으로 일치하고 일치하는 패키지의 모든 종속성 포함--filter=<package_name>^...- 패키지 이름/glob으로 일치하고 일치하는 패키지 종속성을 모두 포함하지만 일치하는 항목 자체는 제외--filter={./path/to/package}- 경로 또는 파일시스템 glob 패턴으로 일치--filter=[origin/main]- git commit ref 이후 변경된 패키지로 일치
여러 필터를 함께 사용하여 더욱 세분화된 필터링을 할 수 있으며, 위 패턴의 각 부분 {}, [], ^, ...를 결합하여 더 복잡한 동작을 표현할 수 있습니다.
예를 들어, 로컬 패키지를 종속성으로 사용하는 ./apps/web 디렉터리에 앱이 있고, Turborepo 파이프라인에서 test가 위상적으로 ^build에 의존하는 경우 다음을 실행하면:
turbo에게 종속성이 빌드되었는지 확인하고 앱이 HEAD^1 이후 변경된 경우 ./apps/web에 위치한 앱 자체를 제외한 모든 로컬 종속성에서 test 스크립트를 실행하도록 지시합니다.
자세한 내용과 예제는 새로운 필터링 문서를 참조하세요.
Debug and Automate with --dry-run
이제 turbo run 명령에 --dry-run 또는 --dry-run=json을 추가하여 실제로 명령을 실행하지 않고도 turbo run의 영향을 확인할 수 있습니다. 이는 사람이 읽을 수 있는 형식 또는 JSON 출력으로 결과를 제공합니다.
Dry run은 두 가지 상황에서 매우 유용합니다:
- 실행 옵션 디버깅 및 테스트
- 자동화 구축을 위한
turbo필터링 및 작업 그래프 사용

이를 통해 turbo가 수행하는 작업에 대한 가시성을 개선하고 디버깅 속도를 높이며 동적 CI/CD 시스템에서 turbo를 더 쉽게 활용할 수 있기를 바랍니다.
Improved Internal Scheduler and Graph
turbo run을 사용할 때 모든 package.json 작업은 Turborepo pipeline에 정의된 추론된 관계를 기반으로 종속성을 매핑하기 위해 내부 그래프에 추가됩니다. 이 작업 그래프를 통해 Turborepo는 증분 동시 작업 실행을 효율적으로 스케줄링하고 나중에 사용할 작업 출력을 캐시할 수 있습니다.
내부 작업 스케줄러와 결과 그래프 구조에 주요 개선 사항을 적용하여 성능과 개발자 경험을 개선했습니다. 예를 들어, 많은 경우 더 이상 --include-dependencies를 사용할 필요가 없습니다. 대신 작업 진입점을 지정한 후 새롭고 개선된 그래프가 자동으로 이 그래프 해결을 처리합니다.
Cache Outputs Integrity and Signature Verification
이제 Turborepo를 구성하여 Remote Cache에 업로드하기 전에 비밀 키를 사용하여 HMAC-SHA256으로 원격 캐시 출력에 서명할 수 있습니다. Turborepo가 서명된 캐시 아티팩트를 다운로드하면 이제 아티팩트의 무결성과 진위성을 확인합니다. 확인에 실패한 아티팩트는 무시되고 폐기되며 Turborepo에서 캐시 미스로 처리됩니다.
이 기능을 활성화하려면 turbo.json 구성 파일의 remoteCache 옵션을 signature: true로 설정하세요. 그런 다음 TURBO_REMOTE_CACHE_SIGNATURE_KEY 환경 변수를 선언하여 비밀 키를 지정하세요.


Other bug fixes and improvements
--sso-team플래그를 사용하면 이제 SAML 토큰이 있는 팀이 올바른 팀 권한으로turbo login을 통해 로그인할 수 있습니다--log-output플래그를 사용하면 터미널에 인쇄되는 로그와 시기를 제어하여 새로운 것에만 집중할 수 있습니다FORCE_COLOR환경 변수가 이제 지원됩니다TURBO_FORCE=true환경 변수는 이제 강제 실행됩니다--remote-only및TURBO_REMOTE_ONLY=true는turbo에게 Remote Caching만 사용하도록 지시합니다- 이제 하나 이상의 작업이 시도되면
>>> FULL TURBO를 표시합니다 - Yarn v2+ with Plug'n'Play (PnP linker)가
turbo run명령에 대해 지원되지만turbo prune은 아직 완전히 지원되지 않습니다 --profile이 지정된 경우 chrome tracing 회귀 수정- 이제
--concurrency=50%로 CPU 비율로 동시성을 설정할 수 있습니다
We're hiring!
Vercel의 Turborepo 팀이 채용 중입니다! 올해 이미 5명의 핵심 팀원이 있으며 더 많은 인원을 채용하고자 합니다. 특히 풀타임 Senior Build Systems Engineers를 찾고 있습니다.
What's next?
원활한 점진적 채택/마이그레이션과 CI/CD 속도 향상과 함께 Turborepo의 일상적인 사용성, 보안 및 관찰 가능성을 개선하는 데 중점을 두고 있습니다. 새로운 --filter 플래그, 서명된 아티팩트 및 dry run은 이러한 목표를 향한 중요한 단계입니다.
다음으로는 향상된 로컬 개발 경험, 코드베이스 자동화 및 전반적인 CLI 성능에 중점을 둘 것입니다.
Thank you, contributors
Turborepo는 95명 이상의 개별 개발자와 핵심 팀의 결합된 작업의 결과입니다.
이 릴리스는 다음의 기여로 제공되었습니다: @gsoltis09, @jaredpalmer, @gaspar09, @shuding, @rajatkulkarni95, @VanTanev, @Kikobeats, @tknickman, @thebanjomatic, @chelkyl, @elado, @finn-orsini, @becca, @weyert, @ekosz