최근에 커서에서 대학생에게 1년동안 커서를 무료로 제공한다고 한다. ( ㄷㄷ ) 개인적으로 최근에는 커서 없이는 개발을 할 수 없을 정도로 덕을 많이 보고 있다. 커서 자체만으로도 굉장히 혁명적인 기술이지만 최근에는 MCP라는 새로운 프로토콜이 나오게 되면서, AI를 사용하는 개발자와 그렇지 않는 개발자의 차이는 어마어마하게 커지고 있다.
마치 계산기가 발명된 시절에 주판으로 경쟁하는 느낌이랄까.. 최근에 AI와 개발자가 경쟁할 수 있을까?에 대한 이야기가 어디서든 들려오는데, 개인적인 의견은 AI랑 경쟁은 절대 안되고... 아마 AI를 사용하는 개발자들과 경쟁을 해야하지 않을까 싶다. 어떻게 하면 AI를 더 잘 활용해서 뛰어난 생산성을 가져올 수 있는지 말이다.
이번 포스팅에서는 Cursor를 사용하면서 느낀 장점과 단점 그리고 MCP 사용 방법 등을 소개하려고 한다.
본론
Cursor?
커서란 Visual Studio를 포크떠서 만든 프로덕트로, vscode의 옆에 LLM이 하나 달려있다. vscode 기반이기 때문에, 프로필이나 환경 설정들을 불러올 수 있다. 커서에 대한 설명보다는 실전 사용 방법 위주로 다룬다.
Cursor Mode : 상황에 맞는 모드를 설정한다
커서는 세 가지 모드를 제공한다, Ask, Agent 그리고 Manual을 제공한다.
Ask ( 질문/요청 모드 )
Ask 모드는 AI와 커서가 직접적으로 소통하는 방식으로 사용자가 채팅 인터페이스를 통해 질문하거나 작업을 요청하면 LLM이 답변이나 코드 변경 사항을 제시한다. 이는 코드베이스로 선택된 코드 조각에 대해서 이루어진다.
MacOS 기준으로 command + L를 통해서 드래그한 코드 라인을 레퍼런스로 달 수 있다. 또한 command + K를 통해서 코드에 대한 설명을 요청할 수 있다.
사용 시나리오는 특정 기능 구현에 대한 아이디어나 코드가 필요할 때, 기존 코드의 개선 방안이나 버그 수정에 대한 도움이 필요할 때다, 아래의 Agent와는 다르게 프로젝트의 다른 소스 코드를 직접 참고해서 답변하지는 않는다.
Agent ( 스스로 문제를 해결하는 모드 )
Agent 모드는 Ask 모드보다 한 단계 더 나아가, AI가 좀 더 능동적으로 문제 해결 계획을 세우고 여러 단계에 결쳐 작업을 수행하는 방식이다. 사용자가 복잡한 목표나 작업을 제시하면, Agent는 이를 달성하기 위한 하위 작업들을 스스로 계획하고, 필요에 따라 파일을 수정하거나 생성하는 등의 작업을 진행한다.
위와 같이 Agent 모드를 사용하면 직접 메인 디렉토리에 있는 frontend 디렉토리와 backend 디렉토리를 확인해서 docker-compose에 맞는 Dockerfile을 만들어 준다. 위 사진은 이미 만들어져 있는 것을 확인해서 별도의 작업을 하지 않는 모습이다.
Manual (수동 편집/AI 제안 모드)
Manual 모드는 전통적인 코딩 방식에 AI의 제안을 결합한 형태이다. 사용자가 직접 코드를 작성하거나 수정하는 과정에서, AI가 실시간으로 코드 완성, 수정 제안, 또는 관련된 정보를 제공한다. 사용자는 이러한 제안을 참고하여 코딩을 이어갈 수 있다.
인라인 코드 완성 및 제안 등으로 AI가 다음 줄이나 코드 블럭을 예측하여 제안하여 Github Copilot과 같은 느낌으로 작동한다. 기존의 코딩 흐름을 유지하면서 AI의 보조를 받고 싶을 때나 반복적인 코드 패턴을 빠르게 작성하고 싶을 때 사용한다.
모드를 종합하면
Cursor의 Ask, Agent, Manual 모드는 각각 다른 수준의 AI 개입과 사용자 제어권을 제공한다. 다음과 같은 시나리오에 따라서 원하는 모드를 사용하면 된다.
- Ask : 간단한 질문이나 코드 조각 수정은 Ask 모드를 통해서 해결한다.
- Agent : 복잡하고 여러 단계로 이루어진 작업은 Agent 모드를 통해 AI에게 위임하여 자동화할 수 있다.
- Manual : 기존의 코딩 방식을 선호하면서 AI의 실시간 모움을 받고 싶다면 Manual 모드( 또는 인라인 AI 기능 )가 유용하다.
대충 설명을 보면 느낌이 오겠지만, 주변의 많은 사람들은 Agent 모드를 일반적으로 쓰는 편이다. Ask 모드는 다른 파일을 직접 탐색하지 않기 때문에, ChatGPT와 같은 LLM에게 질문하는 느낌인 반면, Agent 모드는 여러 파일들을 확인해서 컨밴션을 맞추는 능력이 강하다.
예를 들어, 백엔드 개발을 한다고 하면, controller 및 service 그리고 repository 레이어로 메서드를 분리하며, payload & mapper 혹은 request & response라는 컨밴션으로 DTO를 정의해서 사용할 것이다.
이 경우, Controller 레이어의 형식만 간단하게 정의하고, 기존의 service 및 repository 그리고 DTO의 형식에 맞게 짜달라고 하면, Agent 모드는 직접 컨벤션을 확인하여 코드를 짜준다. 컨트롤러 레이어만 설계하고, 단순한 반복 작업은 Cursor의 Agent 모드가 대부분 해결해준다.
어떤 LLM을 사용해야할까?
개인적으로는 claude-sonnet-3.7을 사용하고 있었다. 여러 LLM을 사용해보면서, 소넷이 코드 자체는 가장 잘 짠다는 느낌을 받았다. 물론 ChatGPT와 다르게 인터넷 레퍼런스를 가져오는 기능이 약해서 범용적으로 사용하기 위해 다시 ChatGPT로 돌아오곤 했다.
어떤 LLM을 선택하면 좋을 지에 대해 논의된 Geeknews 레퍼런스가 있다. 직접 느꼈던 것과 비슷하게 많은 사람들이 공감하는 것으로 보아, 이러한 것들 고려해서 LLM을 사용하면 좋을 것 같다.
- [Geeknews] Cursor 사용자들의 선호 언어 모델 TOP 3 및 그 이유 : https://news.hada.io/topic?id=20629
Cursor 사용자들의 선호 언어 모델 TOP 3 및 그 이유 | GeekNews
gpt-4.1은 신중하고 충실한 조력자로, 정확한 코드 이해와 보수적 접근에 강점이 있음gemini 2.5 pro는 넓은 컨텍스트 처리에 뛰어나고 이미지 분석 기능도 우수하지만, 과잉 수정을 유발할 위험성이
news.hada.io
해당 아티클의 내용을 잠깐 요약하면 아래와 같다.
- gpt-4.1 : 지능적이고 신뢰도 높은 보조자처럼 행동, 성급히 판단하지 않고 과도한 수정을 하지 않음
- gemini 2.5 pro : 긴 콘솔 로그, 전체 코드 파일 등 넓은 컨텍스트를 활용할 때 강력, 지나치게 자율적으로 동작함
- sonnet 3.7 : 창의적이고 똑똑하지만 장기 대화에서 맥락을 잃거나 지시를 무시하는 경우가 있음
보다 자세한 후기와 다양한 사람들의 의견은 위 레퍼런스를 살펴보면 더욱 자세하게 알 수 있다.
setting.json : 프로젝트의 설정을 프롬프트한다
LLM의 진정한 성능은 프롬프트 미리 입력해두는 것에 있을 것이다. 커서의 장점은 프로젝트에 대한 세팅을 설정 파일로 저장해둘 수 있다. 메인 프로젝트에 .cursor라는 디렉토리를 만든 후에, setting.json의 파일 내용을 아래와 같이 저장하면 된다.
그렇다면 커서가 답변할 때, 다음을 참고해서 동작하며, 특히 agent 모드를 사용하는 경우에 어떤 파일을 참조하면 좋을 지 손쉽게 알려줄 수 있다.
rules : 모드(mode)를 커스터마이즈한다
앞서, ask나 agent 그리고 manual 모드에 대해서 무슨 차이가 있는 지 조금 의아할 수도 있다. 사실 물어보면 답변을 해준다는 측면에서는 다 비슷비슷하다. 이러한 모드를 커스터마이즈하거나 아니면 아예 LLM 자체를 커스터마이즈하는 방법이 있다. 그것은 바로 rules라는 디렉토리를 만들어, 특정 모드에 원하는 내용을 커스터마이즈할 수 있다.
.mdc 파일을 만들면 커서가 확인할 수 있는 내용의 마크다운을 확인할 수 있다. .mdc 파일은 아래의 레퍼런스에 따르면 커서가 이해할 수 있는 마크다운 파일이라는 것을 알 수 있다.
- [cursor forum] what is a .mdc file? : https://forum.cursor.com/t/what-is-a-mdc-file/50417
What is a .mdc file?
When adding a new rule file to cursor/rules, cursor automatically creates a .mdc file. There is no mention of this file type or how the actual description of the rule should be formatted. So, I have a few questions: is this some kind of markdown extension?
forum.cursor.com
해당 확장자로 만든 마크다운을 커서에서 열어보면 아래와 같이 Rule Type이 추가된 것을 볼 수 있다.
위는 모든 경우에 대해서 해당 프롬프트를 적용하도록 세팅한 커서의 code_guide.mdc이다. 이렇게 rules를 적용하여, 원하는 컨밴션을 기반으로 답변을 하도록 설정할 수 있다.
또한, 이러한 세팅을 모드에 따라서 다르게 설정할 수 있기 때문에, ask와 agent 그리고 manual을 사용하면서 각각을 필요에 따라 사용할 수 있도록 커스터마이즈하기 위해서는 프롬프트를 입력하는 것이 좋다.
개인적으로는, Ask 모드는 ChatGPT에게 묻는 느낌으로 솔루션을 묻거나, 왜 이러한 에러가 났는 지? 어떤 이유가 있을 수 있는 지?와 같은 코드 수정을 제외한 부분을 물어볼 수 있도록 세팅했다. 그리고 Agent 모드는 반복되는 코드 작업을 단순화하기 위해, 백엔드 개발의 아키텍처를 서술하여, 다음과 같은 구조에 따라 코드를 작성하라고 프롬프트 엔지니어링을 했다.
결론적으로, 나는 ask 모드는 chatGPT 대용으로 사용하는 느낌이며, Agent 모드는 코드 설계까지만 하고, 구현은 위탁하는 느낌으로 한다. 사실 Ask와 토론해서 설계한 코드를 Agent가 짜주는 느낌이다. 이 외에도 정말 크랙(사기)이다 싶을 정도 좋은 기능들이 많다. (혹시나 알고 있는 사람이 있다면 댓글에 공유를 ..)
프롬프트 엔지니어링 뿐만 아니라 이제는 외부에서 컨텍스트를 전달해줄 수 있는 프로토콜까지 나오게 되었다. 바로 MCP(Model Context Protocol)으로, 개발 관련되어 소식에 관심이 많다면 최근에 못 들어봤을 수 없을 것이다.
MCP란?
MCP란 Model Context Protocol의 약자로, LLM 애플리케이션과 외부 데이터 소스와 원할한 연동을 가능하게 하는 프로토콜을 뜻한다. Cursor와 같은 LLM 에이전트와 Figma 그리고 AWS와 같은 외부 데이터 애플리케이션과 연동하면, LLM이 작동하면서 외부 데이터 소스에서 컨텍스트를 확인하여 작업하게 된다.
이러한 MCP를 사용하기 위해서는 서버(Server)를 실행해야 하며, 커서나 클로드같이 MCP를 지원하는 LLM에서 등록하면 외부 데이터 소스에서 컨텍스트를 확인해서 LLM이 사용하게 된다. 이러한 설정을 하는 방법은 아래의 공식 문서에서 확인해볼 수 있다.
- [Cursor] Model Context Protocol : https://docs.cursor.com/context/model-context-protocol#configuring-mcp-servers
Cursor – Model Context Protocol
Let Cursor create PRs, create branches, find code, etc
docs.cursor.com
node.js 프로젝트를 사용하는 경우에는 아래와 같은 JSON 포맷으로 MCP를 정의할 수 있다.
{
"mcpServers": {
"server-name": {
"command": "npx",
"args": ["-y", "mcp-server"],
"env": {
"API_KEY": "value"
}
}
}
}
Python을 사용하는 경우는 아래와 같다.
{
"mcpServers": {
"server-name": {
"command": "python",
"args": ["mcp-server.py"],
"env": {
"API_KEY": "value"
}
}
}
}
그렇다면, 이 파일을 어떻게 저장하면 될까?
JSON 파일 저장 디렉토리
전역적으로 설정하고 싶다면, ~/.cursor/mcp.json으로 저장한다. 해당 프로젝트에만 적용하고 싶다면 .cursor/mcp.json에 저장하면 된다.
앞서, MCP를 사용하기 위해서는 서버가 필요하다고 했다. 직접 MCP 서버를 띄워서 피그마와 cursor를 연동할 수도 있고, 이미 있는 서버를 지정하여 사용할 수도 있다. 일주일 정도 전에 Cloudflare에서 13개의 MCP 서버를 제공했다.
- [Cloudflare] thirteen mcp : https://blog.cloudflare.com/thirteen-new-mcp-servers-from-cloudflare/
Thirteen new MCP servers from Cloudflare you can use today
You can now connect to Cloudflare's first publicly available remote Model Context Protocol (MCP) servers from any MCP client that supports remote servers.
blog.cloudflare.com
해당 레퍼런스를 확인해보면, mcp.json에 간단하게 추가하는 것으로 MCP를 사용할 수 있도록 되어있어, 원하는 MCP를 가져다 사용하면 된다. 깃허브의 README를 확인하면 다음과 같다.
이 외에도 MCP를 제공하는 서비스들이 점점 늘어나고 있다. 클라우드플레어같은 경우에는 자체적으로 제공하지만, 직접 호스팅해서 연동해야하는 것들도 꽤 있다.
마치며
MCP 버전 Github인 Smithery
이러한 MCP를 공유할 수 있는 사이트도 만들어졌다.
- smithery : https://smithery.ai/
Smithery - Model Context Protocol Registry
@isnow890/naver-search-mcp A MCP server based on Naver Search API. Enables searching various content types (news, cafe, blogs, shopping, web search, etc.) and analyzing search/shopping trends via DataLab API. Shopping analytics provide consumer behavior pa
smithery.ai
인공지능이 정말 뜨겁게 발전하고 있어, 반복적인 구현 작업이나 프롬프트 엔지니어링을 적절히 한다면 꽤 높은 수준의 설계와 구현까지 가능한 것 같다.
인공지능과 개발자가 경쟁할 수 있을까? 하는 이야기가 많은데, 개인적으로는 인공지능과 경쟁은 당연히 쨉도 안되고.. 아마 인공지능을 다루는 개발자와 경쟁을 해야할 생각을 하지 않을까 한다.
따라서, 커서 관련된 내용으로 인공지능을 잘 다루는 개발자가 되는 것이 기본이고, 그 외에 다른 역량을 채워야 더 좋은 개발자가 될 수 있을까? 하는 생각으로 최근에는 기술적인 책을 많이 읽고 있다.
'Developer' 카테고리의 다른 글
codex, 터미널에 탑재된 LLM (0) | 2025.05.21 |
---|---|
인증과 인가 구현 방법의 표준 ( feat. RFC, JWT ) (3) | 2024.12.05 |
git, github에 대해서 (0) | 2024.01.21 |
vi 명령어 및 설정 (1) | 2023.12.11 |
인증과 인가에 대해서 (2) | 2023.10.02 |