이 글은 Cursor 시리즈의 2번째 글입니다.
- 첫번째 글 : [기타] - AI가 코드를 짜는 시대, 개발자는 무엇을 해야 할까?
- 두번째 글 : [기타] - 10분 만에 세팅 끝! Cursor로 Java 백엔드 개발 환경 갈아타기
- 세번째 글 : [기타] - Cursor 실무 실험기: 댓글 기능까지 해보니 알게 된 자동화의 한계
- 네번째 글 : [기타] - Cursor가 짠 코드, 코드리뷰 통과 가능? 팀 컨벤션에 맞춰 룰 베이스 설정하기
- 다섯번째 글 : [기타] - Cursor의 잠재력 200% 활용하는 프롬프트 튜닝 방법
IntelliJ 사용자도 쉽게 따라 할 수 있는 Cursor 기반 Java/Spring 프로젝트 환경 설정 가이드
이 글은 이런 분들을 위한 실전 가이드입니다
- 코딩 할 때 GPT, Copilot를 쓰고는 있는데 만족스럽지 않은 사람
- IntelliJ의 무거운 빌드, 느린 부팅에 피로감을 느끼는 실무자
- 새로운 AI 기반 IDE의 실효성이 궁금한 Tech 리더
- 사이드 프로젝트에서 더 빠른 생산성과 몰입 환경을 원하는 분
왜 이 실험을 하게 됐는가?
IntelliJ는 Java/Spring 개발자에게 사실상 표준 IDE입니다. 저도 수년 간 써왔습니다.
그러나 GPT, Copilot 등 AI 개발툴이 빠르게 발전하면서 “더 빠르고, 더 똑똑한 IDE는 없을까?” 라는 질문이 생겼습니다.
특히 최근 들어 “바이브 코딩(Vibe Coding)” – 프롬프트 기반 코딩 방식 – 이 JavaScript, Python 계열에서 빠르게 퍼지고 있었죠.
그 중심에 있는 도구 중 하나가 바로 Cursor입니다.
처음엔 반신반의했습니다.
“Cursor는 Visual Studio Code 기반인데, Java도 커버 할 수 있을까?”
“Thymeleaf 같은 템플릿 엔진도 되나?”
“디버깅은 어떻게 하지?”
그러나 실제로 프로젝트를 구성하고 개발을 진행해본 결과, 결론은 명확했습니다.
Cursor는 Java/Spring 개발에서도 충분히 실무 활용이 가능하며, 속도와 몰입감 측면에서 IntelliJ를 능가한다.
자주 나오는 의심과 그에 대한 실사용 답변
많은 분들이 이렇게 생각하실 겁니다.
- 정말 AI 가 다 짜주는 거 맞아? 퀄리티 낮은거 아니야?
- 코드 자동으로 수정되면 어쩌려고? 현업에서 쓸 수 있겠어?
- Cursor? 그거 Visual Studio Code랑 똑같잖아. Java는 플러그인 설정 복잡할텐데… 돌아가긴 해?
- 디버깅 기능 정말 잘 제공해? IntelliJ 보다 부족하지 않아?
- VSC 단축키 잘 몰라. IntelliJ 단축키로 바꾸는 것도 귀찮아.
저도 그랬습니다. 그래서 제가 이번 글을 통해, 여러분들의 고민들을 하나씩 해결 해드리려고 합니다.
하지만 결론부터 말하자면..
- 사용자 승인 없이는 자동 수정되지 않습니다. 따라서 쓰기 나름입니다.
- 현업에서 무조건 쓸 수 있습니다. 컨벤션에 맞지 않다구요? 룰베이스를 등록해두면 됩니다.
- 생산성 향상 정도는 놀라울 정도입니다. 더 이상, GPT나 Copliot에서 복붙할 필요가 없습니다.
- Java와 호환 아주 잘됩니다. Java 용 플러그인 확장팩 하나 설치 해주면 됩니다.
- 단축키는 IntelliJ 플러그인을 사용하면 됩니다.
Java/Spring 프로젝트를 Cursor에서 세팅하는 법
Step 1. Cursor 설치
먼저 커서부터 설치해줍니다. 해당 링크 https://www.cursor.so 에서 설치 가능합니다. VSCode 기반이지만, Cursor는 별도의 완성된 IDE입니다. 단순한 VSCode 테마 수준이 아닙니다.
설치 후 GitHub 혹은 구글로 로그인 해줍니다.
Cursor 요금제 비교 – 무료 vs 유료, 뭐가 다를까?
제대로 기능을 사용하려면 유료 플랜 사용이 필요하지만, 기본적으로 Cursor는 14일 무료 체험을 제공하여 충분히 체험해보고 결정할 수 있습니다.
항목 | 무료 플랜 (Free) | 유료 플랜 (Pro, $20/월) |
---|---|---|
AI 모델 | GPT-3.5 기반 | GPT-4 Turbo 지원 |
코드 생성량 | 월 2,000회 제한 | 무제한 |
프리미엄 요청 | 50회 느린 요청 | 500회 빠른 요청 + 무제한 느린 요청 |
Claude Opus | ❌ 미지원 | 월 10회 사용 가능 |
커스텀 커맨드 | ❌ 불가 | ✅ 가능 |
팀 협업 기능 | ❌ 개인 전용 | ✅ 워크스페이스 기반 공유 |
고급 기능 | 기본 AI 채팅 제한 | 코드 리팩토링, 히스토리 관리, 베타 기능 우선적 |
회사 코드를 AI에게 보여줘도 괜찮을까?
많은 분들이 가장 먼저 “회사 코드가 외부로 나가진 않을까?”를 걱정합니다.
그런데 다행히도, Cursor에는 Privacy Mode라는 기능이 기본 내장되어 있습니다.
이걸 활성화하면
- 로컬 코드 파일이 외부 서버로 업로드되지 않도록 차단
- 프롬프트 기반으로 요청할 때, 민감한 데이터 자동 필터링
- GPT나 Cursor 팀이 코드를 학습하거나 저장하지 않음
설정 위치: Settings → Privacy → Enable Privacy Mode
팀 단위에서도 이 옵션을 통해
내부 코드 보호 + AI 활용이라는 균형을 충분히 맞출 수 있습니다.
Privacy Mode의 동작 원리와 한계
Cursor의 Privacy Mode는 다음과 같은 방식으로 동작합니다.
- 벡터 기반 저장 방식
- Cursor는 사용자의 코드를 직접 저장하지 않고 임베딩된 벡터값만 저장
- 이를 통해 코드 자체가 외부로 유출되는 것을 방지
- 벡터값은 코드의 의미적 특성을 수치화한 것으로, 원본 코드를 복원할 수 없음
1) 벡터 임베딩이란?- 코드를 수학적 벡터로 변환하는 과정
- 예를 들어,
function calculateTotal(price, quantity) { return price * quantity; }
라는 코드는[0.2, 0.5, -0.3, 0.8, ...]
와 같은 수치 벡터로 변환됨 - 이 벡터는 코드의 의미와 패턴을 나타내지만, 원본 코드를 복원할 수는 없음
- 마치 지문처럼 코드의 특징을 나타내는 "디지털 지문"이라고 생각하면 됨
2) 코드베이스 인덱싱 과정- 코드를 작은 단위로 분할하여 벡터로 변환
- 변환된 벡터만 서버에 저장
- 원본 코드는 요청 처리 후 즉시 삭제
- 저장되는 것은 벡터와 메타데이터(해시값, 난독화된 파일명)만 해당
- Privacy Mode 활성화 시
- 벡터 데이터베이스에 코드 인덱싱을 거절
- 로컬 코드 파일의 외부 서버 업로드 차단
- 민감한 데이터의 자동 필터링
- 주의해야 할 한계점
- Privacy Mode를 사용해도 100% 코드 안전성은 보장할 수 없음
- AI 코드 생성 시 LLM에 프롬프트로 전달되는 과정에서 일부 코드가 노출될 수 있음
- 다른 AI 에디터들이 지원하는 Code Llama와 같은 폐쇄형 LLM을 Cursor는 지원하지 않음
따라서 Privacy Mode를 사용하더라도, 민감한 코드나 비즈니스 로직이 포함된 부분은 주의해서 사용하는 것이 좋습니다. 특히 회사 내부 코드를 다룰 때는 Privacy Mode를 활성화하고, 필요한 부분만 선택적으로 AI의 도움을 받는 것이 안전합니다.
Step 2. Gradle 기반 Spring 프로젝트 열기
기존 Spring 프로젝트를 불러오거나, 새로 생성해도 좋습니다. 저는 https://start.spring.io/ 에서 아래와 같이, 기본 설정을 진행하였습니다. 프로젝트 명은 cursor 로 지정해주겠습니다.
의존성은 Spring Web, Spring Data JPA, Lombok, H2 Database 이렇게 4개를 추가해보겠습니다. cursor.zip 파일이 생성되며, 해당 파일을 압축 해제 해줍니다. Import 해주면 아래와 같이, 확인 가능합니다.
기본적인 익스텐션을 설치해주겠습니다. Extension Pack for Java, 이거 하나만 설치해주면 됩니다. Gradle 설정, InteliCode, TestCode 실행, 디버깅, 메서드 실행 등 전부 가능합니다. 왜냐면 이 익스텐션을 깔면, 아래 플러그인들이 자동으로 설치 되거든요.
확장팩 안에 어떤 정보들이 있는지 궁금하다면? - 아래 링크 확인 : https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack
이왕이면 이쁘게 폴더도 꾸며주는 Material Icon Theme도 설치해줍니다.
설치하면 폴더 구조가 직관적으로 보이고, 익숙한 VSCode UI에 가까워집니다. 이제, 프로젝트를 실행해보겠습니다.
Step 3. 환경설정 및 단축키 설정
JetBrains IDE는 언어별 기능이 기본 탑재되어 있지만, Cursor는 VS Code 기반으로 출발하므로 직접 확장(extensions)을 설치해야 합니다. 다음은 추가로 설치하면 좋은 확장 목록입니다.
- IntelliJ IDEA Keybindings (IntelliJ 단축키 지원)
- GitLens (강력한 Git 통합)
- Local History (로컬 변경 기록)
- Error Lens (인라인 오류 표시)
- ESLint (코드 린팅)
- Prettier (코드 포맷터)
- Todo Tree (TODO/FIXME 추적)
Extension Pack for Java
을 설치하면 Run 버튼이 활성화 됩니다. 그럼 아래처럼 잘 실행되는 것을 알 수 있습니다.
./gradlew bootRun
을 터미널에서 실행하거나, RUN 버튼 클릭하면 바로 애플리케이션이 성공적으로 구동됩니다. 속도 면에서도 체감상 IntelliJ 대비 2배 정도 빨랐습니다. 실제로 Cursor는 M1 맥북 / 16GB 기준 2.1초 만에 구동, IntelliJ는 3.4초 걸렸습니다. 단순 수치 이상의 체감 차이가 있었고, 빠르게 작업 전환하거나 테스트할 때 특히 효율이 높아졌습니다.
본격적인 활용에 앞서, 주요 단축키는 아래와 같습니다. 한번 사용해보면 어렵지 않게 사용하실 수 있을 겁니다.
본격적인 활용에 앞서, 주요 단축키는 아래와 같습니다. Cursor에서 코딩을 도와주는 AI 기능은 크게 Copilot++, 간단한 코드 수정기능, Chat 기능 3가지가 있습니다. 따라서 커맨드도 많이 외우지 않아도 되고 딱 3가지 커맨드만 알고 계시면 됩니다.
1. Tab - Copilot++ 자동완성
- 에디터에서 약 1초간 동작이 없는 경우 Cursor Copilot++이 자동으로 코드를 추천합니다
- Tab 키를 누르면 Cursor Copilot++이 자동으로 만들어주는 코드를 적용합니다
- 다른 줄의 패턴에 따라 자동으로 코드를 완성해줍니다
2. Command + K - 간단한 코드 수정
- 간단한 코드를 생성하거나 수정하는 커맨드입니다
- 에디터 내 사용자 쿼리를 입력할 수 있는 창이 나타납니다
- 간단한 함수를 만들거나 테일윈드, 부트스트랩 등 CSS 클래스명을 붙일 때 편리합니다
- @Codebase, @Docs, @Web 등 여러 가지 심볼을 프롬프트로 사용 가능합니다
- 코드에 Command + K를 사용하면 미니 팝업이 뜹니다
- 코드를 생성하거나 수정요청할 수 있으며 바뀌는걸 Command + Shift + Y로 수락, Command + N으로 거부할 수 있습니다
- 미니팝업에 질문을 쓰고 Alt + Enter를 입력하면 바로 해당 코드에 질문 가능합니다
- VSCode 내부 CMD 커맨드 터미널에도 사용 가능합니다
3. Command + L - AI 채팅
- 에디터 화면 오른쪽에 LLM과 대화할 수 있는 채팅창을 여는 커맨드입니다
- 복잡한 버그를 수정하거나 코드에 대한 기술적인 도움이 필요한 경우 사용합니다
- 코드를 드래그 후 Command + L 커맨드 입력 시 채팅창으로 코드가 자동으로 복사됩니다
- @Codebase, @Docs, @Web 등 여러 가지 심볼을 프롬프트로 사용 가능합니다
- Command + Shift + L 또는 "@"을 사용하여 특정 코드 블록을 컨텍스트에 추가할 수 있습니다
- Command + Enter를 눌러 전체 코드베이스와 채팅할 수 있습니다 (스캔에 조금 시간이 걸립니다)
심볼(Symbol) 활용하기
심볼들을 조합해서 프롬프트를 효율적으로 만들어서 LLM에게 전달할 수 있습니다. 주요 심볼은 다음과 같습니다.
- @Codebase
- 코드베이스 기반 검색 기능
- 현재 프로젝트의 코드를 기반으로 검색하고 답변합니다
- @Docs
- 문서기반 검색 기능
- 설정 (Cursor Settings ⚙️ > Features)에서 문서를 업로드하거나 채팅창에서 @Add로 문서 등록 가능
- 업로드된 문서를 기반으로 검색하고 답변합니다
- @Web
- 웹 기반 검색 기능
- 설정 (Cursor Settings ⚙️ > Features)에서 항상 사용할지 체크 가능 (default: 사용 안 함)
- 웹 검색 시 참고한 사이트의 출처가 표시되며, 주로 공식 문서를 기반으로 답변을 생성하여 신뢰도가 높습니다
추가로 채팅창에서는 이미지도 업로드해서 사용이 가능합니다. 예를 들어, 그래프나 다른 도구의 그래프를 캡처해서 데이터 기반으로 질문을 할 수 있으며, AI가 이미지를 잘 해석해서 적절한 답변을 제공합니다.
Step 4. 프롬프트 작성하고 바이브코딩 진행
본격적으로 프롬프트를 작성해서 바이브코딩을 진행해보겠습니다. 가장 놀라웠던 부분이었는데요, 이 부분은 GPT-4o 모델에 질의하여, 최적화된 프롬프트를 뽑아봤습니다.
Cursor AI를 활용해서 간단한 CRUD가 가능한 게시판 홈페이지를 로컬에서 구동해볼거야.
프론트엔드 화면까지 확인할 수 있게 구성해주고, 프론트엔드 담당 라이브러리는 thymeleaf를 사용하여 진행할거야.
이 때 Cursor AI에게 어떤 프롬프트를 구성해야 정확한 전달이 가능할까?
도출된 프롬프트는 아래와 같습니다.
Spring Boot 기반으로 로컬에서 실행 가능한 간단한 게시판(CRUD) 웹 애플리케이션을 만들어줘.
요구사항은 다음과 같아.
1. 게시글(Post)은 다음과 같은 필드를 가져야 해
- id (Long, auto-generated)
- title (String)
- content (String)
- createdAt (LocalDateTime)
2. 다음 기능이 필요해
- 게시글 목록 조회 (/posts)
- 게시글 작성 (/posts/new)
- 게시글 상세보기 (/posts/{id})
- 게시글 수정 (/posts/{id}/edit)
- 게시글 삭제 (/posts/{id}/delete)
3. 프론트엔드는 Thymeleaf를 사용해 HTML로 렌더링하고, 각 기능을 화면에서 확인 가능해야 해.
- 목록, 작성, 상세, 수정 화면 각각의 템플릿 필요
- 부트스트랩(CDN)으로 기본 스타일 적용
4. 로컬에서 실행 가능한 Spring Boot 프로젝트 형태로 만들어줘.
- Java 21, Spring Boot 3.4.4 기준
- Spring Web, Thymeleaf, Spring Data JPA, H2 DB 사용
- H2 콘솔 접속 가능하게 설정
5. 프로젝트는 Gradle 기반으로 구성해줘.
이렇게 활용하면, 딱 Post 도메인을 CRUD 할 수 있겠네요. 눈에 띄는 부분은 프론트엔드 화면이 필요하여, Thymeleaf 의존성이 추가된 부분입니다. 어떤 식으로 의존성을 추가할 지 실제 사용해보며, 확인해보겠습니다.
CMD+I
버튼을 눌러, 채팅 창을 띄워줍니다. 아래와 같이, 초기 코드들을 생성한 것을 확인할 수 있다. 이제 해당 코드를 적용할 것인지, 적용하지 않을 것인지는 개발자가 판단해주면 됩니다. 스크린샷에 모두 담을 수 없지만, Entity 생성부터 Repository 생성, Service 생성, Controller, Thymeleaf 템플릿까지 모두 생성해줍니다.
실제로는 아래와 같이 Apply 버튼을 누르고, 깃헙에서 코드를 Pull 받듯이 진행해줍니다. 자, 이처럼 코드를 자동으로 무조건 생성하는 것은 아니고, 개발자가 충분히 검토하여 반영하는 구조입니다. 변경되는 사항 역시, 명확하게 보여줍니다. 올바르게 생성 됐으면 Accept, 수정이 필요하다 하더라도 Accept 후 수정해주면 됩니다.
GPT 를 사용하는 경우에도 동일하게 코드 뭉치들을 생성해줬을 겁니다. 그렇지만 복사/붙여넣기 해야 했겠죠. 이 과정이 필요 없어진 겁니다. 하지만 진짜 가치는 아직 나오지도 않았습니다. 일단 먼저, Cursor에서 작성한 코드들을 쭉 불러오겠습니다.
아래와 같이, 순식간에 11개 파일들을 생성 및 수정합니다.
초기 서비스를 성공적으로 확인할 수 있습니다.
그렇지만 바로 AI가 작성한 코드는 바로 실행 되지는 않았네요.
이것마저도 AI 로 디버깅하고 수정하도록 해보겠습니다. 400 에러가 발생했으니, 에러를 Cursor를 이용하여 해결해보겠습니다. 아래처럼 디버거도 잘 작동하는 것을 확인할 수 있습니다. VSC에서 제공하는 기능들 그대로 활용할 수 있습니다.
에러 처리까지 AI로 가능한가?
실제 상황 : /posts/new에서 400 Bad Request 발생
- Cursor에서 에러 로그를 그대로 Chat UI에 입력
- Copilot이 유효성 문제 및 파라미터 바인딩 오류 지적 → 코드 수정 제안
- 제안 코드 Apply 후 정상 동작 확인
주의점
AI가 100% 정답을 주진 않습니다. 그러나 빠르게 디버깅 방향을 제시해주는 데는 상당히 유용합니다.
직접 수정이 필요하더라도, 70~80% 수준의 코드 베이스를 바로 받아볼 수 있습니다.
자, 이렇게 수정을 해주니 정상적으로 작동하는 것을 확인할 수 있습니다. 나쁘지 않죠?
코드 전체가 궁금하다면? https://github.com/joonfluence/cursor
Cursor vs IntelliJ 비교 (실사용 기반)
항목 | IntelliJ | Cursor |
---|---|---|
부팅 속도 | 약 3.4초 | 약 2.1초 |
AI 연동 | 설정 추가 필요 | 기본 내장, 바로 사용 |
UI 반응 속도 | 빠름 | 빠름 |
Gradle 지원 | 안정적 | 안정적 |
디버깅 | 강력 | 충분 |
플러그인 생태계 | 풍부 | 아직 적음, 대신 가벼움 |
결론: 지금 바로 실무에 써볼 수 있는 수준인가?
Yes. 단, 제한 조건은 있다.
- 좀 더 적합한 상황
- 빠르게 API/CRUD 프로젝트 구성하고 싶은 경우
- 사이드 프로젝트, PoC(기능 검증)용
- GPT + IDE 조합에 흥미 있는 개발자
- 제한점
- 복잡한 구조를 갖는 프로젝트에선 보완 필요
- AI 코드 품질이 보장되는 것이 아니므로, 필수적으로 검토 및 수정 필요
- 디버깅, 메서드 추출 등은 아직 IntelliJ가 더 강력
글을 맺으며
Java는 무겁고, IntelliJ가 최고의 IDE라는 고정관념에서 벗어나야 할 때입니다.
Cursor는 더 이상 JS/Python 전용 실험툴이 아닙니다.
Java/Spring에서도 “빠르고, 똑똑한” 개발 환경을 충분히 구현할 수 있습니다.
다음 글에서는 Cursor로 팀 프로젝트 환경을 구성한 사례와, 회사 내 컨벤션에 맞게 실제 룰베이스를 적용하여 작성하도록, 더 고도화해보겠습니다.
'LLM > Cursor' 카테고리의 다른 글
VSC/Cursor에서 NestJs 디버깅 환경 구축하기 (0) | 2025.05.29 |
---|---|
AI가 코드를 짜는 시대, 개발자는 무엇을 해야 할까? (1) | 2025.04.14 |
GPT의 잠재력 200% 활용하는 프롬프트 튜닝 방법 (0) | 2025.04.13 |
Cursor가 짠 코드, 코드리뷰 통과 가능? 팀 컨벤션에 맞춰 룰 베이스 설정하기 (2) | 2025.04.12 |
Cursor 실무 실험기: 댓글 기능까지 해보니 알게 된 자동화의 한계 (0) | 2025.04.11 |
댓글