깃허브에서 Spec Kit을 발표했다. 예전에는 Copilot Workspace라고 해서 웹페이지에서 요구사항을 입력하고 실행계획을 짜고 코드를 적당히 만들어서 PR로 제출해주는 기능이 맛보기로 잠깐 나왔다 종료됐는데, 이번엔 그 기조를 유지하면서 '봇에게 일정한 동작 규칙을 파일로 부여하는 게 좋다'거나 '큰 요구사항 하나를 주기보다는 작은 단위로 쪼개서 주라'거나, '봇에게 매번 채팅으로 입력하는 것보다는 작업 지시서를 주고 그걸 따라 진행하게 만드는 게 좋다'는 그간의 활용법을 일정한 틀로 뽑아냈다.
Copilot Workspace 당시에 잘 썼던 기억이 있어서 Spec Kit도 좋은 이미지고, vscode에서 개인 프로젝트의 명세만 작성해보았다. LLM의 context 제한에 맞춰 작업 범위를 줄이면 좋고 따라서 에이전트도 역할별로 나누라거나 작업대상 파일을 나누라거나 하는 얘기를 볼 때면 이론적으로 그렇구나 하고 넘어갔었는데 vscode에서 /specify 명령을 여러 번 입력하면서 명세의 틀이 잡혀가는 걸 보니 그게 이런 얘기였구나 싶다.
AI 활용법 경험담 중에 '깃허브 이슈에 할일을 쭉 적어두고 여러 AI CLI의 무료분을 활용해서 자동적으로 처리하게 만든다'는 얘기가 꽤 솔깃했는데 Spec Kit도 비슷하게 '명세만 잘 작성해두고 시작!이라고 외치면 이런저런 AI의 무료분을 활용해서 매일 조금씩 개발'하는 방식으로 쓰일 수 있을까 해서 기대가 된다. (어떤 의미론 '선언적 프로그래밍'이라고 해야 할까?)
vscode의 github copilot 창에서 써봤다.
1. 파일 바꾼 걸 매번 승인하라고 뜨는데 채팅 안에서의 자동 동작은 파일이 이미 승인되었다고 전제하고 수행되어서 '이상하네 파일이 없어요'하고 멈추는 경우가 종종 생겼음. 찾아보니 chat.editing.autoAcceptDelay 설정이 0으로 되어서 비활성화였고 1로 바꾸니까 생성 직후에 바로 승인되어서 이어지는 명령들이 부드럽게 진행됨.
2. 작업을 하다 보면 쉘로 npm, npx, git 같은 명령을 수행하게 되는데 이것도 자꾸 승인하라고 떠서 결국 chat.tools.terminal.autoApprove에서 rm 같은 몇 가지만 제외하고 /.*/로 전체 허용하고 말았다. git add && git commit 같이 두 명령을 붙여서 실행하는 경우에 vscode 설정의 설명으로는 git add와 git commit이 허용되어 있으면 당연히 쌍으로 붙은 것도 허용될 것 같았는데 실제로는 매번 물어왔다. 이건 전체허용 뒤에도 여전히 물어서 뭐가 문제인지 오리무중.
3. 자동 생성된 텍스트가 vscode에서 자동으로 formatter 처리되어서 약간씩 문법만 달라지는 경우가 생기는데 이건 설정은 못 봤고(FIXME), 채팅에 '생성한 파일은 lint도 자동으로 한 다음에 커밋'하라고 지시하니가 그렇겠다고 하고 실제로도 그렇게 동작했음 (next.js 초기화 과정에서 선택한 biome를 매번 파일마다 실행하는 방식)
4. @/xyz/AnyFile 같은 경로를 인식하지 못해서 일단 수동으로 상대경로로 다 바꿔줬는데 이건 나중에 일괄로 바꾸면 되니까. 자동 생성 때 뭐가 문제였는지도 나중에.
쭉 진행해보니 자잘한 빨간줄들은 대충 해결하면서 tasks.md의 끝까지 진행했다고 나온다. 막상 하고 보니 UI 쪽은 아예 최초 명세에서부터 빠져 있어서 E2E 테스트와 함께 덧붙여가야 하는데, 이 과정이 모호하게 느껴진다. 아마 채팅창에 직접 이것저것 넣는 부분을 /specify와 /plan으로 녹여내서 명세서를 보완해야 할 것 같긴 한데. 그냥은 반영 안 하고 꼭 spec.md 파일을 직접 열어둔 상태에서 /specify 문구를 넣어야 반영하는 식인가?
자동 변경이 아니거나 하다가 잘 안 된 찌꺼기들은 자동 커밋이 안 되고 남는 것 같은데 이게 좀 번거롭다. 커밋하라고 명령하면 커밋 메시지까지 자동으로 만들어서 넣으니까 별 문제는 아니지만.
근데 깃허브 코파일럿이 이렇게 쿼터를 많이 주나? 엄청 많이 쓴 건 아닌 것 같지만 그래도 중간에 코파일럿 무료 허용량 다 썼다고 멈출 줄 알았는데, 3시간 좀 넘게 이것저것 해서 next.js로 URL 2개 접속되는 거 볼 때까지 중단없이 잘 진행이 된다.
https://github.com/keizie/wiki-engine