대규모 코드베이스로 작업하는 것은 소규모 프로젝트와는 다른 새로운 도전 과제들을 제시합니다. Cursor 자체 코드베이스를 확장한 경험과 대규모 코드베이스를 관리하는 고객들로부터 얻은 인사이트를 바탕으로, 증가하는 복잡성을 처리하는 데 유용한 몇 가지 패턴을 발견했습니다. 이 가이드에서는 대규모 코드베이스에 유용하다고 판단되는 이러한 기법들을 살펴보겠습니다.

Chat을 사용하여 익숙하지 않은 코드를 빠르게 이해하기

대규모 코드베이스를 탐색하는 것은, 특히 처음 접하는 코드라면 어려울 수 있습니다. 찾고 있는 코드베이스의 특정 부분을 찾기 위해 grep, 검색, 클릭을 반복하게 됩니다. Chat을 사용하면 질문을 통해 찾고 있는 것을 발견하고 작동 방식에 대한 자세한 설명을 얻을 수 있습니다. 여기서는 Cursor의 코드베이스 인덱싱 구현 세부사항을 찾는 데 도움을 받고, 이해하기 쉽도록 몇 가지 예시까지 요청하고 있습니다.
Cursor가 코드베이스 구조를 더 잘 이해할 수 있도록 하려면, 성능 향상을 위해 Settings에서 Include Project Structure를 활성화해야 합니다.

도메인별 지식에 대한 규칙 작성

코드베이스에 새로운 협력자를 온보딩한다면, 그들이 의미 있는 기여를 시작할 수 있도록 어떤 컨텍스트를 제공하시겠습니까? 이 질문에 대한 답변은 Cursor가 이해하는 데에도 유용한 정보일 가능성이 높습니다. 모든 조직이나 프로젝트에는 문서에 완전히 포착되지 않을 수 있는 잠재적 지식이 있습니다. 규칙을 효과적으로 사용하는 것은 Cursor가 전체적인 그림을 파악할 수 있도록 하는 가장 좋은 방법입니다. 예를 들어, 새로운 기능이나 서비스를 구현하는 방법에 대한 지침을 작성하는 경우, 이를 후세를 위해 문서화하는 짧은 규칙을 작성하는 것을 고려해보세요.
Boilerplate
---
description: 새로운 VSCode 프론트엔드 서비스 추가
---

1. **인터페이스 정의:**
   - `createDecorator`를 사용하여 새로운 서비스 인터페이스를 정의하고, 오류를 방지하기 위해 `_serviceBrand`가 포함되어 있는지 확인합니다.

2. **서비스 구현:**
   - 새로운 TypeScript 파일에서 `Disposable`을 확장하여 서비스를 구현하고, `registerSingleton`으로 싱글톤으로 등록합니다.

3. **서비스 기여:**
   - 서비스를 가져오고 로드하는 기여 파일을 생성하고, 메인 진입점에 등록합니다.

4. **컨텍스트 통합:**
   - 새로운 서비스를 포함하도록 컨텍스트를 업데이트하여 애플리케이션 전체에서 액세스할 수 있도록 합니다.
Cursor가 준수하기를 원하는 일반적인 형식 패턴이 있다면, glob 패턴을 기반으로 규칙을 자동으로 첨부하는 것을 고려해보세요.
Formatting
---
globs: *.ts
---
- 패키지 매니저로 bun을 사용합니다. 스크립트는 [package.json](mdc:backend/reddit-eval-tool/package.json)을 참조하세요
- 파일 이름에는 kebab-case를 사용합니다
- 함수 및 변수 이름에는 camelCase를 사용합니다
- 하드코딩된 상수에는 UPPERCASE_SNAKE_CASE를 사용합니다
- `const foo = () =>` 보다는 `function foo()`를 선호합니다
- `T[]` 대신 `Array<T>`를 사용합니다
- 기본 내보내기보다는 명명된 내보내기를 사용합니다 (예: `export const variable ...`, `export function `)

계획 수립 과정에 밀접하게 참여하기

