먼저, 컨텍스트 윈도우가 뭘까? 그리고 이게 Cursor로 효율적으로 코딩하는 데 어떻게 이어질까? 조금만 거리를 두고 보면, 대규모 언어 모델(LLM)은 방대한 데이터셋에서 패턴을 학습해 텍스트를 예측하고 생성하도록 훈련된 인공지능 모델이야. 이전에 본 내용을 바탕으로 입력을 이해하고 코드나 텍스트를 제안하면서 Cursor 같은 도구를 구동해. 토큰은 이런 모델의 입력이자 출력이야. 보통 단어의 일부 같은 텍스트 조각으로, LLM이 하나씩 처리해. 모델은 문장을 한 번에 읽지 않고, 앞에 나온 토큰들을 바탕으로 다음 토큰을 예측해. 어떤 텍스트가 어떻게 토크나이즈되는지 확인하려면 이 토크나이저를 써봐. Tokenizer

컨텍스트란 뭐야?

Cursor에서 코드 제안을 생성할 때 “컨텍스트”는 모델에 제공되는 정보(“input tokens” 형태)를 말하고, 모델은 그걸 바탕으로 다음 정보를(“output tokens” 형태) 예측해. 컨텍스트에는 두 가지 종류가 있어:
  1. 의도 컨텍스트는 사용자가 모델에서 얻고 싶은 걸 정의해. 예를 들어 시스템 프롬프트는 보통 사용자가 모델이 어떻게 행동하길 원하는지에 대한 상위 수준의 지침 역할을 해. Cursor에서 이루어지는 대부분의 “프롬프트 입력”은 의도 컨텍스트야. “그 버튼을 파란색에서 초록색으로 바꿔줘” 같은 건 명시된 의도의 예시고, 처방적이야.
  2. 상태 컨텍스트는 현재 환경의 상태를 설명해. Cursor에 에러 메시지, 콘솔 로그, 이미지, 코드 조각을 제공하는 건 상태와 관련된 컨텍스트의 예시야. 이건 처방적이 아니라 서술적이야.
이 두 가지 컨텍스트가 함께 작동해서 현재 상태와 원하는 미래 상태를 설명하고, Cursor가 유용한 코드 제안을 하게 만들어줘.

Cursor에서 컨텍스트 제공하기

모델에 더 관련성 높은 컨텍스트를 줄수록 더 유용해져. Cursor에서 컨텍스트가 충분하지 않으면, 모델은 관련 정보 없이 문제를 풀려고 해. 이건 보통 다음을 초래해:
  1. 패턴이 없는데도 모델이 패턴 매칭을 시도하면서 생기는 환각. 컨텍스트가 부족하면 claude-3.5-sonnet 같은 모델에서 자주 일어날 수 있어.
  2. Agent가 코드를 검색하고, 파일을 읽고, 툴을 호출해서 스스로 컨텍스트를 모으려는 시도. 강력한 사고 모델(예: claude-3.7-sonnet)은 이 전략만으로도 꽤 멀리 갈 수 있고, 올바른 초기 컨텍스트가 있으면 진행 궤적이 결정돼.
좋은 소식은 Cursor가 처음부터 컨텍스트 인지에 최적화되어 있고, 사용자 개입을 최소화하도록 설계되어 있다는 점이야. Cursor는 현재 파일, 다른 파일의 의미적으로 유사한 패턴, 세션의 기타 정보 등 모델이 관련 있다고 판단한 코드베이스의 부분들을 자동으로 끌어와. 다만 끌어올 수 있는 컨텍스트가 워낙 많아서, 작업에 확실히 관련된 컨텍스트를 직접 지정해 주면 모델을 올바른 방향으로 더 잘 이끌 수 있어.

@-기호

