오늘도 마이크로프론트엔드 + 모노레포로 작업을 진행하기 전에, 요새 쓰고 있는 터보레포를 공부하고자 번역 글을 써요!
아무래도 캐시가 아직은 익숙치 않다 보니...🥲
좀 더 원리를 이해하고자 공식문서를 읽어 볼 겸, 누군가에게 도움을 주기 위해 번역 글을 남깁니다 👐🏻
터보레포의 중요한 핵심 키🔑는 바로, lazy하고 효율적이라는 것입니다. 그것은 이미 완료된 작업들을 다시는 반복해서 실행하지 않으려 하고, 최대한 적은 작업을 하려 하기 때문이죠.
이때, 당신의 터보래터는 당신의 로컬 파일 시스템에 있는 태스크들을 캐싱합니다. (다시 말하자면, 당신이 single-player mode
일 경우에 말이죠)
그러나, 당신의 CI나, 동료들에 의해 수행된, 계산을 요구하는 작업들의 이점을 가져가는 방법이 있다면 어떨까요? (다시 말하자면, co-op multiplayer mode
일 경우요!)
머신에 걸쳐 단일 캐시를 전송하고 공유하는 방법이 있다면요?
음... 마치 당신의 터보레포 캐시를 위한 Dropbox
가 있다고 보면 되겠네요. 🤔
원격 캐싱은 이러한 대화 속에서 나왔어요!
터보레포는 추가적인 스피드 증가를 위해, 머신에 걸쳐 캐시 아티팩트를 공유하기 위한 Remote Caching
이라고 알려진 기술을 사용했어요! 이것은 터보레포가 내용을 주소로 불러낼 수 있는 저장 방식을 사용하기 때문에 가능하답니다. 👐🏻
잠깐!
Remote Caching
은 터보레포의 강력한 기능은 맞아요. 그렇지만, 큰 이점에는 책임도 따릅니다.
환경 변수를 다루는 데 있어서 정확하게 캐싱이 되는지 체크를 꼭 해주세요. 또한, 터보레포는 로그를 마치 아티팩트처럼 다루고 있기에, 당신이 콘솔에 무엇을 찍고 있는지를 살펴 보셔야 합니다!
(역시 팔은 안으로 굽는군요 🙇🏻)
당신의 원격 캐시를 로컬에서 연결해주고 싶나요?
그러면, Vercel
계정으로 들어가, Turborepo CLI
을 해주셔야 합니다!
npx turbo login
그 다음에는, 이어지는 커맨드를 실행함으로써 당신의 터보레포에 원격 캐시를 연결시켜줄 수 있답니다.
npx turbo link
일단 작동된다면, turbo run
을 통해 당신이 현재 캐싱하고 있는 것과, 태스크 실행 중인 패키지나 애플리케이션을 변경시켜봅시다.
이를 확인하기 위해서는, 당신의 로컬 캐시를 삭제해줘야 해요. 따라해보세요!
rm -rf ./node_modules/.cache/turbo
그다음에 같은 빌드를 다시 실행시켜봐요. 만약 작동이 올바르게 된다면, turbo
는 로컬에서 작업을 진행하고 있는 것이 아니어야 해요. 원격 캐시로부터 로그와 아티팩트 둘 다 다운로드를 한 후에 다시 작동된 것이죠!
Vercel
빌드에 대한 Remote Caching
만약 Vercel
에서 당신의 앱을 빌드하고 올리는 중이라면, Remote Caching
d는 당신이 turbo
를 사용하기만 하면 자동으로 당신에 맞춰서 세팅을 해줄 거에요. 🥰
대신 당신은 turbo
와 함께 빌드하기 위한 빌드 세팅을 업데이트할 필요가 있겠어요.
이는 Vercel documentation
에서의 지시 사항을 참조해주세요! 🔍
터보레포에서는 원격 캐시에 업로드 하기 전에, 비밀키에 대한 아티팩트를 서명할 수 있어요.
터보레포는 당신이 제공하는 비밀키를 사용하는 아티팩트 서명에 대해 HMAC-SHA256
를 사용합니다.
터보레포는 당신이 다운로드를 했을 때 원격 캐시 아티팩트 통합 및 인증에 대한 확인을 할 거에요. 이 확인에 실패한 아티팩트는 무시되고, 캐시 미스로서 다뤄집니다.
{
"$schema": "https://turborepo.org/schema.json",
"remoteCache": {
// Indicates if signature verification is enabled.
"signature": true
}
}
당신은 원격 캐시를 스스로 호스트할 수 있어요. 또는 터보레포 원격 캐싱 서버 API에 따르는 한 다른 remote caching
서비스 제공자가 될 수도 있답니다.
당신은 호스트명을 정의하는--api
와 bearer token을 정의하는 --token
플래그를 명시함으로써 remote caching
을 설정하고 제어할 수 있습니다.
turbo run build --api="https://my-server.example.com" --token="xxxxxxxxxxxxxxxxx"
당신은 요청과 엔드포인트에 관하여 여기서 알 수 있을 거에요.