먼저, 컨텍스트 윈도우가 뭘까? 그리고 이게 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는 현재 파일, 다른 파일의 의미적으로 유사한 패턴, 세션의 기타 정보 등 모델이 관련 있다고 판단한 코드베이스의 부분을 자동으로 끌어와. 다만 가져올 수 있는 컨텍스트가 워낙 많아서, 작업에 관련 있다고 네가 아는 컨텍스트를 수동으로 지정해 주면 모델을 올바른 방향으로 이끄는 데 큰 도움이 돼.

@-symbol

명시적인 컨텍스트를 제공하는 가장 쉬운 방법은 @-symbol이야. 포함하고 싶은 파일, 폴더, 웹사이트 같은 구체적인 컨텍스트를 딱 알고 있을 때 특히 좋아. 구체적일수록 더 좋아. 컨텍스트를 더 정밀하게 다루는 방법을 정리하면:
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는 터미널 출력을 읽고 다음 행동을 결정해. 핵심은 정적 코드만 보게 하는 게 아니라 실제 런타임 동작에 접근하게 해 주는 거야. Self-Gathering Context

핵심 내용

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