명시적으로 컨텍스트를 제공하는 가장 쉬운 방법은 @-기호를 쓰는 거야. 포함할 파일, 폴더, 웹사이트 같은 컨텍스트를 정확히 알고 있을 때 특히 좋아. 구체적일수록 더 좋아. 컨텍스트를 더 정밀하게 다루는 방법은 아래를 참고해:
SymbolExampleUse caseDrawback
@code@LRUCachedFunction생성하려는 출력과 관련된 함수, 상수, 혹은 심볼을 정확히 알고 있을 때코드베이스 전반에 대한 높은 이해가 필요함
@filecache.ts어떤 파일을 읽거나 수정해야 하는지는 알지만, 파일 내 정확한 위치는 모를 때파일 크기에 따라 현재 작업과 무관한 컨텍스트가 많이 포함될 수 있음
@folderutils/폴더 내 모든 파일 또는 대부분의 파일이 관련 있을 때현재 작업과 무관한 컨텍스트가 많이 포함될 수 있음
Context Menu

규칙

규칙은 너나 팀원들이 오래도록 참고할 수 있는 일종의 장기 메모리라고 생각하면 돼. 워크플로, 포맷팅, 기타 관례 같은 도메인별 컨텍스트를 담아두는 게 규칙을 만들 때 훌륭한 출발점이야. 규칙은 기존 대화에서도 /Generate Cursor Rules로 뽑아낼 수 있어. 프롬프트가 오간 긴 대화를 했다면, 나중에 재사용하고 싶은 유용한 지시나 일반 규칙이 꽤 있을 거야. Rules

MCP

Model Context Protocol은 Cursor에 액션 수행과 외부 컨텍스트 불러오기 능력을 더해 주는 확장 레이어야. 개발 환경에 따라 다양한 유형의 서버를 쓰고 싶을 수 있는데, 우리가 특히 유용하다고 본 카테고리는 두 가지야:
  • 내부 문서: 예) Notion, Confluence, Google Docs
  • 프로젝트 관리: 예) Linear, Jira
이미 API로 컨텍스트에 접근하고 액션을 수행하는 도구가 있다면, 그걸 위한 MCP 서버를 만들 수 있어. 여기 MCP 서버를 만드는 짧은 가이드가 있어. MCP

자체 컨텍스트 수집

많은 사용자가 채택한 강력한 패턴은 Agent가 짧게 쓰고 버릴 도구를 직접 만들어 실행해, 더 많은 컨텍스트를 수집하게 하는 거야. 이건 코드를 실행하기 전에 네가 검토하는 human-in-the-loop 워크플로우에서 특히 효과적이야. 예를 들어, 코드에 디버깅 구문을 추가하고 실행한 다음, 모델이 출력을 확인하게 하면 정적으로는 알 수 없던 동적 컨텍스트에 접근할 수 있어. Python에서는 Agent에게 다음을 지시해서 이렇게 할 수 있어:
  1. 코드의 관련 부분에 print(“debugging: …”) 구문을 추가하기
  2. 터미널을 사용해 코드나 테스트 실행하기
Agent는 터미널 출력을 읽고 다음에 뭘 할지 결정해. 핵심 아이디어는 정적인 코드만이 아니라 실제 런타임 동작에 Agent가 접근할 수 있게 해 주는 거야. Self-Gathering Context

핵심 요점

  • 컨텍스트는 효과적인 AI 코딩의 토대이며, 의도(무엇을 원하는지)와 상태(현재 무엇이 있는지)로 구성돼. 둘 다 제공하면 Cursor가 더 정확하게 예측해.
  • 자동 컨텍스트 수집에만 맡기지 말고, @기호(@code, @file, @folder)를 써서 정밀한 컨텍스트로 Cursor를 정확히 안내해.
  • 재사용 가능한 지식은 규칙으로 정리해 팀 전체가 쓰게 하고, 외부 시스템을 연결하려면 Model Context Protocol로 Cursor의 기능을 확장해.
  • 컨텍스트가 부족하면 환각이나 비효율이 생기고, 관련 없는 컨텍스트가 너무 많으면 신호가 약해져. 최적의 결과를 위해 균형을 맞춰.