스펙 극대화: AI 코딩 정신착란을 극복하는 법
AI 코딩 에이전트가 발생시키는 잦은 오류와 컨텍스트 제한 문제를 극복하기 위해 체계적인 문서화(Spec)의 중요성을 강조하는 글입니다. 저자는 단순한 마크다운 문서를 넘어, YAML 기반의 구조화된 스펙을 작성하고 이를 오픈소스 툴킷(Acai.sh)과 결합하여 에이전트를 통제하는 '스펙 주도 개발' 방식을 제안합니다.
메인 콘텐츠로 건너뛰기 Acai.sh 홈페이지 문서 API 레퍼런스 블로그 검색... 검색... 탐색 Specsmaxxing 앱 (로그인) GitHub 블로그 블로그 블로그 홈 이 페이지에서 이 광경이 익숙한가요?
최악의 슬롭(Slop) 비행기를 타고 날아가면서 비행기를 조립하기 마크다운(Markdown) 속에서 꿈꾸기 AI를 위한 인수 기준 (ACAI) Acai.sh - 오픈소스 툴킷 어떻게 작동하나요 1단계 - 명세(Specify) 2단계 - 배포(Ship) 3단계 - 검토(Review) 4단계 - 반복(Iterate / repeat) 미래 내다보기 사고 실험 -> Specsmaxxing에서 Testmaxxing으로 -> Testmaxxing에서 반응형 소프트웨어 팩토리까지 다른 스펙 주도 개발 도구들과의 비교 GitHub SpecKit OpenSpec Kiro Traycer.ai Acai.sh가 마음에 들지 않을 수 있는 이유 별로냐고요? 문서 색인 https://acai.sh/llms.txt 에서 전체 문서 색인을 가져오세요. 더 자세히 살펴보기 전에 이 파일을 사용하여 사용 가능한 모든 페이지를 확인하세요.
이 광경이 익숙한가요? "우와. 클로드(Claude). 놀랍네. 전체 기능이 훌륭하게 작동해. 하지만 내가 아주 중요한 엣지 케이스(예외 상황)를 언급하는 걸 깜빡했네." "맞습니다! 바로 수정하겠습니다." "아, 그리고 방금 눈치챘는데. 테이블 UI에 오프셋 기반 페이지네이션(offset pagination)을 사용했네. 당연히 여기서는 커서 기반 페이지네이션(cursor pagination)이 더 적합하지 않나?" "맞습니다! 바로 수정하겠습니다." "또, 저거 혹시 N+1 쿼리인가? 테이블의 모든 행을 가져오기 위해? 왜 한 번의 통신으로 처리하지 않나?" "맞습니다! 바로 수정하겠습니다." 이게 바로 내가 여전히 직장을 유지할 수 있는 이유겠지, 그치? …
최악의 슬롭(Slop) 나는 이런 광경이 펼쳐지는 걸 여러 번 지켜봤지만, 그 빈도는 줄어들고 있다. 내가 사용하는 도구들과 그 도구를 활용하는 방법론 모두 계속해서 발전하고 있기 때문이다. 나는 '최악의 슬롭(Peak Slop)' 시대가 이미 왔다 지나갔다고 생각한다. 우리는 포스트 슬롭(post-slop) 시대에 진입하고 있다. 내 소프트웨어는 그 어느 때보다 견고하고, 테스트가 잘 되어 있으며, 통합도 잘 되어 있고, 관측 가능성(observability)도 뛰어나다. 그리고 내 개발 속도(velocity)는 계속해서 빨라지고 있다! 어떤 날은 하늘이 한계라고(기회가 무한하다고) 느껴진다. 하지만 다른 날에는 뼈저리게 깨닫곤 한다. 하늘이 한계가 아니라는 것을. 컨텍스트 윈도우(context window)가 한계라는 것을.
그렇다면 내가 컨텍스트 윈도우를 꽉 채우면 어떻게 될까? 아니면 세션을 종료하면? 컴퓨터를 바꾸면? 프로젝트를 다른 사람에게 넘기면? 어떻게 되는지 우리는 이미 알고 있다. 에이전트가 통제력을 잃거나, 요구사항이 유실되거나, 지극히 중요한 세부 사항이 무시된다. 그래서 우리는 적응하고 이를 완화하려 노력한다. 우리는 문서화한다. 요구사항을 나열한다. 그렇다, 수백만 명의 개발자들이 같은 깨달음에 도달하고 있다. 우리는 더 많은 요구사항을 문서로 남겨야 한다는 것을. 요구사항이 변경되면 그 문서를 업데이트해야 한다는 것을. 보라! 내가 스펙(Spec)을 작성했다! 내가 스펙 주도 개발(spec-driven development)을 하고 있는 걸까? 어쩌면 그럴 수도 있지만, 이것은 전혀 새로운 것이 아니다. 우리의 멘토들은 수십 년 전부터 우리에게 이런 습관을 가르치려 했을 뿐이다.
비행기를 타고 날아가면서 비행기를 조립하기 당신이 가장 좋아하는 스펙의 형태는 무엇인가? README.md 와 AGENTS.md 로 시작하는 것은 좋은 출발점이다. testing-guide.md 도 잊지 마라. 어쩌면 architecture.md , PRD.md , 그리고 디자인 문서도 있을 수 있다. 에이전트에게 .md 파일을 작성하는 방법을 가르치기 위해 md.md 를 고려해 본 적이 있나? .md 파일이 많으면 많을수록 좋은 거 아니야? 아이러니하게도, 그렇다. 문서와 비구조화된 스펙만으로도 아주, 아주 멀리 갈 수 있다. 단순한 프롬프트만 사용하는 것보다 훨씬 더 말이다. 아직 문서를 작성하고 있지 않다면, 이 글 읽기를 멈추고 당장 그 작업부터 시작해야 한다. 그리고 명심해라. 쓰레기가 들어가면 쓰레기가 나온다(Slop in, slop out). 유기농, 목장 방목, 수작업으로 정성껏 작성된 스펙을 따를만한 건 없다. 소프트웨어 엔지니어링이라는 행위는 바로 이 스펙을 작성하는 곳에서 진정으로 일어난다. 그래서 몇 주 전, 나는 스스로에게 질문을 던졌다. 이걸 어디까지 밀어붙일 수 있을까? 어디까지 밀어붙여야 할까?
마크다운(Markdown) 속에서 꿈꾸기 이야기가 전해지듯이, 나는 AI 정신착란(psychosis)에 빠졌고, '스펙 맥시(Spec maxxi)'가 되었으며, 내가 본 것 중 가장 아름다운 PRD(제품 요구사항 문서)와 TRD를 작성하기 위해 수없이 많은 시간을 보냈다. 어쩌면 내 에이전트들도 스펙을 작성할 수 있을지 모른다는 생각에 템플릿, 스킬, 역할을 구상했다. 나는 미니 다크 팩토리(dark factory)처럼 함께 일하는 에이전트 대군을 구성하여 내 스펙을 현실로 구현하려 했다. 내 작업은 더욱 야심차졌고, 어느 순간 나는 바이브 코딩(vibe-coding)의 음속 장벽을 돌파했다. 감시 없이 1.5시간 동안이나 혼자 작동하는 에이전트를 만든 것이다! 정말 흥미로웠다. 하지만 그 에이전트 군단은 나를 위해 무엇을 배포(Ship)해 주었을까? 글쎄, 그건 슬롭(Slop, 쓰레기 코드)이 아니었다. 사실 제대로 작동했다. 이건 내가 매일 다른 회사들이 억지로 쓰게 만드는 형편없는 소프트웨어들에 대해 할 수 있는 말보다 훨씬 낫다. 하지만 여전히 약간은 엉성(sloppy)했다. 나는 완벽주의자와 거리가 멀고 cu