[Cursor] 커서로 Slack 액션 아이템 생성 봇(feat.llm) 만든 후기
Cursor로 Slack 액션 아이템 생성 봇 만든 후기
Cursor는 VSCode에 AI를 결합한 형태의 개발툴이다
Slack 봇은 처음 만들어보는 데 Cursor로 개발하니까 1-2시간 정도 걸린 것 같다
만들게 된 배경
Cursor로 얼마나 빠르게 무언가를 만들어볼 수 있을지 궁금했음.
슬랙 봇처럼 외부 API와 연동하는 작업은 문서나 예제를 찾아보면서 만들 수는 있지만, 평소에 하던 작업이 아니다 보니 꽤 귀찮게 느껴졌음.
게다가 메신저에서 "~~해주세요" > "네 알겠습니다" 식으로 대화가 지나가면, 나중에 뭘 하기로 했는지 기억 안 나는 경우가 많았음.
그래서 이런 요청들을 자동으로 정리해주는 봇이 있으면 좋겠다고 생각했음.
마침 Cursor로 실험해보기 좋은 주제라고 판단해서 시작하게 되었음.
먼저,
완성 레포지토리
GitHub - MinkyungPark/slack-action-items-bot
Contribute to MinkyungPark/slack-action-items-bot development by creating an account on GitHub.
github.com
액션 아이템 생성 예시
이런 식의 대화가 슬랙에서 오갈 때
봇을 호출하면 #action-items-alarm 채널에 해야 할 일을 정리해서 자동으로 올려준다.
누가 해야 하는 일인지, 마감 기한은 언제인지 등을 추론해야 하기 때문에 사용하는 LLM에 따라 성능 차이가 있다.
Huggingface llm
# mistralai/Mistral-7B-v0.1
# meta-llama/Llama-2-7b-chat-hf
# TheBloke/Llama-2-7B-Chat-GGUF
# beomi/KoAlpaca-Polyglot-12.8B
그리고, gpt-4o-mini 테스트 해봤는데
액션 아이템의 책임자나 마감일 파악에서 gpt-4o-mini가 다른 모델들보다 훨씬 안정적으로 잘 뽑아줬다.
gpt-4o-mini 하루에 10번 정도 호출한다고 해도, 한 달 기준 약 200원 정도 나올 것 같다.
구현은 두 가지 버전으로 나눠서 진행했다.
1. OpenAI API 사용하는 버전
2. Hugging Face 모델 로컬로 돌리는 버전
먼저, 이전에는 Cursor를 사용해본 경험이 없었다.
Agent Mode가 0.46 버전 이후로 크게 업데이트되기 전에는, 툴 연동 방식도 복잡했고, Chat 모드와 Composer 모드가 나뉘어 있었으며 참조할 파일이나 폴더도 @를 붙여서 직접 지정해줘야 했던 것으로 보인다.
하지만 지금의 Agent Mode는 훨씬 다르다. 그냥 자연어로 원하는 작업을 입력하면, 필요한 파일을 알아서 찾아주고, 내부 검색도 자동으로 수행해준다.
명시적으로 뭘 참조하라고 지시하지 않아도, 문맥을 파악해서 적절히 대응해주는 느낌이 있다.
이번에는 Cursor 인터페이스만 간단히 파악한 뒤 아무런 코드도 없는 '무(無)'의 상태에서 자연어만으로 개발을 시작해보았다.
처음 Cursor를 설치할 때 언어를 한국어로 설정한 걸 까먹고 자연어 명령도 한국어로 해도 되는지 확신이 없어서 일단 영어로 사용했다.
그런데 영어로 질문을 해도 대답은 한국어로 해준다.
가장 처음 시도한 건 원하는 기능을 나열하고, 프로젝트 기본 구조를 만들어달라는 요청이었다.
Cursor는 먼저 필요한 dependencies를 정의해줬고, 그 다음으로 main API 파일을 생성해주는 흐름으로 안내해주었다.
Cursor가 제안한 코드가 마음에 들면 Accept 버튼만 눌러 반영하면 된다.
그러면 내가 현재 접속해 있는 폴더에 requirements.txt, app.py ,, 같은 파일이 자동으로 생성된다.
ChatGPT로 코딩할 때처럼 코드를 복사해서 붙여넣는 번거로움이 없다.
Slack API 관련 패키지를 사용할 때 처음에는 패키지 이름이 slack-sdk였던 것 같았다
그래서 Cursor에게 "slack-bolt가 아니라 slack-sdk가 맞는 것 같다"고 이야기했더니
Cursor는 바로 코드를 수정해주려고 하면서도 slack-bolt는 slack-sdk를 기반으로 한 더 편리한 프레임워크라는 설명도 함께 제공해주었다.
이 설명을 듣고 나서 실제로 확인해보니 실무나 예제 코드에서는 slack-bolt를 사용하는 경우가 더 많았다.
이런 부분에서는 Cursor가 추천한 방향이 더 적절했다
그 다음에 그냥 무지성으로 나 이제 뭐해야 돼? 물어봤다
내가 물어보면서도 이건 좀 심하다 싶었는데
Cursor는슬랙 API 웹사이트 링크까지 걸어주면서 해당 페이지에 들어가서 어떤 작업들을 해야 하는지 차근차근 안내해줬다.
원래 같으면 위 그림 처럼 "Slack API" 관련해서 검색하면서 블로그 글 몇 개 뒤적이고, 예제 따라하면서 하나씩 확인했을 내용이다.
그런데 그런 과정 없이도 바로 다음 단계로 넘어갈 수 있었다.
그리고 또 이상한데서 헤메고 있으니까 뭐가 필요 없고 뭐가 필요한지 알려줬다
결론 적으론 Cursor가 알려준 권한 중 이름이 틀린 것도 있고 더 추가해야하는 것도 있었지만 전반적으로 어떤 권한을 왜 설정해야 하는지 알려줘서 편했다. 저 내용을 기반으로 뭐가 더 필요할까 생각하면서 권한을 쭉 추가했다.
권한만 잘 설정하고 저장하라는 토큰만 잘 저장하니까 app이 잘 실행됐다.
이런 식으로 수정된 코드는 파일 안에서 git commit 내역처럼 바로 비교해볼 수 있다.
수정된 부분을 눈으로 확인하고, 내용이 마음에 들면 "Accept" 버튼만 누르면 반영된다.
몇 번 써보다 보니 느낀 점이 하나 있다.
무조건 Accept부터 누르면 안 된다.
잘 보고 맥락에 맞는지, 잘 동작하는지 확인한 다음에 Accept해야 한다.
무지성으로 계속 Accept를 누르다 보면 코드나 문맥이 꼬이기 시작하고 그 이후부터는 Cursor도 제대로 된 답변을 주지 못하는 경우가 생긴다.
main API 동작 파일에 logging 함수를 구현하라고 직접 지시하지 않아도 된다.
예를 들어, "@app.py에 봇 시작·종료, 언급 이벤트, 채널 스레드 정보 이벤트 관련 로깅 함수를 구현하라" 같은 식으로 자세하게 요청하지 않아도 된다.
그냥 "어랏 로깅 함수가 없네?" 정도로만 얘기해도 Cursor는 필요한 로깅 포인트를 스스로 파악해서 적절한 위치에 로깅 코드를 만들어준다.
꼭 명령형으로 써야 이해하는 게 아니라 마치 사람처럼 뉘앙스를 이해하고 그에 맞는 작업을 제안해준다.
그리고 또 인상 깊었던 점은 Cursor가 본인이 수정하거나 생성한 코드를 다시 한번 보고 점검까지 해준다는 점이다.
코드를 던져주고 끝나는 게 아니라, 이어지는 흐름 속에서 방금 작성한 코드가 적절했는지 스스로 검토까지 해준다.
윗 블록도 Cursor가 제안한 코드였는데 바로 이어서 "이 방식이 괜찮은지" 다시 확인해주더니 자기 자신이 방금 만든 코드지만 적절하지 않다고 판단하는 모습도 있었다.
그리고 자주 사용하지만 항상 찾아봐야 하는 명령어들도 Cursor는 바로 알려주고, Run command 버튼만 누르면 실행까지 해준다.
예를 들어 git 관련 명령어나 터미널에서 설정해야 하는 커맨드들도 일일이 검색해서 복붙할 필요 없이 바로 실행할 수 있다.
이 덕분에 검색창을 왔다 갔다 하는 시간이 엄청 줄어든다.
리듬이 끊기지 않고 그대로 작업을 이어갈 수 있다.
또한 명령어를 실행한 뒤 결과 값이나 로그가 어떻게 나와야 "정상적으로 실행된 것"인지도 함께 알려준다.
단순히 명령어만 던져주는 게 아니라, 그 명령어가 기대한 대로 동작했는지 확인할 수 있게 도와준다.
Cursor는 단순히 코드만 작성해주는 도구가 아니다. 프롬프트 예시나 문서까지도 함께 작성해준다.
개발을 하다 보면 코드보다 이런 주변 작업들이 더 귀찮게 느껴질 때가 많아서 이 점이 커서의 큰 장점 중 하나이지 않을까 생각한다.
또 하나 편리했던 기능은 수정할 부분을 자동으로 제안해주는 점이다.
예를 들어, '액션 아이템'이라는 표현이 적절하지 않은 것 같아서 '액션 아이템'을 → '할일'로 바꿨는데
하나만 수정했을 뿐인데도, Cursor가 아래에 남아있는 '액션 아이템'이라는 단어도 같이 바꾸는 게 좋겠다고 제안해주었다.
이런 식으로 아주 사소한 것까지 알아서 챙겨주다 보니 결과적으로는 내가 직접 작성한 코드는 거의 없었다.
종속성 패키지를 하나 추가하면 파일에 추가하는 것만 제안해주는 것이 아니고
이후 해야하는 명령어들까지 같이 제안해준다
물론 완벽하다고만 말할 수는 없다. 예를 들어 이번 프로젝트에서는 Langchain을 전혀 사용하지 않았는데,
Cursor가 처음부터 끝까지 Langchain 관련 코드를 계속 남겨두는 일이 있었다.
이런 점에서 보면 할루시네이션이 아예 없다고는 할 수 없다.
특히 처음 생성된 코드의 흐름이 잘못 잡히면 그 방향성을 끝까지 유지하는 경우가 있어서 중간에 수동으로 끊어줘야 할 때도 있다.
여기까지는 Curso로 간단한 테스트를 진행한 내용이었고
다음편에는 이에 대한 후기랑 생각을 남기려고 한다
'SW 개발' 카테고리의 다른 글
알고리즘은 재밌어 - 알고리즘 (0) | 2025.01.31 |
---|---|
알고리즘은 재밌어 - 파이썬 (0) | 2025.01.15 |
[개발자 상식] 개발자가 되기 위한 첫 걸음을 떼어줄 책 (1) | 2023.03.15 |
[Node.js로 서버 만들기] 책을 출간하였습니다. (0) | 2021.12.19 |
[JS] 자바스크립트 예외처리 (0) | 2021.02.01 |
소중한 공감 감사합니다