Cursor AI로 코딩 생산성 높이기, 실전 사용법

Cursor AI로 코딩 생산성 높이기, 실전 사용법

카테고리:

핵심 요약

  • Cursor는 전체 프로젝트 컨텍스트를 이해하면서 코드를 작성해주는 AI 에디터로, Copilot보다 정교한 제안을 제공한다.
  • 실시간 자동 완성보다는 대규모 리팩토링이나 복잡한 버그 수정에서 진가를 드러낸다.
  • 월 $20의 Pro 플랜으로 충분한 생산성 향상을 경험할 수 있다.

Cursor의 차별점

Cursor가 Copilot과 다른 가장 큰 차이는 컨텍스트 이해도다. Copilot은 현재 파일과 최근 열린 탭 정도만 참고해서 자동완성을 제안한다. Cursor는 전체 프로젝트 구조를 스캔하고 프로젝트의 스타일, 패턴, 의존성을 파악한 상태에서 제안한다.

구체적인 경험 사례

React 프로젝트에서 새 컴포넌트를 만들 때를 예로 들어보자. Copilot은 일반적인 React 컴포넌트 형식을 제안한다. 하지만 Cursor는 프로젝트의 기존 컴포넌트들을 분석해서 같은 패턴(hooks 사용 방식, state 관리 라이브러리, 스타일링 방법)으로 새 컴포넌트를 만든다.

또한 Cursor의 채팅 기능은 단순한 코드 생성을 넘어선다. “@” 심볼로 특정 파일이나 폴더를 지정해서 “이 폴더의 모든 API 호출 패턴을 보고 새로운 엔드포인트를 추가해달라”는 식의 요청을 할 수 있다. 그러면 Cursor는 해당 파일들을 전부 읽고 일관성 있는 코드를 생성한다.

설치와 초기 설정

Cursor를 다운로드하면 VSCode와 거의 같은 인터페이스를 마주한다. 실제로 Cursor는 VSCode를 기반으로 만들어졌다. 기존 VSCode 설정과 확장 프로그램을 거의 그대로 가져올 수 있다.

처음 실행하면 AI 모델을 선택하는 화면이 나온다. 무료 플랜에서도 Claude와 GPT 계열 모델을 제한된 횟수만큼 쓸 수 있다. 선택 가능한 모델은 수시로 바뀌므로 실행 화면에서 확인하는 게 정확하다. Pro 플랜(월 $20)은 더 많은 API 호출을 할 수 있다.

로그인 후 프로젝트 폴더를 열면 Cursor가 자동으로 프로젝트 구조를 분석한다. 처음 분석에는 몇 초가 걸릴 수 있지만, 그 이후로는 캐시된 정보를 사용해서 빠르다.

추천 초기 설정

  • “Cursor Settings” > “General” > “Generation Settings”에서 모델 선택
  • “Chat” > “Show at startup” 끄기 (매번 채팅 창이 뜨는 것 방지)
  • “IDE Features” > “Diff” 활성화 (변경사항을 diff로 보기)

코드 작성 패턴

Cursor에는 여러 가지 코드 생성 모드가 있다.

Cmd+K로 인라인 편집

Cmd+K (또는 Ctrl+K): 현재 줄 또는 선택한 코드를 수정하거나 확장한다. 프롬프트를 입력하고 엔터를 누르면 해당 위치에 코드가 생성된다. 원래 코드는 유지되고 새 코드로 교체할지 선택할 수 있다.

// 현재 상태
function calculateTotal(items) {
  let total = 0;
  for (let item of items) {
    total += item.price * item.quantity;
  }
  return total;
}

// Cmd+K로 "reduce를 사용해서 함수형으로 변경"이라고 입력
// 결과:
function calculateTotal(items) {
  return items.reduce((total, item) => total + item.price * item.quantity, 0);
}

Cmd+Shift+L로 전체 파일 생성

Cmd+Shift+L (또는 Ctrl+Shift+L): 파일이 비어 있을 때 파일 이름과 간단한 설명으로 전체 구조를 만들 수 있다. 예를 들어 “userService.ts – 사용자 인증과 프로필 관리 기능”이라고 입력하면 기본 구조를 갖춘 TypeScript 파일을 생성한다.

Cmd+I로 멀티라인 편집

Cmd+I (또는 Ctrl+I): 여러 줄을 한 번에 수정할 때 사용한다.

실전 예제: Express.js API 확장

Express.js API에 새로운 라우트를 추가한다고 하자.

// routes/users.js
const express = require('express');
const router = express.Router();

router.get('/:id', async (req, res) => {
  const user = await User.findById(req.params.id);
  res.json(user);
});