대규모 변경 사항의 경우, 정확하고 잘 정의된 계획을 수립하는 데 평균 이상의 시간을 투자하면 Cursor의 출력을 크게 개선할 수 있습니다. 동일한 프롬프트의 여러 변형을 시도한 후에도 원하는 결과를 얻지 못한다면, 한 걸음 물러서서 동료를 위한 PRD를 작성하는 것처럼 처음부터 더 자세한 계획을 세우는 것을 고려해보세요. 종종 어떤 변경을 해야 하는지 파악하는 것이 어려운 부분이며, 이는 인간에게 잘 맞는 작업입니다. 올바른 지침이 있으면 구현의 일부를 Cursor에게 위임할 수 있습니다. AI를 활용하여 계획 수립 과정을 보강하는 한 가지 방법은 Ask 모드를 사용하는 것입니다. 계획을 수립하려면 Cursor에서 Ask 모드를 켜고 프로젝트 관리 시스템, 내부 문서 또는 자유로운 생각에서 얻은 모든 컨텍스트를 입력하세요. 코드베이스에서 포함하고 싶다고 이미 알고 있는 파일과 종속성에 대해 생각해보세요. 이는 통합하고 싶은 코드 조각이 포함된 파일이거나 전체 폴더일 수 있습니다. 다음은 예시 프롬프트입니다:
Planning prompt
- 새로운 기능을 만드는 방법에 대한 계획을 수립하세요 (@existingfeature.ts와 같은)
- 불명확한 것이 있으면 질문하세요 (최대 3개)
- 코드베이스를 검색해야 합니다

@Past Chats (내 이전 탐색 프롬프트들)

[프로젝트 관리 도구]에서 가져온 추가 컨텍스트입니다:
[붙여넣은 티켓 설명]
우리는 모델에게 계획을 수립하고 인간에게 질문을 통해 컨텍스트를 수집하도록 요청하고 있으며, 이전 탐색 프롬프트와 티켓 설명을 참조하고 있습니다. claude-3.7-sonnet, gemini-2.5-pro, 또는 o3와 같은 사고 모델을 사용하는 것이 권장되는데, 이들은 변경의 의도를 이해하고 계획을 더 잘 종합할 수 있기 때문입니다. 이를 통해 구현을 시작하기 전에 Cursor의 도움을 받아 반복적으로 계획을 수립할 수 있습니다.

작업에 적합한 도구 선택하기

Cursor를 효과적으로 사용하는 데 있어 가장 중요한 기술 중 하나는 작업에 적합한 도구를 선택하는 것입니다. 무엇을 달성하려고 하는지 생각해보고 흐름을 유지할 수 있는 접근 방식을 선택하세요.
도구사용 사례장점제한사항
Tab빠른 수동 변경완전한 제어, 빠름단일 파일
Inline Edit한 파일 내 범위가 정해진 변경집중된 편집단일 파일
Chat더 큰 규모의 다중 파일 변경자동 컨텍스트 수집, 심층 편집느림, 컨텍스트 집약적
각 도구에는 최적의 사용 영역이 있습니다:
  • Tab은 주도권을 잡고 빠른 편집을 하고 싶을 때 사용하는 기본 도구입니다
  • Inline Edit은 코드의 특정 섹션에 집중된 변경을 해야 할 때 빛을 발합니다
  • Chat은 Cursor가 더 넓은 컨텍스트를 이해해야 하는 큰 변경 작업에 완벽합니다
Chat 모드를 사용할 때(다소 느릴 수 있지만 매우 강력함), 좋은 컨텍스트를 제공하여 도움을 받으세요. @files를 사용하여 모방하고 싶은 유사한 코드를 가리키거나, @folder를 사용하여 프로젝트 구조를 더 잘 이해할 수 있도록 도와주세요. 그리고 큰 변경 사항을 더 작은 단위로 나누는 것을 두려워하지 마세요 - 새로운 채팅을 시작하면 집중도와 효율성을 유지하는 데 도움이 됩니다.

핵심 요점

  • 변경 사항의 범위를 좁히고 한 번에 너무 많은 것을 시도하지 마세요
  • 가능할 때 관련 컨텍스트를 포함하세요
  • Chat, Inline Edit & Tab을 각각의 장점에 맞게 사용하세요
  • 새로운 채팅을 자주 생성하세요
  • Ask 모드로 계획하고, Agent 모드로 구현하세요