프론트엔드 정복하기
모노레포 - 터보레포 본문
Vercel 이 인수했고, JS 와 TS 코드 베이스의 모노레포를 위한 고성능 빌드 시스템이다.
터보레포의 주요 미션은 모노레포 환경에서 개발자가 좀더 쉽고 빠르게 개발할 수 있도록 빌드 도구를 제공하는 것이다.
고급 빌드 시스템을 구축하는 복잡한 과정을 대신 해준다. 터보레포의 기본 원칙은 한번 작업을 수행하며 수행한 계산은 이후 다시 수행하지 않는 것이다. 따라서 두번째 실행할 때는 이전 계산한 작업은 건너뛰고 캐싱해 놓은 로그를 다시 보여준다.
9가지 특징
1. Incremental builds
작업 진행을 캐싱해 이미 계산된 내용은 건너 뛰는 것을 의미합니다. 빌드는 딱 한 번만 하는 것을 목표로 합니다.
2. Content-aware hasing
타임스탬프가 아닌 콘텐츠를 인식하는 방식으로 해싱을 지원합니다. 이를 통해 모든 파일을 다시 빌드하는 것이 아니라 변경된 파일만 빌드합니다.
3. Cloud caching
클라우드 빌드 캐시를 팀원 및 CI/CD와 공유합니다. 이를 통해 로컬 환경을 넘어 클라우드 환경에서도 빠른 빌드를 제공합니다.
4. Parallel execution
모든 코어를 사용하는 병렬 실행을 목표로 합니다. 지정된 태스크 단위로 의존성을 판단해 최대한 병렬적으로 작업을 진행합니다.
turbo run lint build test deploy --> 패키지별 lint, build, test, deploy 가 병렬적으로 실행될 수 있음.
5. Task Pipelines
태스크 간의 연결을 정의해서 빌드를 언제 어떻게 실행할지 판단해 최적화합니다.
6. Zero Runtime Overhead
런타임 코드를 간섭하거나 소스맵을 건드리지 않는다. 이에 따라 런타임 단계에서 파악하지 못한 리스크가 불거질 위험이 없습니다.
소스맵이란?)
번들러로 파일을 빌드하면 모든 파일이 main.bundle.js 하나로 뭉쳐지게 되는데, 소스맵은 main.bundle.js 파일 내부의 각 부분이 원본 코드 파일 중 어느 파일의 몇번 라인에 위치한 부분과 일치하는지 알려주는 정보를 담고 있다.
소스맵은 dev, production 모드에 다라 선택할 수 잇는 옵션이 다르다. 보통 base64로 인코딩된 경우가 많으며, 디버깅에 압도적으로 유리하기 때문에 개발 단계에서는 이 옵션을 항상 활성화시켜두는 것을 강력히 권장한다.
7. Pruned subsets
빌드에 필요한 요소만으로 모노 레포의 하위 집합을 생성해 PaaS 배포 속도를 높입니다.
8. JSON configuration
별도의 코드 작업 없이 JSON 설정으로 터보를 사용할 수 있습니다.
// turbo.json { "baseBranch": "origin/main", "pipeline": { "build": { ... } } }
9. Profile in browser
빌드 프로필로 빌드 과정을 시각화하면 병목 지점을 쉽게 찾을 수 있습니다.
간단한 사용법
1. 루트에 turbo.json 파일을 생성한 후, 파이프라인을 작성한다.
병렬 처리, 의존성 범위 등을 설정한다.
2. Turborepo 를 설치한다.
$ yarn add turbo -DW # devDependency, install workspace root
$ turbo run build # yarn uvp build, yarn storybook build 등 의존성을 가진 모든 package 스크립트가 실행됩니다.
참고 사이트
https://engineering.linecorp.com/ko/blog/monorepo-with-turborepo
아래 블로그에 소스맵에 대해 상세하게 정리되어 있다. 추후 공부해보면 좋을 것 같다.
'레파지토리 구성하기' 카테고리의 다른 글
monorepo 에서 pre-commit 훅 구성하기 (0) | 2023.10.10 |
---|---|
pnpm 패키지 관리자 (0) | 2023.09.17 |
모노리스 & 멀티레포 & 모노레포 (0) | 2023.09.17 |
모노레포 - Yarn과 Lerna (0) | 2023.09.17 |
모노 레포 - yarn workspaces (0) | 2023.09.16 |