router.put('/:id', async (req, res) => {
  const user = await User.findByIdAndUpdate(req.params.id, req.body, { new: true });
  res.json(user);
});

이 파일에서 Cmd+K를 누르고 “DELETE 엔드포인트 추가하고, 응답 에러 처리 추가”라고 입력하면:

router.delete('/:id', async (req, res) => {
  try {
    const user = await User.findByIdAndRemove(req.params.id);
    if (!user) {
      return res.status(404).json({ error: 'User not found' });
    }
    res.json({ message: 'User deleted successfully' });
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
});

Cursor가 기존 코드의 에러 처리 패턴을 보고 같은 방식으로 delete 메서드를 만든다. 이것이 프로젝트 이해도의 차이다.

채팅 기능과 컨텍스트 활용

Cmd+L (또는 Ctrl+L)를 누르면 오른쪽에 채팅 창이 열린다. 여기서는 코드 생성뿐 아니라 설명, 디버깅, 리팩토링 제안을 받을 수 있다.

@ 심볼로 컨텍스트 지정

채팅에서 “@” 심볼을 입력하면 파일, 폴더, 메서드 등을 지정할 수 있다.

@path:src/api "이 폴더의 모든 API 엔드포인트가 에러 처리를 제대로 하고 있는지 확인해줄래?"

Cursor는 src/api 폴더의 모든 파일을 읽고 에러 처리 패턴을 분석해서 일관성이 없는 부분을 지적한다.

또는:

@file:src/database/models.ts "이 파일의 User 모델을 기반으로 비슷한 Product 모델을 만들어줄래?"

Cursor는 User 모델의 필드, 메서드, 유효성 검사 로직을 참고해서 같은 패턴의 Product 모델을 만든다.

버그 찾기

에러 메시지를 복사해서 채팅에 붙여넣고 “이 에러가 뭐고 어디를 고쳐야 하는지 알려줄래?”라고 물으면, Cursor가 관련 파일들을 보면서 원인을 찾고 고칠 코드를 제안한다.

성능 최적화와 비용 관리

Cursor는 API 호출 비용이 발생한다. Pro 플랜도 월 한도가 있다. 효율적으로 사용하려면:

필요한 파일만 포함

@ 지정할 때 전체 폴더 대신 구체적인 파일을 지정한다. 예를 들어 @path:src/api 대신 @file:src/api/users.ts처럼 특정 파일을 지정하면 불필요한 파일을 읽지 않아 비용을 줄일 수 있다.

간결한 프롬프트

장황한 설명보다 명확하고 짧은 프롬프트가 효율적이다. “이 함수를 개선해줄래?”보다 “이 함수를 reduce로 리팩토링해줄래?”가 낫다.

자동 완성 vs 채팅 구분

간단한 자동 완성은 Tab으로, 복잡한 작업은 채팅으로. 자동 완성은 API 비용이 덜 들 수 있다.

실전 사례: 마이그레이션과 리팩토링

실제 프로젝트에서 Cursor가 유용했던 경우는 전체 구조 변경이다. JavaScript에서 TypeScript로 마이그레이션할 때를 보자.

파일을 .ts로 rename한 후, 채팅에서:

이 파일을 TypeScript로 변환해줄래? 
- 매개변수와 반환값에 타입 추가
- 외부 라이브러리는 @types 패키지 확인
- any는 쓰지 말고 구체적인 타입 사용

Cursor가 현재 파일뿐 아니라 관련된 다른 파일들(@ 파일 자동 감지)을 보면서 일관된 타입을 추가한다.

또는 API 응답 형식이 바뀌었을 때, 모든 곳에서 사용하는 방식을 바꿔야 하는 상황에서도 유용하다.

src/types에서 User 타입이 { name, email, id }에서 { firstName, lastName, email, userId }로 변경됐어.
이 변경이 src/components와 src/api에 어떤 영향을 미치고, 어느 부분을 수정해야 하는지 보여줄래?

Cursor가 전체 영향 범위를 분석해서 수정이 필요한 모든 위치를 찾아준다.

실전 사용 팁 및 주의사항

Cursor 사용의 함정과 해결책

직접 써본 결과, Cursor가 프로젝트 구조를 이해하는 데 시간이 걸린다는 점이 초기 불편함이다. 첫 프로젝트 로드 시 30초~1분 정도 걸릴 수 있다. 이건 정상이고, 이후에는 캐시 덕분에 빨라진다.

또 다른 주의점은 API 비용이 생각보다 빠르게 소진된다는 것이다. 복잡한 프로젝트에서 하루에 50번 이상 채팅으로 질문하면 Pro 플랜의 월 한도를 초과할 수 있다. 필요한 파일만 지정해서 효율적으로 사용해야 한다.

생성된 코드 검증의 중요성

Cursor가 완벽한 코드를 보장하지는 않는다는 점을 항상 기억해야 한다. 특히 새로운 라이브러리나 패턴을 사용할 때는 공식 문서와 비교해서 검증하는 습관이 필수다.

또한 보안 관련 코드(데이터베이스 쿼리, 인증 로직)는 반드시 사람이 검토해야 한다. AI가 SQL 주입이나 XSS 취약점을 제안할 수도 있다.

Cursor vs GitHub Copilot vs Claude

기능 Cursor Copilot Claude(웹)
프로젝트 전체 이해 강함 약함 중간 (수동으로 코드 전달)
실시간 자동완성 매우 빠름 빠름 느림 (웹 인터페이스)
대규모 리팩토링 우수 보통 우수
무료 사용 제한적 개인은 무료, 팀은 유료 무료 플랜 있음
학습곡선 낮음 매우 낮음 중간
채팅 컨텍스트 자동 파일 포함 수동 지정 필요 수동 전달

Cursor는 Copilot보다 비싼 대신 프로젝트 이해도가 높다. Claude는 웹에서 코드 전체를 복사해서 물어봐야 하지만, 복잡한 설계나 아키텍처 문제에서는 더 나을 수 있다. 실제로는 빠른 자동 완성에는 Cursor, 큰 변경에는 Claude를 조합해서 사용하기도 한다.

자주 묻는 질문

Q. Cursor에서 만든 코드의 저작권은 누구 것인가?
A. 당신의 것이다. Cursor는 도구일 뿐이다. 생성된 코드는 당신의 프로젝트에 속한다. 단, Cursor 서버(Claude API 또는 GPT-4o)에 코드가 전송되므로 민감한 정보(API 키, 개인 데이터)는 제외하는 것이 좋다.

Q. 오프라인에서 Cursor를 쓸 수 있나?
A. AI 코드 생성은 인터넷이 필수다. Cursor 자체는 오프라인에서 열 수 있지만, Cmd+K나 Cmd+L 기능은 작동하지 않는다. 단순 텍스트 에디터로는 사용 가능하다.

Q. VSCode의 모든 확장 프로그램이 Cursor에서도 작동하나?
A. 대부분 작동한다. VSCode Extension Marketplace에서 찾은 확장은 Cursor에서도 설치할 수 있다. 다만 Cursor 자체가 AI 기능을 내장하고 있어서 Copilot 확장 같은 것은 충돌할 수 있다. 중복 제거 후 사용하자.

Q. Pro 플랜(월 $20)의 가치가 있나?
A. 무료로 충분한지는 사용 패턴에 따라 다르다. 하루에 Cmd+K를 수십 번 쓰는 개발자라면 Pro로 업그레이드하는 게 낫다. 가끔 쓰거나 채팅만 사용한다면 무료 플랜으로도 충분하다. 월 한도를 초과했을 때만 아쉬움이 생긴다.

Q. Cursor를 쓰면 코딩 실력이 줄어들지 않을까?
A. 도구는 도구일 뿐이다. 보일러플레이트나 반복되는 코드는 Cursor가 빠르게 만들고, 당신은 핵심 로직에 집중할 수 있다. 다만 완전히 의존하면 안 되고, 생성된 코드를 항상 검토하고 이해해야 한다. 문제가 생겼을 때 고칠 수 없으면 곤란하기 때문이다.

Q. Cursor가 생성한 코드에 버그가 있으면 책임은?
A. Cursor는 확률 기반 모델이므로 완벽하지 않다. 생성된 코드는 항상 테스트와 검토가 필요하다. 프로덕션 배포 전에 코드를 꼼꼼히 확인하고, 문제가 있으면 수정할 책임은 당신에게 있다.

결론 및 한 줄 평

Cursor는 프로젝트의 패턴을 이해하면서 일관된 코드를 빠르게 생성해주는 개발자의 든든한 파트너다. 하루 종일 같은 패턴의 코드를 반복해야 한다면, Cursor의 가치는 충분히 느낄 수 있다. 특히 대규모 리팩토링이나 마이그레이션 작업에서 시간을 크게 단축시킬 수 있다.

요금 정보 안내
이 글에 적힌 요금과 기능은 발행 시점 기준입니다. 서비스 정책은 예고 없이 바뀔 수 있으므로, 결제 전에 각 서비스 공식 요금 페이지에서 최신 내용을 확인해 주세요. 내용이 달라진 것을 발견하시면 문의 페이지로 알려 주시면 확인 후 수정합니다.