태그
목차

애플리케이션 개발하기

생성일: 2024-06-30

수정일: 2024-06-30

Turborepo는 애플리케이션 개발 과정을 더 쉽고 효율적으로 만들어준다.

개발 태스크 구성하기

개발 태스크는 코드를 수정하는 동안 계속해서 백그라운드에서 실행되어야 하는 장기 실행 태스크다.

Note

장기실행 태스크는 다음과 같은 것들이 있다.

  • 개발 서버 실행 (예: hot reloading)
  • 테스트 실행 (예: watch 모드)
  • 애플리케이션 빌드 (예: hot reloading)

다음과 같이 turbo.json 파일에 dev 태스크를 등록한다:

// ./turbo.json
{
  "tasks": {
    "dev": {
      "cache": false,
      "persistent": true
    }
  }
}

이제 dev 태스크를 통해 개발 스크립트를 병렬로 실행할 수 있다:

turbo dev

다른 태스크 먼저 실행하기

dependsOn 을 사용하여 dev 태스크를 실행하기 전에 먼저 환경 설정이나 패키지 빌드를 수행할 수 있다.

// ./turbo.json
{
  "tasks": {
    "dev": {
      "cache": false,
      "persistent": true,
      "dependsOn": ["//#dev:setup"]
    },
    "//#dev:setup": {
      "outputs": [".codegen/**"]
    }
  }
}

위의 코드에서는 루트 태스크를 사용하고 있지만, 패키지내의 임의의 태스크를 사용할 수도 있다.

특정 애플리케이션 실행하기

--filter 플래그를 사용하여 특정 패키지에서만 dev 태스크를 실행할 수 있다.

turbo dev --filter=web

감시 모드

tsc --watch 와 같이 많은 도구들이 내장 감시 모드를 지원한다.

하지만 감시 모드를 지원하지 않는 도구들도 있다.

이러한 경우 turbo watch 를 사용하여 감시 모드를 추가할 수 있다.

예를 들어 다음과 같은 경우:

{
  "tasks": {
    "dev": {
      "persistent": true,
      "cache": false
    },
    "lint": {
      "dependsOn": ["^lint"]
    }
  }
}
{
  "name": "@repo/ui"
  "scripts": {
    "dev": "tsc --watch",
    "lint": "eslint ."
  }
}
{
  "name": "web"
  "scripts": {
    "dev": "next dev",
    "lint": "eslint ."
  },
  "dependencies": {
      "@repo/ui": "workspace:*"
    }
}

turbo watch dev lint 를 실행하면, ESLint가 감시 모드를 지원하지 않음에도 소스 코드를 변경할 때마다 lint 스크립트가 다시 실행된다.

turbo watch 는 내부 의존성도 인식하므로, @repo/ui 의 코드를 변경하면 web 의 태스크도 다시 실행된다.

dev 태스크는 persistent 를 설정하였으므로, web 의 Next.js 개발 서버와 @repo/ui 의 TypeScript 내장 감시 모드를 방해하지 않고 그대로 활용할 수 있다.

제한 사항

정리 태스크

dev 태스크를 끝내고 나서 마무리 작업이 필요할 수 있다.

예를 들어, 임시 파일을 삭제하거나 연결을 끊는 등의 작업이다.

하지만 dev 태스크가 끝나면 turbo 도 함께 종료된다.

때문에 dev 태스크가 끝난 후에는 다른 작업을 수행할 수 없다.

대신 dev 태스크 후에 수동으로 실행할 수 있는 별도의 turbo dev:teardown 스크립트를 만든다.

좀 번거롭긴 하지만, 현재로서는 이 방법이 가장 좋다.