노트

Turborepo

Turborepo

인프라#tooling#ci · 연결된 개념 6개

쉽게 말하면

Turborepo는 푼 문제의 답을 노트에 적어 두는 학생 같아요. 같은 문제, 즉 같은 입력이 다시 나오면 또 풀지 않고 적어 둔 답을 꺼내고, 서로 상관없는 문제는 동시에 풀어서 모노레포 빌드가 빨라져요.

비유가 깨지는 곳 학생과 달리 무엇이 같은 문제인지 Turborepo가 다 알진 못해요. 빌드에 영향을 주는 환경변수는 env에 적어야 해시에 들어가고, outputs를 빠뜨리면 캐시가 결과물을 복원하지 못해요.

Turborepo는 JavaScript·TypeScript 모노레포의 태스크(빌드·린트·테스트)를 빠르게 돌리는 빌드 시스템이다. 기존 package.json 스크립트는 그대로 두고, 스크립트 사이의 의존 관계만 알려 주면 병렬 실행과 캐싱을 맡는다. 의도적으로 "빠른 실행과 캐시" 한 가지에 집중한다.

동작 원리

  • 태스크 그래프(task graph): turbo.json에 관계를 선언한다. ^build는 "의존하는 패키지들의 build가 먼저"라는 뜻이다. Turborepo는 이 그래프로 가능한 곳을 병렬로 돌린다
  • 캐시: 태스크 입력(소스 파일, 환경변수, 설정, 의존성)으로 해시를 계산하고 결과물과 로그를 저장한다. 같은 해시가 다시 나오면 실행하지 않고 저장된 결과를 재생한다
  • 원격 캐시(remote caching): 캐시를 팀과 CI가 공유한다. CI가 main에서 이미 빌드한 패키지를 내 컴퓨터는 다시 빌드하지 않는다
{
  "tasks": {
    "build": { "dependsOn": ["^build"], "outputs": ["dist/**"] },
    "test": { "dependsOn": ["build"] },
    "lint": {}
  }
}
turbo run build test
turbo run test --affected   # 변경된 패키지와 그 의존자만

주의

  • outputs를 빠뜨리면 캐시가 결과물을 복원하지 못한다. 빌드에 영향을 주는 환경변수는 env에 적어야 해시에 들어간다
  • 잘 맞는 곳: 패키지 수가 수~수십 개인 JS·TS 저장소, pnpm 워크스페이스와 함께 쓸 때
  • 덜 맞는 곳: 복잡한 코드 생성, 여러 CI 머신에 작업 분산, JS 외 언어가 중심인 경우 → Nx나 Bazel

흔히 권하는 순서는 워크스페이스로 시작 → 빌드가 느려지면 Turborepo → 더 많은 구조가 필요하면 Nx다(2026 기준). 입력 해시로 결과를 재사용하는 원리는 Dockerfile: 레이어 캐시와 멀티 스테이지의 레이어 캐시와 같고, 모노레포 자체는 모노레포를 본다.

출처: Turborepo: Caching · Task outputs · Remote Caching

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 브라우저 캐시

    한 번 받은 리소스(HTML·CSS·JS·이미지)를 브라우저가 저장해 두었다가 다시 쓰는 기능. 서버가 응답 헤더로 얼마나, 어떻게 캐시할지 알려 주고 브라우저가 그대로 따른다.

  • 에이전트 루프

    LLM이 도구 호출을 요청하면 실행해 결과를 돌려주고, 도구 호출 없이 답할 때까지 반복하는 구조. 코딩 에이전트도 챗봇형 에이전트도 이 반복 위에 서 있다.

  • GitOps

    GitOps는 "환경이 어떤 상태여야 하는가"를 전부 git 저장소에 선언해 두고, git에 적힌 것을 유일한 진실(single source of truth)로 삼아 실제 환경을 맞추는 운영 방식이다. 서버에 직접 손대지 않고, 바꾸고 싶으면 git을 고친다.

  • TypeScript 개요

    TypeScript는 JavaScript에 정적 타입(Static Typing)을 더한 슈퍼셋(superset) 언어다. 브라우저는 TS를 그대로 실행하지 못하므로, 타입을 검사한 뒤 타입 표기를 지운 JavaScript로 컴파일된다. 타입 표기는 프로그램의 런타임 동작을 바꾸지 않는다.

  • 쿠버네티스 핵심 개념

    쿠버네티스는 여러 서버에 컨테이너를 배치하고, 죽으면 다시 띄우고, 트래픽에 맞춰 복제 수를 조절하는 컨테이너 오케스트레이션(container orchestration) 시스템이다. 사람이 하던 서버 운영을 "원하는 상태를 선언하면 계속 맞춰 주는" 제어 루프(control loop)로 자동화한다.

보기 옵션