Cursor와 Vibe coding??
AI가 모든 분야에 큰 변화를 가져오고 있지만, 이를 가장 크게 느끼는 직업은 개발자가 아닐까 싶습니다.
저는 아직 AI와 그렇게 친하지는 않습니다. 지금까지 커리어에서 업무들은 AI를 사용할 수 없는 환경에서 이루어진 경우가 많았고, 커리어도 DevOps 엔지니어 쪽으로 진행을 하면서 코드 작성 시간이 줄어들기도 했습니다. 하지만 현재 회사의 도메인은 AI이기 때문에 반드시 관련 지식을 알아야 하고, 점점 일부러 의식하지 않아도 AI에 의해 개발자의 판도가 변화하고 있는 걸 느끼고 있습니다.
Cursor는 현재 제가 유일하게 유료로 사용하는 AI 서비스인데요,
(프로모션으로 Perplexity도 사용하지만 그건 예외로 하고)
개인적으로는 상당히 만족도가 높고, 가능성도 무궁무진하다고 생각합니다. 이번에는 제가 Cursor를 사용하면서 느낀 점과 최근 생각들을 앞으로의 다짐을 겸해서 간단히 적어 두려고 합니다.
Tab, Tab, Tab
코딩 AI의 기능 중에 가장 혁신적이라고 생각하는 것을 하나 꼽으라고 한다면, 저는 바로 Tab 자동완성을 꼽을 겁니다.
주석만 작성해서 코드를 자동 완성하고, 작성한 코드의 잠재적인 문제를 수정하거나 포맷을 맞추는 작업도 가능합니다.
이 기능이 "Tab" 키로 작동하는 것도 상당히 직관적입니다. 코드를 빠르게 넘기면서 반복 작업이 가능해지기 때문에 생산성이 크게 높아집니다.
이 기능은 다른 AI 도구에서도 제공하고 있고 객관적인 지표로 비교할 수는 없지만, Cursor를 사용했을 때 가장 만족스러웠습니다. 특히 코드베이스 전반을 이해하고 작업을 수행한다는 느낌을 많이 받았습니다. 제가 Cursor를 유료 결제한 시기가 작년 11월인데, 정말 아무것도 모르는 상태로 이 Tab 기능 때문에 유료 결제를 했다고 봐도 과언이 아닙니다. AI 사용량이 많지 않은 입장에서 모델을 선택해 사용할 수 있고, Tab 기능에 대한 만족도가 매우 높아 "유료 서비스를 하나 쓸 거면 이거다!"라고 생각했던 거죠.
이제는 떼려야 뗄 수 없는 기능이 되어 의존도가 매우 높아졌고, 문서나 코드를 작성할 때 포맷을 미리 정의하고 맞추게 되는 습관도 생겼습니다.
Cursor가 아니더라도, 꼭 무료 버전이라도 사용해 보시길 추천합니다.
Obsidian과 Cursor
Cursor 이야기를 하는데 왜 Obsidian이 나오는지 궁금해하실 수도 있을 것 같네요.
하지만 꾸준히 써 보면서 Cursor와 Obsidian의 궁합이 매우 좋다는 것을 느끼고 있습니다. 오히려 요즘 Obsidian은 거의 뷰어 느낌이고, 대부분의 문서 작업은 Cursor에서 하고 있습니다.
Obsidian 문서는 고유 표현이 몇 개 있지만 기본적으로 마크다운 형식입니다. 그리고 AI가 가장 읽기 쉬운 형식이기도 합니다.
그렇기 때문에 Cursor는 기본적으로 코드 IDE이지만, 마크다운 문서도 잘 읽어 활용할 수 있습니다.
이 아이디어는 구요한 교수님이 촬영하신 YouTube 영상에서 결정적인 영감을 받았습니다. 지식 베이스가 충분히 쌓여 있다면, Cursor가 다른 문서를 참고하여 답변을 내거나, 내가 원하는 형태로 문서를 작성하도록 할 수 있다는 가능성을 보았기 때문입니다.
물론, 이를 100% 활용하기 위해서는 Obsidian의 활용도를 높이는 것이 중요합니다.
마치 코드의 Convention을 맞추는 것처럼 문서의 포맷을 정의하고, 관련된 문서끼리는 링크를 설정해 두는 등 전처리를 해 두었을 때 효과는 극대화됩니다.
또한, 이렇게 사용하면서 느낀 점은 문서를 1곳에 모았을 때 상당히 효율을 높일 수 있다는 것입니다. 지금까지 여러 곳에 문서를 분산시켜 두는 경향이 있었는데, 이를 계기로 마크다운 문서들을 Git Submodule로 모으게 되었습니다.
Cursor Rules와 Auto-run 모드 (구 YOLO 모드)
이 부분은 저도 최근에 알게 되어 사용하고 있는 기능들입니다.
회사의 다른 엔지니어 분에게 사용 사례를 듣고 적용해 보았는데, 생각보다 잠재력이 커서 충격을 받았던 기능이기도 합니다.
Cursor Rules는 프롬프트 형식으로 규칙을 지정하여 Cursor에게 지시할 수 있는 기능입니다.
전역 규칙을 지정하여 모든 작업에 적용할 수도 있고, .cursor/rules
폴더에 규칙 파일을 두어 특정 프로젝트에만 적용할 수도 있습니다.
보통은 프로젝트별로 코드가 다르기 때문에 후자를 더 많이 사용하게 되더군요.
Rule을 어떻게 작성하는지 알아보기 위해 Cursor Directory 등 몇 가지 예시를 찾아보았는데, 일반적인 AI 프롬프트와 큰 차이가 있어 보이지는 않았습니다. 다만 사용해 보니 생각보다 상세하게 작성을 해야 예기치 않은 동작을 막고, 더 정밀한 작업을 할 수 있었습니다. 어딘가에서 신입을 가르치는 것처럼 프롬프트를 작성하라는 이야기가 있었는데, 아주 정확한 비유인 것 같네요.
Auto-run 모드는 Cursor에게 커맨 드 실행 권한을 줄 수 있는 기능입니다.
Cursor에서 Agent 모드로 전환했을 때 사용할 수 있습니다. (이전에는 Composer였는데 변경되었습니다.)
Cursor 설정에서 허용 또는 금지할 명령어나 관련 설정을 수행할 수 있습니다. 원하는 명령어를 설정하고, 특히 Delete file protection
은 파일을 없애는 작업이기 때문에 옵션을 활성화해 파일 삭제를 방지하는 것을 권장합니다.
아래는 예시로 Cursor에게 커맨드를 실행해서 정보를 가져오도록 한 것입니다.
지금은 간단한 예시이지만, 스크립트나 코드를 작성해서 그것을 직접 돌리게 하는 것도 가능합니다.
실제로 아직 세세한 검증이 필요하지만 Jira 등의 협업 도구에서 이슈 정보를 읽어 오고, 그것을 기반으로 AI가 작업을 수행해 PR까지 올리게 할 수도 있었습니다.
그 외
- Cursor를 사용할 때 아직은 불편한 점이 몇 가지 있습니다.
- 파일 경로가 명확하지 않으면 자꾸 루트 폴더에서 작업하려는 경향이 있습니다.
cursor-small
,gpt-4o-mini
같은 모델은 Agent 모드가 아직 제대로 동작하지 않습니다.- 단시간에 많은 코드 변경이 일어나는 경우 이전 코드베이스를 참조할 때가 있습니다. 아마도 코드베이스를 미리 indexing 해둔 것이 갱신되지 않아 생기는 문제로 보입니다.
.cursor/rules
폴더 아래의 규칙을 개선하도록 지시할 수는 있지만, 해당 파일을 직접 업데이트하지는 못합니다. (참고)
그래서 3월 기준 지금은 복사/붙여넣기를 해야 합니다. 😭
- Cursor 대화 로그를 공유하는 방법이 있습니다.
- 일단은 VS Code 확장 프로그램이 사용은 가장 편합니다.
- 확장 프로그램이나 다른 코드를 보면 마크다운 혹은 다른 포맷으로 채팅 로그를 저장할 수 있는데, 원리를 알고 싶다면 이 코드에서 대략 확인이 가능합니다.
로컬에 있는
.vscdb
파일을 파싱 하는 방식인 것을 확인할 수 있습니다.
Vibe coding에 대한 생각
최근에 이렇게 AI를 통해 프롬프트 또는 자연어로 코드를 작성하는 것을 Vibe coding이라는 단어로 정의하는 것 같습니다.
아직 Vibe coding에 익숙하지는 않습니다만, 생산성에 매우 큰 도움이 되는 것은 분명합니다. 지금까지 제 작업에는 수작업의 비중도 높았는데, 세세한 작업까지 자동화하여 사용하는 사례를 온라 인에서 종종 볼 수 있고, 주변에서도 꽤 전해 들었습니다. 최근에 다른 엔지니어 분과 이야기를 나누어 보니 Agent 2개를 두고 토론을 시키는 경우도 있었고, 사용하는 개발자의 경험이 많을수록 AI가 만드는 코드도 더 수준이 높아지고 견고해질 것이라는 생각이 들었습니다.
다만 아직 시니어가 아니라고 생각하는 입장에서는, 일부러 AI에게 위임하는 것과 일부러 수작업을 하는 것이 둘 다 필요하다는 생각이 들었습니다.
-
주변에서 아직 AI를 잘 활용하지 않으시는 분들은 AI가 코드를 짜는 것이 답답해서 직접 짜게 된다는 이야기를 많이 하시더군요.
하지만 Vibe coding이 아니어도 AI를 활용하는 능력은 길러 나가야 하고, AI를 활용하는 것이 답답해도 일부러 내가 직접 작업을 하지 않고, AI에게 모두 시키는 과정이 필요하다는 생각이 들었습니다.
시간이 오래 걸려도 결국 작업을 AI에게 모두 넘길 수 있다는 것은 그만큼 프롬프트를 작성하는 능력이 향상되었다는 것이고, 더 나아가서 전체적인 구조나 디테일을 모두 AI, 또는 다른 사람에게 이해시킬 수 있다는 의미라고 보기 때문입니다. 이러한 부분을 발전시켜야 시니어, 혹은 AI에게 대체되지 않는 개발자가 될 수 있다고 생각합니다. -
하지만, 한 편으로는 AI가 짜는 코드를 그냥 넘기면 안 된다고 생각합니다.
Cursor를 쓰다 보면 제가 전혀 모르는 식으로 코드를 짜는 경우도 있었고, 오류가 있는 코드를 짜는 경우도 있었습니다. 이러한 경우는 분명히 이것이 어떤 코드인지 알고, 문제가 있다면 고치는 작업이 동반되어야 합니다. 나중에도 필요하다면 문서로 남겨 두고, 공유도 할 수 있어야 합니다. 이렇게 지식을 쌓아 가는 것까지 자동화에 의존한다면, 결국 기초 지식을 포기하는 것이 됩니다.
비판적으로 AI의 코드를 바라보면서 시간을 소비하는 것이 지식을 쌓을 때는 중요하다고 생각됩니다.
이 2가지를 염두하면서 AI를 활용하는 것이 개발자로서 성장하는 방법이라는 생각이 들었습니다. 이로 인해 오히려 시간을 더 많이 소비하게 될 수도 있는데, 필요한 비용이라고 보고 있습니다.
마치며
확실히 최근에 AI가 IT 환경에 직접적으로 관여하게 되면서 저도 다소 혼란스럽고, 생각이 많아지는 것 같습니다. 하지만 모두가 혼란스러울 것이고, 제가 지금까지 했던 여러 경험들을 더 확실한 장점으로 쓸 수 있겠다는 생각도 들기는 합니다.
앞으로 AI를 업무나 사이드 프로젝트에 적극적으로 활용해 보면서 저에게 맞는 방법을 찾으려고 합니다. 충분하게 시간을 가지며 코드 전반을 바꾸고, 전체적으로 갈무리하는 것이 목표입니다.