스크립트
00:00:00opus나 gpt 5.6 같은 좋은 모델을 사용하면 대개 좋은 결과물을 얻을 수 있지만, 이런 모델들은
00:00:06토큰도 엄청나게 소모하며 gpt astra 같은 고성능 모델의 경우 상황이 더욱 심각해집니다.
00:00:11그리고 fable 5.1 같은 모델은 다른 모델을 사용할 때보다 사용량 한도에 훨씬 더 빨리 도달하게 되죠.
00:00:16또한 속도도 매우 느려서 단 하나의 작업이 끝날 때까지 꽤 오랜 시간을 기다려야 합니다. 이 문제를
00:00:21정확히 해결하기 위해 최근 깃허브에서 큰 주목을 받고 있는 'graft'라는 도구가 있습니다. 이 도구는
00:00:26이러한 에이전트들이 기본적으로 프로젝트를 처리하는 방식을 바꿔줍니다. 토큰을 절약해 줄 뿐만 아니라
00:00:31에이전트가 혼자 작업할 때보다 훨씬 더 빠르 게 작동하도록 만들어 주죠. 또한 아주 흥미로운 방식을 통해
00:00:36이 문제가 애초에 발생하는 근본적인 원인을 해결합니다. 이 문제를 해결하기 위해 만들어진 도구가
00:00:40아예 없는 것은 아니지만, 모두 커다란 허점을 가지고 있으며 바로 그 점을 이 도구가 해결해 줍니다.
00:00:46저희 채널에 처음 오셨다면 저희는 소프트웨어 회사이며 이곳은 저희 채널 AI Labs입니다. 이번
00:00:51영상에서는 graft가 어떻게 이러한 모델들을 더 저렴하게 사용할 수 있게 만들어 주는지 정확히 보여드리겠습니다. 하지만 graft에
00:00:56대해 알아보기 전에, 에이전트가 앱의 무언가를 변경하기 전에 왜 그렇게 많은 토큰을 소모하는지 이해할 필요가 있습니다.
00:01:02claude code나 codex 같은 에이전트가 파일을 찾는 데 사용하는 기본 방식에는 문제가 있습니다.
00:01:07작업 중인 앱에 무언가를 추가해 달라고 에이전트에 요청하면, 에이전트는 먼저 변경 내용을 작성해야 할
00:01:12앱의 특정 부분을 찾아야 합니다. 해당 부분을 찾기 위해 터미널에서 추가하려는 항목과 관련된 단어를
00:01:17검색하는 여러 가지 명령어를 사용하죠. 모델은 대개 첫 시도에 찾는 항목을 발견하지 못하고,
00:01:23정말 무엇을 검색하고 있는지 좁혀나기 위해 여러 도구를 사용해야 합니다.
00:01:28그리고 모델이 다음에 사용할 도구를 결정해야 할 때마다, 에이전트는 지금까지 사용한 도구의 응답을 포함하여
00:01:32지금까지의 전체 대화 내용을 모델에게 전송합니다.
00:01:37그러면 모델은 다음 단계를 결정하기 위해 그 내용을 모두 읽고, 여러 번의 과정을 거쳐 올바른 파일에 도달하게 됩니다.
00:01:42그리고 그 과정 각각이 비용을 발생시키죠. 예를 들어, 에이전트에게 버튼을 초록색으로 만들어 달라고 요청하면
00:01:47먼저 그 버튼의 코드가 포함된 파일이 무엇인지 찾아야 합니다. 그래서 해당 버튼이 포함된 파일을 검색하고
00:01:53그 결과가 사용자의 메시지와 함께 모델에게 전달됩니다. 그런 다음 에이전트는 다른 도구를 사용하여
00:01:58해당 파일의 특정 코드 라인을 읽고 나서야 비로소 실제로 변경 작업을 수행합니다.
00:02:04요청하는 모든 변경 사항은 이러한 주고받는 과정을 통해 이루어집니다. 모든 메시지와 도구 결과가
00:02:08반복해서 전송되기 때문에 컨텍스트 윈도우는 계속해서 커집니다. 컨텍스트를 낭비하게 될 뿐만 아니라,
00:02:14이런 방식으로 모델이 필요한 파일을 좁히기 위해 여러 번의 턴을 소모하기 때문에 모델의 속도도 느려지게 됩니다.
00:02:19따라서 새로운 검색마다 더 많은 정보가 추가되고, 모델은 그것으로 무엇을 할지 결정하기 위해 토큰을 소비해야 합니다.
00:02:25이것이 바로 한 세션에서 에이전트와 함께 많은 작업을 수행할 때 사용량 한도에 도달하게 되는 이유 중 하나입니다.
00:02:30이제 사용량 한도 초과는 한 가지 결과일 뿐이며, 컨텍스트 윈도우에 너무 많은 내용이 담겨 있어
00:02:36에이전트가 한 번에 한 가지 일에 집중하지 못하기 때문에 더 낮은 품질의 결과물을 얻게 되기도 합니다.
00:02:41자, 이는 잘 알려진 문제이므로 이를 해결하려고 시도하는 도구들이 이미 존재합니다. 이러한 도구들이 사용하는
00:02:46흔한 접근 방식은 모델이 쉽게 비교할 수 있도록 코드의 여러 섹션을 '벡터'라는 숫자로 변환하는 것입니다.
00:02:51질문을 던지면 검색 도구는 질문 역시 벡터로 변환한 뒤 가장 가까운 일치 항목이 있는 섹션을 찾습니다.
00:02:56이를 벡터 검색이라고 부르며, 기본적으로는 질문과 그 의미가 얼마나 유사한지를 바탕으로 정보를 찾는 것을 의미합니다.
00:03:02하지만 유사성만으로는 앱의 각 부분이 어떻게 연결되어 있는지 알 수 없습니다.
00:03:07예를 들어, 계정 생성 코드와 계정 삭제 코드는 모두 계정에 관한 질문과 일치할 수 있습니다.
00:03:12하지만 두 코드는 완전히 정반대의 역할을 하므로, 잘못된 코드를 선택하는 것은 엄청나게 큰 대가를 치르게 할 수 있습니다.
00:03:17그것이 바로 이 검색이 그렇게 효과적이지 않은 이유이며, 대부분의 코딩 에이전트가 이를 전혀 사용하지 않는 이유입니다.
00:03:21하지만 본격적으로 도구에 대해 알아보기 전에, 채널을 구독하고 좋아요 버튼을 눌러주시면 정말 감사하겠습니다.
00:03:26이러한 작은 지지의 표명은 저희에게 큰 힘이 됩니다. 자, graft는 실제로 컴퓨터에 설치하는
00:03:30터미널 명령어이며, 코딩 에이전트가 사용하는 기본 방식을 바꾸기 위해 만들어졌습니다.
00:03:36이를 통해 에이전트는 매번 변경을 가하기 전에 프로젝트 전체를 일일이 검색할 필요가 없어집니다.
00:03:41이는 프로젝트의 모든 부품에 대한 지도이자 서로 다른 부분이 어떻게 연결되어 있는지 보여주는
00:03:46'지식 그래프(Knowledge Graph)'를 구축함으로써 이루어집니다.
00:03:51에이전트는 그 지도를 사용하여 필요한 코드를 찾고 다른 어떤 부분이 그 코드에 의존하는지 확인합니다.
00:03:57이 도구는 무료 오픈소스이며, 핵심적인 특징은 별도의 API 키가 필요한 모델을 사용하지 않는다는 점입니다.
00:04:02따라서 평소에 쓰던 구독 그대로 작동합니다. 또한 모델을 사용하여 앱에 대한 일반 텍스트 페이지를 작성하는
00:04:07선택적 단계도 존재하는데, 이 페이지들은 코드의 각 부분이 무엇을 하는지, 그리고 각 부분이 어떻게 결합되는지 설명해 줍니다.
00:04:12이미 지도가 에이전트에게 무엇이 무엇과 연결되어 있는지 알려주기 때문에 이 단계가 반드시필요한 것은 아닙니다.
00:04:17이 단계는 단순히 코드가 무엇을 하는지에 대한 설명을 추가해 줄 뿐입니다. 따라서 이 페이지들을 통해
00:04:22에이전트는 모든 파일을 여는 대신 각 부분이 무엇을 하는지 알 수 있게 됩니다. graft를 만든 팀이 이 도구를 실행해 보았을 때,
00:04:28토큰 사용량 측면에서 에이전트를 4배 더 저렴하게 만들어 준다는 것을 발견했습니다. 그리고 그들의 자체 벤치마크 중
00:04:33가장 이상적인 케이스인 162회의 실행에서, 작업 소요 시간은 평균 60% 단축되었고, 에이전트의 도구 사용 횟수는 46% 줄었으며,
00:04:42토큰은 42% 적게 사용되었고 비용은 평균 32% 더 낮게 나타났습니다. 그리고 이러한 절감 효과는 에이전트가
00:04:48더 이상 수행할 필요가 없는 모든 검색 작업에서 오기 때문에 규모가 큰 프로젝트일수록 더 큰 효과를 발휘합니다.
00:04:53작은 프로젝트에서는 애초에 절약할 만한 검색이 많지 않기 때문입니다. graft는 claude code 및 codex뿐만 아니라
00:04:58터미널 명령어웨나 mcp를 사용하는 다른 코딩 에이전트들과도 호환됩니다. 하지만 graft가 구축하는 지도는
00:05:04앞서 이야기했던 벡터 검색과는 다릅니다. graft는 코드를 숫자로 변환하고 유사성으로 매칭하는 것이 아니라,
00:05:09코드를 읽고 실제로 어느 부분이 어느 부분을 사용하는지 기록해 둡니다.
00:05:14따라서 한 부분을 변경할 때 에이전트는 그 변경으로 인해 다른 어떤 부분이 망가질 수 있는지 정확히 파악할 수 있습니다.
00:05:20그리고 코드가 변경되면 전체를 다시 구축하는 대신 변경된 부분만 업데이트하므로, 지도는 스스로 최신 상태를 유지하며
00:05:25에이전트가 프로젝트의 구버전을 기반으로 작업하는 일은 절대 발생하지 않습니다. 하지만 먼저 스폰서인 hydra의 메시지를 들어보겠습니다.
00:05:30저희가 앱에 AI 생성 기능을 추가하려고 했을 때, 예전이라면 모델과 인프라, 작업 큐를 직접 다뤄야 했습니다.
00:05:35바로 그때 hydra의 API가 필요해집니다. hydra는 모델 뒤의 전체 런타임과 API를 구축해 두었기 때문에,
00:05:41그 모든 인프라를 직접 세팅할 필요 없이 해당 레이어 전체가 여러분을 대신해 이미 처리되어 있습니다.
00:05:46코드에서 실제 호출을 한 번 하자, 에셋이 그냥 툭 튀어나오는 대신 추적할 수 있는 실제 작업이 반환되었습니다.
00:05:51그리고 미디어가 반환되기 전에 작업이 대기 중(queued)에서 처리 중(processing), 완료(complete)로 이동하는 것을 지켜볼 수 있었죠.
00:05:56이러한 상태 표시는 이것이 실제 프로덕션 작업을 처리할 수 있음을 아는 방법이기 때문에 매우 중요한 부분입니다.
00:06:02자신의 앱에 도입하는 데는 약간의 코드만 있으면 되며, CLI와 SDK도 제공되므로 터미널이나 에디터에서 바로 작업할 수 있습니다.
00:06:07이것은 1인 개발자라면 예전에는 절대 구축할 수 없었던 종류의 것입니다. hydra.com에서 hydra를 무료로 체험해 보시고
00:06:13저희 코드를 사용하여 첫 달 50% 할인 혜택을 받으세요. 링크와 코드는 아래 설명란에 있습니다.
00:06:19무언가를 설치하기 전에, graft가 실제로 어떻게 그 지도를 만드는지 살펴보아야 합니다.
00:06:24지도를 구축하기 위해 graft는 컴퓨터상의 코드를 읽고 발견한 모든 부분을 이름과 프로젝트 내 위치와 함께 기록합니다.
00:06:29그런 다음 어떤 부분이 서로 연결되어 있는지 기록합니다.
00:06:34그 지도상의 각 부분은 '노드(node)'라고 불리며, 두 부분 사이의 각 연결은 '엣지(edge)'라고 불립니다.
00:06:39따라서 에이전트가 앱의 특정 부분을 무엇이 사용하는지 물어보면, graft는 그 엣지를 따라가서
00:06:44검색하던 대상과 연결된 코드를 제공함으로써, 그 변경 사항이 다른 부분에 영향을 미치는지 확인할 수 있게 해줍니다.
00:06:49이것이 바로 벡터 검색이 할 수 없었던 일입니다. graft는 그 지도를 컴퓨터에 JSON 파일로 저장합니다.
00:06:53JSON으로 저장하는 이유는 이 형식을 사용하면 세부 정보가 첨부된 적절한 구조로 내용을 기록할 수 있기 때문입니다.
00:06:59또한 브라우저에서 열리는 뷰어가 있어서 지도를 보고 연결 관계를 탐색할 수 있습니다.
00:07:04graft가 claude code에 연결되면 모든 세션의 시작 부분에 지도를 사용하는 지침을 모델에 제공합니다.
00:07:10그러면 메시지를 보낼 때마다 graft는 메시지의 단어와 지도를 대조하여
00:07:15최대 세 개의 일치하는 위치를 첨부합니다.
00:07:20따라서 모델은 단 하나의 도구를 사용하기도 전에 어떤 파일과 라인을 읽어야 할지 이미 알게 됩니다.
00:07:26코드 자체는 에이전트가 해당 라인을 읽을 때만 컨텍스트에 들어오므로, 모델은 더 적은 턴 만에 올바른 파일에 도달하며
00:07:32컨텍스트 윈도우에 추가되는 내용이 훨씬 줄어듭니다.
00:07:37결과적으로 속도가 빨라지고 사용량 한도를 덜 소모하게 됩니다. mcp 옵션도 존재하며, 차이점은 누가 조회를 시작하느냐에 있습니다.
00:07:43앞서 다룬 설정에서는 graft가 프롬프트에서 유추하여 모든 메시지에 해당 위치를 첨부하지만,
00:07:48mcp를 사용하면 프롬프트에 아무것도 첨부되지 않으며 에이전트는 실제로 무언가 필요할 때만 graft에 요청합니다.
00:07:53graft 자체의 테스트에 따르면 mcp 버전이 CLI 버전보다 더 많은 정답을 맞혔으며,
00:07:58CLI 버전은 속도가 더 빨랐습니다. 설치하면 실제로 두 가지 모두를 얻게 됩니다.
00:08:04그리고 앱을 변경함에 따라 graft는 지도를 스스로 최신 상태로 유지합니다. 질문에 답변하기 전에
00:08:10지도가 구축된 이후 코드가 변경되었는지 확인하고, 변경되었다면 모델을 사용하지 않고 먼저 지도를 업데이트합니다.
00:08:15이제 graft를 설치하려면 설명란에 링크될 그들의 사이트로 이동해야 합니다.
00:08:20거기서 설치 명령어를 복사하거나 사용 중인 코딩 에이전트에 맞는 설정 프롬프트를 복사하여
00:08:25에이전트에 그대로 붙여넣을 수 있습니다. 해당 설정 프롬프트에는 에이전트가 graft를 설치하고
00:08:30프로젝트에 설정하는 데 필요한 모든 명령어가 포함되어 있습니다. 그 부분을 직접 하고 싶다면
00:08:35사이트에서 설치 명령어를 복사하여 아무 폴더에서나 터미널에 실행하면 됩니다.
00:08:40일단 설치되면 CLI를 바로 사용할 수 있습니다. 프로젝트에서 사용하려면 init 명령어를 실행하여
00:08:46해당 프로젝트에 graft를 설정해야 합니다. 이 명령어는 현재 작업 중인 폴더 내부의 터미널에서 실행해야 하는데,
00:08:52작업 중인 폴더 안에서 실행해야 합니다. 해당 프로젝트에 대한 몇 가지 지침을 폴더에 추가하기 때문인데,
00:08:57다른 곳에서 실행하면 이 내용들이 유실됩니다. 실행하면 어떤 코딩 에이전트를 사용하는지 묻는데,
00:09:02에이전트마다 별도의 설정이 필요하기 때문입니다. 저희는 Claude Code를 사용하고 있으므로 이를 선택하고
00:09:07설정을 진행했습니다. 완료되면 프로젝트 폴더에서 graft 스킬을 볼 수 있는데,
00:09:11이는 에이전트에게 graft 사용법과 보유한 명령어를 알려줍니다. 또한 훅도 설치되는데,
00:09:16훅이 무엇인지 모른다면 특정 시점에 스스로 실행되는 작은 스크립트라고 보면 됩니다. 이 훅들은
00:09:22에이전트가 graft 워크플로를 따르도록 강제합니다. 여러 개의 훅이 설치되는데,
00:09:26하나는 세션이 시작될 때 모델에게 맵 사용법을 지시하고, 또 다른 하나는 전송하는 각 프롬프트에 매칭되는 위치를 첨부하며,
00:09:31마지막 훅은 Claude가 파일을 수정한 후에 실행되어 맵이 최신 상태로 유지되도록 합니다. 그런 다음,
00:09:37이미 작업 중이던 프로젝트에 이를 설정하는 경우, 동일한 폴더에서 graft build
00:09:41명령어를 실행해야 graft가 이미 존재하는 모든 코드를 훑어보고
00:09:46그로부터 맵을 구축할 수 있습니다. 만약 빈 폴더에서 시작한다면 아직 맵핑할 대상이 없으므로,
00:09:50파일이 생긴 후에 스킬을 통해 Claude가 맵을 구축하게 됩니다. 그 이후에는 평소처럼 Claude Code를 실행하면 되고,
00:09:56맵 뷰어에 graft가 생성한 노드와 엣지가 표시됩니다. 빈 폴더에서는 맵이 0개의 노드에서 시작하여
00:10:01파일이 생성됨에 따라 graft가 노드들을 추가합니다. 자, 우리는 Calendly와 유사하지만
00:10:06개인 사업자들을 위한 예약 및 스케줄링 앱을 Fable 5.1로 빌드하며 graft를 테스트했습니다. 이 모델은 토큰을
00:10:13매우 빠르게 소모하기 때문에 엉뚱한 작업에 노력을 쏟게 하고 싶지 않았습니다. 그래서 작업 전에
00:10:18일련의 단계를 거쳤습니다. 먼저 PRD를 작성했는데, 이는 앱이 해야 할 일을 정의하는 문서로서
00:10:23앱에 필요한 모든 기능을 알 수 있게 해줍니다. 또한 claude.md 파일도 추가했는데, 여기에는
00:10:29이 모델에 맞춤화된 지침이 포함되어 있어 목표에서 벗어나지 않고 오랜 시간 동안 작업을 수행할 수 있게 해줍니다.
00:10:34그 claude.md 파일은 저희 커뮤니티인 AI Labs Pro에 템플릿으로 업로드한 바로 그 파일입니다. 따라서 동일한 템플릿을 사용하여,
00:10:40파일이 단순한 템플릿에 불과했기 때문에 먼저 PRD를 바탕으로 claude.md의 빈 부분을 채우도록 요청했습니다.
00:10:46만약 PRD가 없다면 프롬프트에 무엇을 만들고 있는지 직접 알려주면 됩니다.
00:10:51claude.md가 업데이트되면 모델을 Fable 5.1로 전환하고, 앱을 구축할 때
00:10:57어떤 도구를 사용하여 앱을 만들고 싶은지와 함께 예약 앱을 빌드하라는 프롬프트를 주었습니다. 그리고 이 모델에는
00:11:02혼자서 작업하고 있음을 명시적으로 알려주어야 하는데, 이는 이전 Fable 5.1 영상에서 다루었으므로
00:11:07멈추지 말고 허락을 구하지 말라고 지시했습니다. graft를 사용했을 때 빌드에 39분이 걸렸고 컨텍스트 창의 약 31%를 사용했으며,
00:11:14graft가 없을 때는 동일한 빌드에 47분이 걸렸고 약 35%를 사용했습니다. 두 앱 모두
00:11:20실질적으로 동일한 기능을 가졌습니다. 따라서 첫 번째 빌드에서는 그래프가 아직 구축되지 않은 상태였기 때문에 차이가 작았지만,
00:11:25변경 작업을 시작하면서 차이가 커졌습니다. 그때쯤이면 graft가 이미 전체 프로젝트의 맵을
00:11:30가지고 있었기 때문입니다. 랜딩 페이지를 완전히 개편하는 데 2분도 걸리지 않았으며,
00:11:35graft가 없다면 동일한 변경을 하는 데 훨씬 더 많은 시간이 걸렸을 것입니다. 변경 후
00:11:40graft는 새 파일들로 맵을 업데이트했고, 해당 턴에서 절약된 토큰의 자체 추정치를 보여주었습니다.
00:11:46그리고 실제 프로젝트에서 작업할 때 알아야 할 마지막 한 가지가 있습니다. 프로젝트에는
00:11:50코드만 포함되는 것이 아니라 에이전트에게 무엇이 만들어지고 있는지 컨텍스트를 제공하는 다른 파일들도 포함됩니다.
00:11:56여기에는 PRD, 모든 영역별 파일, learnings.md 파일 등 수많은 파일이 포함되지만,
00:12:03graft는 코드만 맵핑하므로 PRD나 노트를 맵핑하지 않습니다. 즉, 에이전트는 그러한 파일을 읽어야 할 때
00:12:09평소의 기본 방식을 사용한다는 뜻입니다. 그 외에도 우리 같은 많은 사람들이 코딩 외의 많은 작업에도 Claude Code를
00:12:14사용합니다. 따라서 이 도구가 그러한 작업에도 유용하게 쓰일 수 있도록 약간 수정하여,
00:12:20여러 개의 계획 파일이 있는 실제 프로젝트에서도 사용할 수 있게 만들었습니다. 그리고 그 버전을
00:12:25저희 커뮤니티인 AI Labs Pro에 추가했습니다. 저희가 하는 일에서 가치를 느끼고 채널을 지원하고 싶으시다면
00:12:31이것이 가장 좋은 방법이며 링크는 설명란에 있습니다. 이것으로 이번 영상의
00:12:36마무리입니다. 채널을 지원하고 이와 같은 영상을 계속 만드는 데 도움을 주고 싶으시다면
00:12:41아래의 슈퍼 땡스 버튼을 통해 동참해 주실 수 있습니다. 늘 시청해 주셔서 감사드리며 다음 영상에서 뵙겠습니다.
커뮤니티 글
아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!
이 영상에 대해 글쓰기