Cursor란 무엇인가
- Cursor는 Visual Studio Code(VS Code)의 포크로, 코어 UI에 Large Language Model (LLM) 기반 기능이 통합되어 있음
- 독점 제품이며 무료 계층과 구독 옵션이 있음
- 주요 기능:
- Tab 자동 완성: 구독자에게만 제공되는 코드 자동 완성 및 다음 추천 동작으로 이동하는 독점 미세 조정 모델
- 인라인 편집: 무료 및 유료 사용자가 사용할 수 있는 채팅 기반 인터페이스로 diff 뷰를 사용해 선택한 코드 편집
- 채팅 사이드바: 무료 및 유료 사용자가 사용할 수 있는 채팅 기반 인터페이스로, 더 긴 토론을 위한 공간 제공
- Composer: 여러 파일에 걸친 대규모 리팩터링을 위해 설계된 채팅 기반 인터페이스로, 무료 및 유료 사용자가 사용 가능
Tab 자동 완성
- 코드 작성 시 가장 자연스럽게 사용할 수 있고 시간을 가장 많이 절약할 수 있는 기능
- 한 줄, 여러 줄 또는 전체 함수에 대한 완성을 제안할 뿐만 아니라 다음 편집을 위해 이동할 다음 줄도 제안
- Tab 키를 반복적으로 눌러 파일 전체에서 관련 변경 사항을 자동 완성할 수 있음
- 코드 리팩터링 도구로 사용 가능
- 때로는 독립적으로 버그를 찾아 수정을 제안하기도 함
- 문자열을 따옴표로 묶으면 내용을 적절히 이스케이프함
- 함수 시그니처와 선택적 docstring만으로 전체 함수를 작성할 수 있음
- 완성 제안이 매우 빠름
- 단점:
- 제안을 제때 보지 못하고 계속 입력하면 완성 제안이 사라짐
- 잘못된 완성을 의도적으로 거부했는데, 나중에 다른 완성을 수락하면 이전에 거부한 제안이 조용히 적용되는 경우가 있음
인라인 편집, 채팅 사이드바, Composer
- 기반 모델(주로 Claude 3.5 Sonnet 사용)과의 상호 작용은 매우 유사하며, 사용자 인터페이스에서 차이가 있음
- 인라인 편집은 Ctrl-K/Cmd-K를 눌러 호출하고, 원하는 변경 사항을 입력한 후 수락하거나 거부할 수 있는 diff를 얻을 수 있음
- 채팅 사이드바는 Ctrl+L/Cmd+L로 열고, 여러 번 대화할 수 있는 더 많은 공간을 제공함
- Composer는 여러 파일에 걸친 리팩터링을 위해 설계되었으며, 한 번에 하나씩 여러 파일 diff를 검토할 수 있는 더 나은 사용자 경험을 제공함
.cursorrules 파일
- 작업 공간 루트에 위치한 .cursorrules 파일의 내용은 항상 추가 컨텍스트를 제공하기 위해 다양한 채팅 양식에 포함됨
- 저장소의 코딩 표준, 공통 패키지 및 기타 문서를 LLM에 알리는 데 사용
- Cursor의 큰 장애물 중 하나인 편집 중인 파일에 이미 존재하지 않는 한 코딩 스타일과 패턴을 따르지 않는 문제를 해결하는 데 도움이 될 수 있음
- 현재 작업 공간당 하나의 파일만 있어서 여러 언어로 코드를 포함하는 모노레포는 작고 일관되게 스타일이 지정된 코드 세트를 가진 작은 저장소보다 설정하기 어려움
- .cursorrules 파일은 채팅 양식에만 사용되며 탭 자동 완성에는 사용되지 않음
워크플로우의 변화
- 코드를 더 빠르게 작성할 수 있다는 것이 가장 흥미로운 점은 아님
- 실제로 코드 작성 자체가 병목 현상은 아님
- 진정한 가치는 코드 작성 방식을 변경하는 데 있음
- 변경된 사항:
- 새로운 라이브러리나 프레임워크를 찾을 가능성이 훨씬 줄어듦
- 작은 유틸리티의 경우 범용 라이브러리를 가져오는 것보다 LLM이 맞춤형 요구 사항에 맞게 작성하도록 하는 것이 더 쉬움
- 많은 라이브러리는 상용구를 줄이기 위해서만 존재하는데, LLM이 대신 해줄 수 있으므로 비용이 그만큼 가치가 있는 것 같지 않음
- 자체 코드에서 DRY(Don't Repeat Yourself) 원칙을 고수하는 것에 대해 덜 걱정함
- 조기에 추상화를 정의하면 나중에 많은 기술 부채가 생길 수 있음
- 함수나 클래스로 만들려고 하지 않고 다른 코드를 참조하여 많은 코드를 만들 수 있으므로 유연성이 더 높아짐
- 덜 익숙한 언어나 프레임워크를 사용할 의향이 훨씬 높아짐
- 예를 들어 R을 사용하는 데 어려움이 있었지만, 이제는 원하는 시각화를 설명하면 올바른 데이터 조작과 ggplot 시각화를 얻을 수 있음
- 더 큰 코드베이스에 통합하기 전에 작은 구성 요소를 빠르게 반복하고 있음
- LLM의 한계를 해결하기 위한 것이기도 하지만, 이전에는 고려하지 않았던 흥미로운 작업 방식도 열어줌
요약
- 현재로서는 Cursor가 LLM 코딩 어시스턴트의 잠재력을 보여주는 가장 좋은 예
- 이러한 유형의 도구가 어떻게 가치가 있을지 탐색하고 싶다면 Cursor를 사용해 보는 것이 좋음
GN⁺의 의견
- Cursor는 LLM 기반 코딩 도구의 잠재력을 보여주는 좋은 사례로 보임
- 특히 탭 자동 완성 기능은 코드 작성 시 자연스럽게 사용할 수 있고 시간을 많이 절약할 수 있어 매력적
- 채팅 기반 기능들도 리팩터링이나 코드 변환 등에 유용하게 사용될 수 있을 것 같음
- 다만 아직 초기 단계인 만큼 한계점도 있어 보임
- 일관된 코딩 스타일 적용이 어렵다는 점
- 모노레포 등 복잡한 프로젝트 구조에서의 사용성 문제
- 무료 사용자와 유료 사용자 간 기능 차이가 명확하지 않은 점 등
- 유사한 기능을 제공하는 다른 도구로는 GitHub Copilot, Tabnine, Kite 등이 있음
- 각 도구마다 장단점이 있으므로 프로젝트 특성이나 개인 선호도에 따라 선택하면 좋을 듯
- LLM 기반 코딩 도구 도입 시에는 다음과 같은 사항들을 고려해 볼 만함
- 개발팀의 수용성: 새로운 도구 도입에 대한 거부감은 없는지
- 학습 비용: 도구 사용법을 익히는 데 얼마나 시간이 걸릴지
- 유지보수성: 도구로 생성한 코드를 이해하고 유지보수하기 쉬운지
- 코드 품질: 실제로 코드 품질 향상에 도움이 되는지
- 비용 대비 효과: 생산성 향상 효과가 도입/유지 비용을 상쇄할 만한지