거대 프로젝트는 항상 실패한다… 앤스로픽(Anthropic)이 그 문제를 해결하는 방법
AAI LABS
Computing/SoftwareSmall Business/StartupsInternet Technology
Transcript
00:00:00요즘 작은 프로젝트를 배포하는 건 정말 쉬워졌지만, 코드 베이스가 커지고
00:00:04여러 의존성이 생기기 시작하면 에이전트들은 제대로 작동하지 않게 됩니다. 문제는
00:00:09오류나 이슈를 추적하기 훨씬 더 어려운 비주류 언어를 사용할 때 더욱 심각해집니다.
00:00:14사람들이 놓치는 점은 대규모 코드 베이스에서 에이전트를 작업시키기 전에
00:00:19적절한 조치를 취해야 한다는 것입니다. Anthropic이 바로 여기서 다루는 내용이죠.
00:00:23그들은 프로젝트가 확장될 때 어떻게 다뤄야 하는지 설명합니다. 저희 스스로도
00:00:28실제 프로젝트에서 사용해 보고 꽤 도움이 되었던 내용이라 매우 통찰력이 있었습니다. 대규모
00:00:33규모로 프로젝트를 설정하는 방법을 자세히 알아보기 전에, 먼저 에이전트가
00:00:38일반적으로 코드를 어떻게 탐색하는지 이해해 봅시다. 두 가지 방식이 있습니다. 첫 번째는 RAG 기반입니다. 이는
00:00:43전체 코드 베이스를 임베딩하고 쿼리 시점에 관련 청크를 검색하는 방식입니다. 쿼리를 기반으로
00:00:48데이터베이스의 코드와 쿼리를 일치시키는 의미론적 검색을 실행합니다. 유사도 매칭을 통해
00:00:53모델이 분석하고 다음 작업을 이어갈 특정 컨텍스트를 로드합니다. 이는 소규모 앱에는
00:00:58작동할지 몰라도 대규모 앱에서는 지속 가능하지 않습니다. 왜냐하면 데이터를 유지 관리하는 중앙
00:01:03데이터베이스가 있는데, 데이터베이스에 파일이 너무 많으면 의미론적 매칭이
00:01:08문제가 될 수 있기 때문입니다. 이것이 바로 코딩 에이전트가 더 이상 존재하지 않는 모듈을 환각하는 이유입니다.
00:01:14정확히 이러한 문제들 때문에 RAG 기반 방식은 완전히 대체되었습니다. 다른
00:01:18유형은 파일 시스템 기반 탐색인데, 이는 현재 Claude Code와 대부분의 다른 에이전트들이 사용하는 방식입니다. 이것은
00:01:24소프트웨어 개발자들이 실제로 탐색하는 방식과 비슷합니다. 에이전트는 bash 도구를 사용하여 ls 명령어로
00:01:29파일을 찾고, grep으로 필요한 정확한 코드 스니펫을 좁혀서 컨텍스트로 불러옵니다.
00:01:34Bash 도구는 불필요한 스니펫으로 컨텍스트 창을 오염시키지 않기 때문에 효과적입니다.
00:01:39그래서 이 모드는 RAG 기반 시스템이 실패하던 모든 방식을 처리하며, 거의 모든
00:01:44코딩 에이전트들이 이제 이 방식으로 탐색합니다. 여기서 핵심은 모델이 스스로 아무리 발전하더라도
00:01:49모델 혼자서만으로는 얼마나 좋은 코드를 생산할 수 있는지가 결정되지 않는다는 것입니다.
00:01:54작동하는 시스템을 만드는 데 있어 훨씬 더 중요한 것은 코딩을 위해 어떤 하네스를 사용하느냐입니다.
00:01:59따라서 Claude Code, Codex, Gemini CLI 중 어떤 도구를 사용하든, 여러분이 얻는 결과물은
00:02:05강력한 모델에 의해서만 결정되지 않습니다. 모델의 능력과 결합한 하네스에도 달려 있습니다.
00:02:10하네스는 약한데 모델만 강하다면, 모델 혼자 강한 것은 의미가 없습니다.
00:02:15이제 Claude Code나 Codex 같은 에이전트들이 강력한 내장 하네스를 가지고 있다는 건 알지만, 그것들에
00:02:19전적으로 의존할 필요는 없습니다. 프로젝트에 더 잘 맞도록 맞춤형 하네스를 설정해야 합니다.
00:02:24오픈 소스 하네스도 있는데, 무언가를 만들 때는 그런 것들을 사용할 수 있지만
00:02:29대규모 프로젝트를 개발할 때는 이러한 하네스들이 지속되지 않을 수 있어서 어차피 직접 설정해야 할 것입니다.
00:02:33여러분 스스로 만들거나 공유된 채팅에서 가져온 모든 에이전트 하네스에는
00:02:38다섯 가지 요소가 포함되어 있으며, 이는 Claude의 작업과 에이전트 루프가 환경적으로 어떻게
00:02:42설정되어 있는지에 집중되어 있습니다.
00:02:47각각 살펴볼 것입니다. 에이전트 하네스의 첫 번째 요소는 세션 시작 시 로드되어
00:02:53전체 세션 동안 메모리에 유지되는 Claude.md 파일입니다. 이 파일은 Claude에게
00:02:57코드 베이스에 대한 지식 기반을 제공하기 때문에 정말 중요합니다. 이미 채널에서 따로
00:03:02적절한 Claude.md를 작성하고 구조화하는 방법에 대한 영상을 다뤘으니 확인해 보실 수 있습니다.
00:03:07코드 베이스가 커지면 Claude.md는 중요해집니다. 이 파일에 시간을 투자하지 않으면
00:03:12프로젝트는 규모가 커질 때 실패할 수밖에 없습니다. 이 파일은 프로젝트 규칙, 코드 베이스 지식,
00:03:17그리고 단일 측면이 아니라 전체 코드 베이스에 적용되는 규칙들을 위한 것입니다. 코드 베이스가
00:03:22작다면 괜찮을 수 있지만, 여러 아키텍처로 확장되는 순간 문제가 됩니다.
00:03:26따라서 코드의 모든 측면을 하나의 파일에 집어넣는 것은 매우 비효율적입니다. 지금 당장
00:03:32필요 없는 정보로 에이전트의 주의를 분산시킵니다. 그래서 Claude.md는 짧게 유지해야 합니다.
00:03:37이상적으로는 약 300줄 정도가 좋고, 여러 영역이 있는 모노 레포를 운영한다면 각 하위 디렉토리에
00:03:43동일한 규칙을 따르는 고유한 Claude.md를 두어야 합니다. 에이전트는 해당 디렉토리에서 작업할 때
00:03:48이를 점진적으로 로드하므로 루트 파일에서 모든 것을 가져오는 대신 더 집중된 지침을
00:03:53하위 리포 파일들로부터 받게 됩니다. 이 파일은 한 번 쓰고 영원히 의존하는 것이 아닙니다.
00:03:58프로젝트가 진화함에 따라뿐만 아니라 모델 지능이 진화함에 따라 능동적으로 유지 관리해야 합니다.
00:04:04Sonnet 4.5에 적용되는 원칙은 Opus에는 분명 적용되지 않을 것입니다. 더 최신 모델들은
00:04:09이전 지침에서 실패하던 패턴을 극복하도록 훈련되었습니다. 따라서 동일한
00:04:14지침을 모든 모델에 주는 것은 토큰 낭비일 뿐입니다. 하지만 넘어가기 전에, 저희의
00:04:19스폰서인 CleanMyMac에 대해 잠시 말씀드리겠습니다. 저희처럼 AI 도구를 사용하신다면, Mac에 정크 파일, 오래된 빌드,
00:04:26캐시, 손상된 다운로드 파일이 조용히 쌓이고, 느려지기 전까지는 눈치채지 못합니다. 저는 매주 CleanMyMac을 실행하는데
00:04:31단 한 번의 스캔으로 15기가 넘는 용량을 확보합니다. 이것으로 한 번 클릭하면 Mac이 다시 새것처럼 됩니다.
00:04:37CleanMyMac은 MacPaw에서 제작했고, Apple의 인증을 받았으며 17년 동안 2,900만 명 이상의 사람들이 신뢰해 왔습니다.
00:04:42정리 기능은 20가지 이상의 정크 파일을 제거하여 신경 쓰지 않아도 시스템이 빠르게 유지됩니다. SpaceLens는
00:04:48드라이브를 시각적으로 매핑하여 무엇이 공간을 차지하고 있는지 알 수 있게 해 줍니다. iCloud, Google Drive, Dropbox까지
00:04:53로컬에서 스캔하여 클라우드 스토리지를 낭비하는 동기화되지 않은 파일들을 찾아냅니다. 그리고 Moonlock을 통해 99%의 알려진
00:04:59악성코드를 차단하므로 Mac이 깨끗하고 안전하게 유지됩니다. Mac은 여러분이 아니라 Mac이 여러분을
00:05:03따라와야 합니다. 코드 'AI Labs'를 사용해 20% 할인받고 CleanMyMac을 7일간 무료로 체험해 보세요.
00:05:09이제 훅(Hooks)은 이런 대규모 코드 베이스로 작업할 때 도움이 되는 또 다른 중요한 것입니다.
00:05:14이들은 기본적으로 에이전트가 특정 조건에 따라 특정 작업을 수행하도록 하는 스크립트입니다.
00:05:19보통 에이전트의 행동을 제어하는 셸 스크립트로 작성된 다양한 종류의 훅을
00:05:23설정할 수 있습니다. 예를 들어, 세션 시작 훅을 설정하면 각 세션
00:05:28시작 시 Claude가 컨텍스트를 위해 로드할 파일과 같이 원하는 정보를 로드할 수 있습니다. 종료 코드
00:05:33와 함께 훅을 사용하여 오류 메시지를 Claude에게 다시 전달하여 반복 작업할 수도 있습니다. 도구 사용 전
00:05:38훅도 다른 유형입니다. 에이전트가 설정한 도구를 사용할 때마다 훅이 명령을 실행합니다.
00:05:43이를 사용하여 Claude가 건드리지 않아야 할 파일을 편집하지 못하게 할 수 있습니다. 하지만
00:05:48가장 중요한 훅 중 하나는 세션이 끝난 후 실행되는 정지 훅입니다. 이는 Claude가 지금까지
00:05:53수행한 작업에 대해 반성하도록 독려합니다. 이를 통해 세션에서 얻은 교훈으로 Claude.md를 업데이트하여
00:05:58같은 문제가 다시 발생하지 않도록 할 수 있습니다. 린팅, 테스트 실행,
00:06:03그리고 많은 다른 목적을 위해 훅을 설정할 수 있습니다. 이 모든 것을 함께 사용하면 대규모 코드 베이스에 큰 도움이 됩니다.
00:06:08훅은 Claude.md의 지침만으로는 충분하지 않을 수 있는 부분에서 에이전트가 주의해야 할 작업을
00:06:13강제합니다. Claude.md의 지침은 너무 집중해야 할 것들이 많아 에이전트의 집중력 범위 내에서 흐려질 수
00:06:19있지만, 훅은 실제로 Claude가 행동하도록 강제합니다. 워크플로우의 세 번째
00:06:23요소는 기술(Skills)입니다. 이는 필요할 때마다 로드되고, 모든 세션에 존재하여
00:06:29불필요하게 부풀리지 않는 skills.md 파일들과 기타 그룹화된 파일들의 세트입니다. 기술은
00:06:34점진적 공개를 사용하고 워크플로우에 필요한 특정 전문 작업을 수행하도록 조정되기 때문에 중요합니다.
00:06:40그것들은 에이전트가 이미 할 수 있는 무언가에 대한 지식을 확장합니다. 만약 여러분이
00:06:44이 지침들을 Claude.md에 넣으면 불필요한 토큰만 소비할 뿐입니다. 프로젝트별
00:06:49지침은 에이전트가 실제로 필요할 때만 로드되므로 기술에 들어가야 합니다.
00:06:54기술을 특정 경로로 범위 지정하여 코드의 관련 부분에서만 활성화되게 하고 그
00:06:59외부에서는 컨텍스트를 부풀리지 않게 할 수도 있습니다. 예를 들어 배포 영역에서
00:07:04작업 중이라면 해당 디렉토리의 경로를 기술 설명에 지정할 수 있으므로 다른 곳에서
00:07:09작업할 때는 기술이 절대 로드되지 않습니다. 기술을 설정하려면, 이제 Claude 코드에 내장된
00:07:14기술 생성기를 호출하기만 하면 됩니다. 이전에는 GitHub에서 오픈 소스로 가져와야 했지만 이제는 논의 세션 동안
00:07:19질문에 답변하기만 하면 됩니다. 세션을 다시 시작하면 액세스할 수 있는 여러분의 정확한 요구에 맞춘 기술을 갖게 될 것입니다.
00:07:23기술 외에도 플러그인을 사용할 수 있습니다. 플러그인은
00:07:29단일 다운로드 및 배포 가능한 패키지로 제공되는 기술, 훅, MCP의 번들입니다. 그래서
00:07:34이 플러그인을 설치하는 사람은 누구든지 즉시 사용할 수 있는 정확히 동일한 컨텍스트와 구성을
00:07:39제공받게 됩니다. 그러니 팀으로 작업 중이라면 배포할 여러분만의 플러그인을 만드는 것이
00:07:44매우 중요해집니다. 모든 설정을 한곳에 하면 그 정보를
00:07:49조직 전체에 배포하여 팀원들이 여러분과 동일한 컨텍스트를 갖도록 할 수 있습니다. 직접 플러그인을 만들고
00:07:54수동으로 업로드하거나 GitHub 리포지토리와 동기화하여 관리하면 됩니다.
00:07:59플러그인 명령어를 사용하여 모든 플러그인을 설치할 수 있고,
00:08:03마켓플레이스를 탐색하고 원하는 것을 설치할 수 있습니다. 'add plugin marketplace' 명령어를 사용하여
00:08:08다른 마켓플레이스를 추가할 수도 있습니다. Claude 코드에는
00:08:13프론트엔드 디자인, 코드 리뷰, 코드 단순화, Playwright 등 모두 Claude 공식 마켓플레이스에서 제공하는
00:08:18여러 플러그인이 번들로 제공됩니다. 이를 워크플로우에 바로 사용할 수 있고 직접 만들 수도 있습니다.
00:08:22많은 사람이 같은 프로젝트에서 작업하므로 플러그인은 대규모 프로젝트에 특히 중요하며,
00:08:27그들 간에 컨텍스트를 배포하는 것은 중요합니다. 그러니 각자 기술과
00:08:32다른 구성 요소를 따로 다운로드하게 하는 대신, 플러그인을 바로 설치할 수 있습니다. 또한
00:08:36저희 콘텐츠가 마음에 드신다면 'hype' 버튼을 누르는 것을 고려해 주세요. 저희가 이런 콘텐츠를 더 많이 만들고
00:08:41더 많은 사람에게 다가가는 데 도움이 됩니다. 에이전트 하네스에서 중요하지만 충분히
00:08:46언급되지 않는 또 다른 것은 LSP입니다. 언어 서버 프로토콜(LSP)은 기본적으로 에이전트에게
00:08:52개발자가 IDE에서 가지는 것과 동일한 종류의 탐색 기능을 제공하는 통합입니다. 거의 모든 프로그래밍 언어에 대한 LSP가 있으며,
00:08:58대중적인 언어에는 불필요할지 몰라도 비주류 언어에서는 중요해집니다. 그것은
00:09:03에이전트에게 프로그래밍 언어에 대한 지능을 주어 사람이 하는 것처럼 코드 베이스를 탐색할 수 있게 합니다.
00:09:08예를 들어, 사람이 함수를 찾고 싶을 때 그 함수가 어디서 가져오는지 확인하고 해당 파일로 이동하여 함수 정의를 확인합니다.
00:09:13그것이 그들이 실제로 필요한 정확한 소스를 찾는 방식입니다. LSP 없이는 에이전트가
00:09:17텍스트 기반으로 패턴 매칭을 하여 잘못된 심볼에 도달할 가능성이 높습니다. 언급했듯이 Claude 코드는
00:09:22파일 시스템 기반 접근 방식을 bash 명령어로 사용하므로, LSP가 없으면 파일명과 텍스트로
00:09:28패턴 매칭을 할 뿐 더 깊은 지능으로 탐색하지 않습니다. 이제 에이전트가
00:09:33오류를 아직 경험하지 않았다고 해서 LSP가 필요 없다고 가정하지 마세요. 프로젝트 작업을 시작하기 전에도 LSP를 설정하세요.
00:09:38코드를 작성하기 전에도 사용할 모든 언어에 대해 설정하여 에이전트가
00:09:44그것들로 작업하는 방법에 대한 정보를 이미 갖추도록 하세요. 에이전트가 패턴을 추측하게 두는 대신, LSP를 설치하면
00:09:49단순한 텍스트가 아닌, 개발자가 생각하는 방식대로 코드를 읽고 편집할 수 있게 됩니다. 이제 이미 아시다시피, MCP는
00:09:55에이전트를 외부 도구와 연결하는 데 사용되지만, MCP를 프로젝트 내부의
00:10:00도구, 데이터 소스, API 또는 에이전트가 접근할 수 없는 다른 시스템과 연결할 수도 있습니다.
00:10:05이를 위해서는 자신만의 MCP를 만들고 팀원들이 쉽게 사용할 수 있도록 제공해야 합니다. MCP는
00:10:10필요할 때 로드되는 기존 설정에 대한 확장이며, 그것들이 제공하는 도구는 에이전트가
00:10:16사용할 수 있게 됩니다. 대규모 코드 베이스에서 작업 중이라면, 문서 가이드 역할을 하거나,
00:10:20분석을 검색하거나 심지어
00:10:25변경을 가할 수 있는 등 많은 목적에 부합하는 MCP를 구축할 수 있습니다. 이것들은 여러분만의 코드 베이스가 있다면
00:10:31에이전트가 방대한 문서를 뒤지는 대신 내부 정보와 자연스럽게 상호 작용하고,
00:10:35도구를 호출하고 그곳에서 변경 사항을 만들 수 있게 해주기 때문에 유용합니다.
00:10:40이것은 에이전트에게 필요한 정보와 시스템에 대한 더 직접적인 액세스를 제공합니다.
00:10:45하지만 MCP를 구성하려면 앱의 기본 설정이 이미 작동 중이어야 합니다.
00:10:51그 전에 MCP를 구성하면 문제가 발생할 수 있고 MCP 구현이
00:10:57실패할 수 있습니다. 따라서 먼저 앱이 제대로 작동하는지 확인한 다음 MCP를 만들고 에이전트가
00:11:02더 많은 지능과 더 나은 정보로 프로젝트와 상호 작용하게 하세요. 만들어야 할 또 다른 것은
00:11:06하위 에이전트(Subagents)입니다. 하위 에이전트는 자체적인 격리된 컨텍스트 창을 포함하며 메인 오케스트레이터 에이전트가
00:11:12위임한 작업을 수행한 다음 최종 결과물만 부모에게 반환합니다.
00:11:17이것은 에이전트 하네스의 핵심 부분이며, 하위 에이전트를 적절하게 사용하면 컨텍스트를
00:11:22불필요하게 부풀리지 않으며 메인 에이전트의 컨텍스트를 불필요한 정보로 채우지 않기 때문에 컨텍스트 활용이
00:11:28훨씬 더 효율적입니다. 하위 에이전트는 호출될 때만 실행되고 결과만 반환합니다.
00:11:33Claude는 스스로 하위 에이전트를 생성하지만, 여러분이 직접 하위 에이전트를 구성할 수도 있습니다. 여러분은
00:11:38그들을 위해 원하는 도구와 모델을 구성하고, 그들이 어떻게 운영되어야 하는지에 대한 지침을 제공하여
00:11:42자신의 워크플로우를 위한 특정 에이전트를 만들 수 있습니다. Claude의 기존 에이전트를
00:11:47재정의할 수도 있습니다. 예를 들어, 기존의 탐색 지침을 재정의하는 자신만의 에이전트를 만들고
00:11:52디렉토리를 어떻게 탐색해야 하는지에 대한 설명을 제공할 수 있습니다. Claude의 자체
00:11:57탐색 에이전트는 모든 종류의 코드 베이스에 대해 일반화되어 있지만, 직접 구성하면 커스텀 에이전트가
00:12:03기본값을 재정의합니다. 이는 에이전트에게 프로젝트 파일들이 어떻게
00:12:08구조화되어 있는지에 대한 더 많은 컨텍스트를 제공하므로, Claude.md의 정보에만 의존하여 파일을 탐색하는 데 토큰을 낭비하지 않습니다.
00:12:13따라서 메인 에이전트가 전체 프로젝트 실행을 제어하게 하고 실제 작업은
00:12:18하위 에이전트에게 맡길 수 있습니다. 하위 에이전트는 에이전트 위임을 통해 작업을 병렬화할 수 있으므로
00:12:23모든 것을 순차적으로 하는 것보다 워크플로우를 훨씬 더 매끄럽고 빠르게 만듭니다.
00:12:28대규모 코드 베이스를 탐색할 때 따라야 할 몇 가지 더 많은 관행이 있습니다.
00:12:32이는 Claude가 대규모 코드 베이스를 탐색하는 능력이
00:12:36올바른 컨텍스트를 찾을 수 있는지에 의해 결정되기 때문에 중요합니다. 그러니 Claude가 올바른 컨텍스트를 얻도록 보장하여
00:12:41에이전트가 너무 적게 혹은 너무 많이 얻지 않고 집중 상태를 유지하도록 하는 것이 중요합니다. Claude.md를
00:12:46분리하는 것 외에도, 테스트들을 모두 한곳에 두는 대신 각 하위 디렉토리별로 분리해야 합니다.
00:12:51이렇게 하면 세그먼트화되어 유지되고, 많은 테스트를 한 번에 실행할 때 발생하는 시간 초과 문제를 피하며,
00:12:56더 효과적으로 범위를 지정할 수 있습니다. 프로젝트 구조를 매핑하는 별도의 코드 베이스 맵 파일을
00:13:01만들 수도 있습니다. React나 Next.js 같은 일반적인 앱으로 작업 중이라면 에이전트들이
00:13:06그런 것들에 대해 광범위하게 훈련되었기 때문에 이것을 건너뛸 수 있습니다. 하지만 C++와 같은 비주류 언어에서는
00:13:12코드 베이스 맵이 필요합니다. 그것은 에이전트에게 각 파일이 어디에 있는지 알려주는 목차 역할을 하여
00:13:16오른쪽 파일을 좁히기 위해 많은 bash 명령어를 실행하는 대신 사용할 수 있습니다. 마지막으로
00:13:21가장 중요한 것은 모델이 진화함에 따라 몇 달마다 설정을 검토하는 것입니다. 새로운 모델이 더 이상 필요하지 않은
00:13:26지침, 훅, 또는 다른 것들을 제거하세요. .gitignore와 같은 .ignore 파일을 사용하여 에이전트나 버전 제어가
00:13:32건드리지 않기를 원하는 파일들은 그대로 두세요.
00:13:37이렇게 하면 여러분의 설정이 대규모 앱에서도 지속될 수 있을 것입니다. 이제 이 비디오에 대한 리소스는
00:13:41AI Labs Pro에서 이 비디오와 이전의 모든 비디오에 대해 찾을 수 있으며, 거기서 다운로드하여
00:13:46여러분만의 프로젝트에 사용할 수 있습니다. 저희가 하는 일에서 가치를 발견했고 채널을 지원하고 싶다면
00:13:51이것이 가장 좋은 방법입니다. 설명에 링크가 있습니다. 이것으로 이번 비디오의 끝에 도달했습니다.
00:13:55채널을 지원하고 저희가 이런 비디오를 계속 만들 수 있도록 돕고 싶다면
00:14:00아래의 super thanks 버튼을 사용하여 그렇게 할 수 있습니다. 항상 시청해 주셔서 감사하며 다음 영상에서 뵙겠습니다.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video