먼저, 컨텍스트 윈도우란 무엇일까요? 그리고 이것이 Cursor로 효과적으로 코딩하는 것과 어떤 관련이 있을까요? 좀 더 넓은 관점에서 보면, 대규모 언어 모델(LLM)은 방대한 데이터셋에서 패턴을 학습하여 텍스트를 예측하고 생성하도록 훈련된 인공지능 모델입니다. 이 모델은 사용자의 입력을 이해하고 이전에 본 내용을 바탕으로 코드나 텍스트를 제안함으로써 Cursor와 같은 도구를 구동합니다. 토큰은 이러한 모델의 입력과 출력입니다. 토큰은 종종 단어의 일부분인 텍스트 덩어리로, LLM이 하나씩 처리합니다. 모델은 전체 문장을 한 번에 읽지 않고, 이전에 나온 토큰들을 바탕으로 다음 토큰을 예측합니다. 일부 텍스트가 어떻게 토큰화되는지 보려면 이 토크나이저와 같은 도구를 사용할 수 있습니다. Tokenizer

컨텍스트란 무엇인가요?

Cursor에서 코드 제안을 생성할 때, “컨텍스트”는 모델에 제공되는 정보(“입력 토큰” 형태)를 의미하며, 모델은 이를 사용하여 후속 정보(“출력 토큰” 형태)를 예측합니다. 컨텍스트에는 두 가지 유형이 있습니다:
  1. 의도 컨텍스트는 사용자가 모델로부터 얻고자 하는 것을 정의합니다. 예를 들어, 시스템 프롬프트는 일반적으로 사용자가 모델이 어떻게 동작하기를 원하는지에 대한 고수준 지침 역할을 합니다. Cursor에서 수행되는 대부분의 “프롬프팅”은 의도 컨텍스트입니다. “그 버튼을 파란색에서 초록색으로 바꿔줘”는 명시된 의도의 예시로, 지시적입니다.
  2. 상태 컨텍스트는 현재 세계의 상태를 설명합니다. Cursor에 오류 메시지, 콘솔 로그, 이미지, 코드 조각을 제공하는 것은 상태와 관련된 컨텍스트의 예시입니다. 이는 지시적이 아닌 설명적입니다.
이 두 가지 유형의 컨텍스트는 현재 상태와 원하는 미래 상태를 설명함으로써 조화롭게 작동하여, Cursor가 유용한 코딩 제안을 할 수 있게 합니다.

Cursor에서 컨텍스트 제공하기

모델에 더 많은 관련 컨텍스트를 제공할수록 더 유용해집니다. Cursor에서 충분하지 않은 컨텍스트가 제공되면, 모델은 관련 정보 없이 문제를 해결하려고 시도합니다. 이는 일반적으로 다음과 같은 결과를 초래합니다:
  1. 모델이 패턴 매칭을 시도하는 환각 현상(패턴이 없을 때)으로 예상치 못한 결과를 야기합니다. 이는 충분한 컨텍스트가 주어지지 않았을 때 claude-3.5-sonnet과 같은 모델에서 자주 발생할 수 있습니다.
  2. Agent가 코드베이스를 검색하고, 파일을 읽고, 도구를 호출하여 스스로 컨텍스트를 수집하려고 시도합니다. 강력한 사고 모델(claude-3.7-sonnet과 같은)은 이 전략으로 꽤 멀리 갈 수 있으며, 올바른 초기 컨텍스트를 제공하는 것이 궤도를 결정할 것입니다.
좋은 소식은 Cursor가 핵심적으로 컨텍스트 인식을 기반으로 구축되었으며 사용자의 최소한의 개입만 필요하도록 설계되었다는 것입니다. Cursor는 현재 파일, 다른 파일의 의미적으로 유사한 패턴, 세션의 기타 정보와 같이 모델이 관련성이 있다고 추정하는 코드베이스의 부분들을 자동으로 가져옵니다. 그러나 가져올 수 있는 컨텍스트가 많기 때문에, 작업과 관련이 있다고 알고 있는 컨텍스트를 수동으로 지정하는 것은 모델을 올바른 방향으로 안내하는 유용한 방법입니다.

@-기호

