[00:00]
저는 Spec Kit을 사용해서 Claude Code로 전체 애플리케이션을
[00:01]
재구축했습니다. 하지만 이런 새로운
[00:03]
구조화된 접근 방식이 실제로
[00:05]
차이를 만들었을까요? Spec Kit은
[00:07]
강화된 플래닝 모드라고 생각하시면 됩니다.
[00:09]
코드를 작성하기 전에 Claude가
[00:10]
세 가지 별개의 계획 단계를 거치도록
[00:12]
강제합니다. 그럼 설정하고 실제로
[00:14]
결과가 개선되는지 확인해보겠습니다.
[00:16]
먼저 할 일은 Claude Code에서
[00:18]
우리 프로젝트에 Spec Kit을
[00:20]
설치하는 것입니다. 그를 위해서는
[00:22]
uvx 명령어가 있고 빠른 설치
[00:24]
가이드를 영상 설명란에 넣어두겠습니다.
[00:25]
기본적으로는 specify net을 입력하고
[00:26]
원하는 프로젝트 이름을
[00:28]
지정하면 됩니다. 이 경우에는
[00:29]
ré rocket이라고 하고 그 다음
[00:30]
AI 어시스턴트를 선택하면 됩니다.
[00:32]
여기 몇 가지 옵션이 있습니다.
[00:34]
우리는 Claude Code를 선택하겠습니다.
[00:35]
Gemini CLI, Cursor나 GitHub Copilot도
[00:37]
사용할 수 있고 단계는 비슷하지만
[00:39]
Claude Code가 제가 선호하는 도구입니다.
[00:41]
스크립트 타입은 맥을 사용하고 있으니
[00:42]
sh라고 하겠습니다. 이제 할 일은
[00:44]
Spec Kit 안에 있는 모든 템플릿을
[00:46]
로컬 프로젝트에 복사하는 것입니다.
[00:47]
또한 Claude Code에서 사용하는
[00:49]
커스텀 명령어들도 설치됩니다.
[00:51]
이게 Spec Kit을 시작하기 위해 해야 할
[00:53]
전부입니다. 나머지는 Claude Code
[00:54]
안에서 진행됩니다.
[00:56]
이제 해당 디렉토리로 이동해서 Claude Code를 열었습니다.
[00:59]
이제 새로운 명령어들을 볼 수 있습니다.
[01:01]
specify 명령어가 있고 이것이
[01:03]
프로세스의 첫 번째 단계입니다.
[01:04]
이걸로 하고 싶은 것은
[01:06]
'무엇을'과 '왜'를 설명하는 것이지
[01:08]
'어떻게'는 아닙니다. 그러니까
[01:10]
애플리케이션 스택이나 기술에 대한
[01:13]
기술적 세부사항은
[01:14]
들어가지 않습니다. 그냥 여기에
[01:16]
프롬프트를 넣을 수도 있지만
[01:18]
더 좋은 방법은 제가 한 것처럼
[01:20]
마크다운 파일을 참조하는 것입니다.
[01:22]
이렇게 하면 나중에 다시 볼 수 있고
[01:24]
항상 제가 반복할 수 있는
[01:25]
시작점이 됩니다.
[01:27]
그 마크다운 파일을 보면
[01:28]
저는 사용자 여정, 경험,
[01:30]
원하는 결과, 해결하려는 문제에
[01:32]
정말 집중하고 있습니다.
[01:35]
개요를 보면 구직자가
[01:36]
AI를 사용해 특정 채용공고에
[01:37]
최적화된 맞춤형 이력서를
[01:39]
만들 수 있도록 돕는 애플리케이션을
[01:41]
구축한다고 되어 있습니다. 첫 이력서
[01:43]
작성, 이력서 맞춤화, 반복적 개선,
[01:45]
프로필 관리 같은 사용법이
[01:47]
나와 있습니다. 기본적으로 요구사항과
[01:49]
최종 사용자 관점에서 어떻게 보이는지를
[01:51]
다루고 있습니다. 하지만 여기에는
[01:53]
기술에 관한 내용은 전혀
[01:54]
없습니다. 이제 명령어가 완료되면
[01:55]
specs 폴더 아래에 spec MD라는
[01:57]
새로운 파일이 추가됩니다.
[01:59]
이게 뭔지 보면 기본적으로
[02:01]
우리가 제공한 초기 프롬프트를
[02:03]
가져와서 이 템플릿에 매핑하고
[02:05]
알고 있는 형식으로 넣은 것입니다.
[02:06]
정말 멋진 점은 실제로 기능 요구사항으로
[02:08]
분류하고 각각에 번호를
[02:10]
매긴다는 것입니다.
[02:11]
이제 포괄적인
[02:13]
사양을 갖게 되었으니
[02:15]
계획 단계로 넘어갈 수 있습니다.
[02:17]
포괄적인 스펙이 완성되었으니, 이제 계획 단계로 넘어갈 수 있습니다.
[02:19]
그리고 speckit에서 plan 명령어를 추가했습니다.
[02:21]
이제 실제로 구현 방법에 대한
[02:23]
기술적 세부사항을 제공할 수 있습니다.
[02:24]
그리고 plan 명령어를 사용할 건데,
[02:26]
하지만 Next.js를 사용하고,
[02:27]
UI는 shadcn을 사용하고,
[02:28]
데이터베이스는 Neon을 사용한다고 명시하겠습니다.
[02:32]
약 30분 정도 걸렸지만,
[02:34]
계획 단계가 마침내 완료되었습니다.
[02:36]
하지만 이 계획 단계는
[02:38]
토큰을 많이 소모합니다.
[02:39]
Opus 토큰 한도를 모두 소모해서
[02:41]
중간에 Sonnet 4로 전환해야 했습니다.
[02:43]
하지만 이런 방식으로 하는 것이
[02:45]
단순한 vibe 코딩과 비교했을 때의
[02:47]
몇 가지 장점을 말씀드리면,
[02:48]
실제로 아키텍처를 고려했습니다.
[02:50]
profile manager, resume builder,
[02:52]
AI analyzer, export service 등 5개의 라이브러리를 생성했습니다.
[02:55]
또한 테스트 주도 설계를 구현하고 있어서
[02:57]
모든 테스트 구축에 대해 고려했습니다.
[02:59]
그리고 이게 정말 멋지다고 생각했는데,
[03:00]
실제로 contract first 접근법을 사용합니다.
[03:02]
즉, 코딩을 시작하기 전에
[03:04]
API를 먼저 정의한다는 뜻입니다.
[03:05]
계획 단계에서 제공받은
[03:08]
아티팩트를 보면
[03:09]
여기에 정말 많은 것들이 있습니다.
[03:10]
앞서 언급했듯이
[03:12]
모든 API에 대한
[03:14]
OpenAPI 명세서를 실제로 생성했습니다.
[03:17]
데이터 모델과 엔티티 관계 다이어그램도 제공해줬습니다.
[03:19]
여기서 모든 다른 테이블들과
[03:21]
그들이 어떻게 연결되는지 보여줍니다.
[03:22]
정말로 데이터베이스를 매핑했습니다.
[03:24]
스키마 정의도 있고,
[03:25]
성능을 위한 인덱싱 전략까지
[03:27]
고려했습니다.
[03:29]
정말 포괄적으로 작업했습니다.
[03:31]
제 생각에는 너무 포괄적일 수도 있지만,
[03:33]
그건 나중에 이야기하겠습니다.
[03:34]
[03:37]
이제 이러한 다양한 명령어들이
[03:38]
서로 어떻게 쌓이는지 볼 수 있습니다.
[03:40]
specify로 시작해서 요구사항과
[03:42]
사용자 관점을 얻었습니다.
[03:44]
그 다음 계획 단계로 넘어가서
[03:45]
실제 기술에 대해 알아보고
[03:47]
정말 상세한 기술 명세서를 작성했습니다.
[03:48]
다음은 tasks입니다.
[03:50]
여기서 모든 계획을
[03:52]
AI가 나중에 사용할 수 있는
[03:54]
개별 작업으로 분해하기 시작합니다.
[03:56]
그리고 task 명령어는 실제로
[03:58]
상대적으로 빠르게 실행되어 몇 분 만에
[04:00]
완료되었습니다.
[04:01]
그리고 여기서 볼 수 있는 것은
[04:03]
tasks를 위한 마크다운 파일로, 기본적으로
[04:05]
먼저 plan.md를 로드한다고 합니다.
[04:07]
즉, 지난 단계에서 생성한 파일로
[04:09]
AI가 모든 것을 구현하는 데 필요한
[04:10]
많은 세부사항을 제공하고
[04:12]
실제로 모든 것을 다양한 작업으로 분해합니다.
[04:14]
설정 작업, 데이터베이스 스키마 작업 등으로 말이죠.
[04:17]
정말 흥미롭다고 생각한 것은
[04:18]
테스트 주도 개발을 하고 싶어한다는 것입니다.
[04:20]
즉, 이 테스트들은 반드시 작성되어야 하고
[04:22]
구현이 시작되기 전에 반드시 실패해야 합니다.
[04:24]
모든 테스트를 작성하고 실패시킨 다음,
[04:26]
실제 애플리케이션 구현을 시작하겠다는 것입니다.
[04:28]
정말 흥미로운 개념입니다.
[04:30]
모든 것을 구현해보겠습니다.
[04:32]
[04:33]
이것을 구현해보고 실제로 잘 작동하는지 확인해보겠습니다.
[04:35]
특별한 명령어는 없습니다.
[04:37]
이제 구현이라고 말하고
[04:38]
task.md 파일을 선택하기만 하면 됩니다.
[04:40]
그러면 다른 모든 plan MD와
[04:42]
필요한 모든 참조를 가져올 것입니다.
[04:45]
그래서 거기서 시작하는 것이 좋겠습니다.
[04:46]
좋습니다, 여기 있네요.
[04:48]
한 시간 넘게 걸렸습니다.
[04:50]
컨텍스트 윈도우가 여러 번 가득 찼습니다.
[04:51]
압축해야 했습니다.
[04:54]
여러 번 멈추기도 했습니다.
[04:55]
계속하라고 말해야 했어요.
[04:57]
이것은 정말 많은 토큰을 사용하지만
[04:59]
많은 코드를 작성했습니다.
[05:00]
이제 완전히 기능적이라고 말하고 있습니다.
[05:02]
완전한 사용자 인증, 인가,
[05:04]
스트리밍 응답이 있는 이력서 맞춤화,
[05:06]
그리고 신뢰도 점수를 가지고 있습니다.
[05:08]
많은 약속을 했습니다.
[05:10]
모든 API 키와
[05:11]
Neon과 Clerk의 연결 문자열을 입력했습니다.
[05:13]
그리고 이것이
[05:14]
실제로 작동하는지 확인해보겠습니다.
[05:16]
안녕하세요, 저는 Ben입니다.
[05:17]
AI 코딩에 관심이 있다면
[05:19]
제 뉴스레터인
[05:20]
Unleash News를 구독하세요.
[05:22]
AI 소프트웨어 개발의 최신 소식을
[05:23]
전해드리고
[05:24]
제가 작업하고 있는 내용도 알려드릴게요.
[05:27]
설명란의 첫 번째 링크에서
[05:29]
만날 수 있기를 바랍니다.
[05:31]
여기서 그 전체 과정의 최종 결과입니다.
[05:32]
첫인상은 꽤 좋아 보입니다.
[05:34]
꽤 깔끔합니다.
[05:35]
바로 작동했다는 것이 정말 좋았습니다.
[05:37]
꽤 멋졌습니다.
[05:39]
또한 Clerk 통합이 바로 작동했습니다.
[05:41]
Gmail 계정으로 로그인하고 이름으로 인사했습니다.
[05:44]
꽤 멋집니다.
[05:45]
UI 측면에서 보면
[05:47]
프로필 이력서와 같은 일부는 작동하는 것 같지만
[05:48]
템플릿에 도달하면
[05:50]
일종의 오류가 발생합니다.
[05:51]
실제로는 전체 애플리케이션을
[05:53]
완성하지 않았습니다.
[05:55]
이는 모든 계획에 비해
[05:56]
다소 실망스럽습니다.
[05:58]
그리고 몇 가지 핵심 부분을 빼먹었습니다.
[06:00]
예를 들어
[06:01]
새로운 프로필을 만들 수 있고 모든 정보를 보여주지만
[06:04]
다른 업무 경험,
[06:05]
교육, 기술에 대한
[06:07]
모든 메타데이터를 제공하지 않습니다.
[06:08]
전문 요약만 제공합니다.
[06:10]
그리고 그것도 저장할 수 없습니다.
[06:11]
저장 기능이 아직 구현되지 않았다는
[06:13]
팝업만 표시됩니다.
[06:15]
UI 데모일 뿐이라고 하는데
[06:17]
이는 프로젝트를 완료했을 때 말한 것과
[06:20]
정반대입니다.
[06:21]
모든 것이 완성되었고
[06:22]
프로덕션 준비가 되었다고 말했습니다.
[06:23]
그래서 그 부분은 좀 실망스럽습니다.
[06:25]
이것은 정말 프로젝트의 첫 시작입니다.
[06:26]
완전한 프로젝트가 아닙니다.
[06:28]
또한 Next.js 14를 선택했는데
[06:30]
좋은 선택이 아니었다고 생각합니다.
[06:32]
그 모든 계획을 세웠다면
[06:33]
구식 버전을 선택하지 않았을 것이라고 생각했습니다.
[06:35]
제가 마음에 드는 부분으로는
[06:37]
일관된 컴포넌트 아키텍처를 정말 좋아합니다.
[06:39]
여기 소스 폴더에서 보시면
[06:40]
우리를 위해 이 모든 컴포넌트들을 구축했습니다.
[06:42]
관리와 상태 관리가
[06:44]
구현되어 있습니다. 앱 API를 살펴보면,
[06:46]
프로필, 이력서, 템플릿을 위한
[06:49]
다양한 API 엔드포인트가 있습니다.
[06:51]
헬스 API도 있어서 확인할 수 있습니다.
[06:53]
API와
[06:54]
계약들을 정말 잘 분리하고 있습니다.
[06:56]
또한 specs 폴더에
[06:58]
API에 대한 정말 좋은 문서들이 있어서
[07:00]
새로운 컴포넌트를 추가할 때
[07:02]
참조할 수 있습니다.
[07:03]
이 부분은 단순히 즉석으로 코딩하는 것보다
[07:05]
훨씬 잘 정리되어 있습니다.
[07:07]
또한 테스트 주도 개발을 하고 있어서
[07:08]
이런 테스트 폴더가 있습니다.
[07:09]
테스트를 계약 테스트,
[07:11]
통합 테스트, 라이브러리를
[07:12]
개별적으로 테스트하는 것, 성능 테스트,
[07:15]
그리고 단위 테스트로 나눈 방식이 마음에 듭니다.
[07:16]
적어도 여기서 시작된
[07:18]
포괄적인 테스트 스위트가 있습니다.
[07:20]
실제로는 기획 단계에서 했던
[07:21]
모든 작업을 바탕으로 제가 기대했던 만큼
[07:23]
완전하지는 않지만,
[07:24]
여전히 테스트를 위한 좋은 기반을 갖추고 있습니다.
[07:26]
GitHub Spec Kit에 대한 제 초기 평가는
[07:28]
좋은 프레임워크이고 좋은 도구 세트라는 것입니다.
[07:30]
하지만 제게는 너무 많은 것을
[07:33]
하려고 한다고 생각합니다.
[07:34]
예를 들어 전체 애플리케이션 대신
[07:36]
새로운 기능에 대해서만 Spec Kit을
[07:38]
더 제한된 범위로 사용하는 실험을 해볼 생각입니다.
[07:40]
그러면 아마 더 유용할 것 같습니다.
[07:42]
너무 오랫동안 멀어져서
[07:43]
사용자 상호작용 없이 너무 많은 것을 한 점이
[07:46]
마음에 들지 않았습니다.
[07:47]
실제로 저는 AI와 코딩하는 것을 좋아하고
[07:49]
상호작용하는 것을 좋아합니다.
[07:51]
아직 한 시간씩 혼자서 가서
[07:53]
계획만 세울 만큼 충분히 좋지는 않다고 생각합니다.
[07:54]
그렇긴 하지만, Spec Kit 프레임워크를 살펴보면
[07:56]
온갖 훌륭한 마크다운 파일들이 있습니다.
[07:58]
그래서 자신에게 맞는 부분만 가져다가
[07:59]
원하는 방식으로
[08:01]
정확히 커스터마이즈하고
[08:02]
좋은 부분만 가져가서
[08:04]
너무 과한 부분은
[08:06]
옆에 두면 됩니다.
[08:07]
그것이 제가 취할 전략입니다.
[08:09]
영상을 즐겨주셨기를 바라고
[08:11]
멋진 하루 보내시기 바랍니다. 다음 영상에서 뵙겠습니다.