명시적인 컨텍스트를 제공하는 가장 쉬운 방법은 @-기호를 사용하는 것입니다. 포함하고자 하는 특정 파일, 폴더, 웹사이트 또는 기타 컨텍스트 요소를 정확히 알고 있을 때 매우 유용합니다. 더 구체적일수록 더 좋습니다. 다음은 컨텍스트를 더 정밀하게 활용하는 방법에 대한 분석입니다:
기호예시사용 사례단점
@code@LRUCachedFunction생성하려는 출력과 관련된 함수, 상수 또는 기호를 정확히 알고 있을 때코드베이스에 대한 많은 지식이 필요함
@filecache.ts읽거나 편집해야 할 파일을 알고 있지만 파일 내의 정확한 위치는 모를 때파일 크기에 따라 당면한 작업과 관련 없는 많은 컨텍스트가 포함될 수 있음
@folderutils/폴더 내의 모든 파일 또는 대부분의 파일이 관련이 있을 때당면한 작업과 관련 없는 많은 컨텍스트가 포함될 수 있음
Context Menu

Rules

규칙은 당신이나 팀의 다른 구성원들이 접근할 수 있는 장기 기억으로 생각해야 합니다. 워크플로우, 포맷팅 및 기타 규칙을 포함한 도메인별 컨텍스트를 캡처하는 것은 규칙 작성을 위한 훌륭한 출발점입니다. 규칙은 /Generate Cursor Rules를 사용하여 기존 대화에서도 생성할 수 있습니다. 많은 프롬프팅과 함께 긴 대화를 나누었다면, 나중에 재사용하고 싶은 유용한 지시사항이나 일반적인 규칙들이 있을 것입니다. Rules

MCP

Model Context Protocol은 Cursor에 작업을 수행하고 외부 컨텍스트를 가져올 수 있는 기능을 제공하는 확장성 레이어입니다. 개발 설정에 따라 다양한 유형의 서버를 활용하고 싶을 수 있지만, 특히 유용하다고 여겨지는 두 가지 범주는 다음과 같습니다:
  • 내부 문서: 예: Notion, Confluence, Google Docs
  • 프로젝트 관리: 예: Linear, Jira
API를 통해 컨텍스트에 액세스하고 작업을 수행하는 기존 도구가 있다면, 이를 위한 MCP 서버를 구축할 수 있습니다. 다음은 MCP 서버 구축 방법에 대한 간단한 가이드입니다. MCP

자체 컨텍스트 수집

많은 사용자들이 채택하고 있는 강력한 패턴은 Agent가 단기적으로 사용할 도구를 작성하게 한 다음, 이를 실행하여 더 많은 컨텍스트를 수집하도록 하는 것입니다. 이는 코드가 실행되기 전에 검토하는 인간 개입 워크플로우에서 특히 효과적입니다. 예를 들어, 코드에 디버깅 문을 추가하고 실행한 후, 모델이 출력을 검사하도록 하면 정적으로는 추론할 수 없었던 동적 컨텍스트에 접근할 수 있게 됩니다. Python에서는 Agent에게 다음과 같이 프롬프트를 주어 이를 수행할 수 있습니다:
  1. 코드의 관련 부분에 print(“debugging: …”) 문을 추가
  2. 터미널을 사용하여 코드나 테스트를 실행
Agent는 터미널 출력을 읽고 다음에 무엇을 할지 결정합니다. 핵심 아이디어는 Agent가 정적 코드뿐만 아니라 실제 런타임 동작에 접근할 수 있도록 하는 것입니다. Self-Gathering Context

핵심 요점

  • 컨텍스트는 효과적인 AI 코딩의 기초로, 의도(원하는 것)와 상태(존재하는 것)로 구성됩니다. 둘 다 제공하면 Cursor가 정확한 예측을 할 수 있습니다.
  • 자동 컨텍스트 수집에만 의존하지 말고, @-기호(@code, @file, @folder)를 사용한 정밀한 컨텍스트로 Cursor를 정확하게 안내하세요.
  • 팀 전체에서 재사용할 수 있도록 반복 가능한 지식을 규칙으로 캡처하고, Model Context Protocol을 통해 외부 시스템을 연결하여 Cursor의 기능을 확장하세요.
  • 컨텍스트가 부족하면 환각이나 비효율성을 초래하고, 관련 없는 컨텍스트가 너무 많으면 신호가 희석됩니다. 최적의 결과를 위해 적절한 균형을 맞추세요.