스크립트
00:00:00저희는 Claude Code를 단일 세션에서만 실행하지 않으며, 팀 전체가 이런 방식으로 작업합니다.
00:00:03한 세션이 바쁠 때 다른 세션에서 작업이 완료된 것을 검토하고 다음 작업을 지시하며,
00:00:09그 누구도 에이전트 하나를 기다리느라 시간을 허비하지 않습니다.
00:00:11핵심은 이것입니다. 한 세션이 돌아가는 동안 다른 세션을 처리함으로써 시간을 낭비 없이 활용하는 것이죠.
00:00:17하지만 이를 병렬로 실행하는 순간 문제가 발생하며, 겉보기엔 아무런 이상이 없어 보입니다.
00:00:22각 세션은 바쁘게 돌아가고 결과물도 괜찮아 보이지만, 실제로는 서로 방해가 되고 있으며,
00:00:27결국 무언가 고장 나기 전까지는 알아차리지 못합니다.
00:00:29서로 방해하지 않는다고 해도 세션이 너무 많아지면,
00:00:34각 세션이 무엇을 하고 있는지, 원래 목적이 무엇이었는지 파악하기 어렵게 됩니다.
00:00:38그래서 늘 그렇듯 관리 방법을 찾아야 했고, 이미 내장된 기능도 있지만,
00:00:42매우 효과적인 외부 도구들도 있습니다.
00:00:45저희를 모르시는 분들을 위해 소개하자면, 저희는 소프트웨어 회사이고 이곳은 AI Labs 채널입니다.
00:00:49저희가 직접 프로세스를 최적화한 것처럼, 여러분도 AI를 활용해 프로세스를 최적화하는 방법을 알려드립니다.
00:00:54이번 영상에서는 다수의 세션을 병렬로 원활하게 유지하기 위해 사용하는 모든 방법을 다룰 것입니다.
00:00:59Claude Code 세션을 여러 개 동시에 사용하면 보통 몇 가지 문제에 직면하게 됩니다.
00:01:05현재 어떤 세션에 있는지, 각 세션이 실제로 무엇을 하고 있는지 알기 어렵습니다.
00:01:09모든 세션을 따라가며 결과물을 확인하기가 벅차게 되죠.
00:01:12중요한 맥락이 담긴 특정 세션으로 돌아가야 할 때가 있지만,
00:01:16어디에 저장했는지 기억나지 않고 세션을 너무 많이 띄워 두었다면,
00:01:20이 세션이 원래 무엇을 위한 것이었는지 쉽게 잊어버리게 됩니다.
00:01:22하지만 이건 단지 관리의 문제일 뿐입니다.
00:01:24진짜 문제는 동시에 작업할 때 발생합니다. 여러 세션을 사용 중이라면 잘 아시겠지만,
00:01:29각 세션은 고유한 메모리를 가지고 있기 때문에 실시간 맥락을 공유하지 않습니다.
00:01:34따라서 모든 맥락과 설정이 전역적인 “Claude.md” 파일에 들어 있다면,
00:01:38기본적으로 Claude가 프로젝트를 이해하기 위해 읽는 메인 지침 파일이거나,
00:01:42한 세션이 계속 업데이트하는 다른 파일의 경우,
00:01:44다른 세션은 해당 맥락이 변경되었음을 알지 못합니다.
00:01:47전역 파일을 스스로 새로고침하지 않기 때문에,
00:01:49그저 오래된 정보를 가지고 계속 작업하게 됩니다.
00:01:52각 세션은 시작 시점에만 전역 파일을 읽거나 나중에 수동으로 요청할 때만 다시 읽습니다.
00:01:57만약 같은 파일을 편집해야 한다면 서로의 변경 사항을 덮어쓰게 될 것입니다.
00:02:02이제 Claude Code는 코딩만을 위한 것이 아니므로,
00:02:04코딩 외적인 작업에도 여러 세션을 사용할 수 있습니다.
00:02:07하지만 특히 코딩 작업에서는 문제의 복잡성이 정말 크게 더해집니다.
00:02:12그래서 이번 영상을 두 부분으로 나누었습니다.
00:02:14먼저 Claude Code 사용 시 전반적으로 직면하는 기본적인 문제들을 해결하는 방법을 알아보고,
00:02:19그다음 코딩 작업에서 겪게 되는 문제들과 그 해결 방법에 집중할 것입니다.
00:02:23일반 섹션에서 다룰 해결책들은 코딩 작업에도 도움이 될 것입니다.
00:02:28그럼 기초부터 시작하겠습니다.
00:02:29아마 이미 아시는 부분도 있겠지만, 이 내용들은 다른 모든 것의 기초가 되며,
00:02:33바로 이어서 더 심화된 내용을 다룰 예정입니다.
00:02:35예상치 못한 이유로 세션이 닫혀도 데이터가 사라지지는 않습니다.
00:02:40Claude 명령에 “continue” 플래그를 추가해 실행하면 마지막 세션을 다시 불러올 수 있고,
00:02:44기기에서 마지막으로 실행 중이던 세션을 이어서 계속할 수 있습니다.
00:02:47마지막 세션이 아닌 특정 세션을 원한다면,
00:02:50Claude 명령에 “resume” 플래그를 사용해 목록에서 선택하거나,
00:02:54명령어 뒤에 세션 이름을 직접 추가하여 해당 세션의 맥락을 모두 유지한 채 바로 다시 들어갈 수 있습니다.
00:03:00세션으로 다시 돌아왔을 때 무엇을 하고 있었는지 기억나지 않을 수 있습니다.
00:03:03그럴 때는 터미널에서 “recap” 명령을 실행하면,
00:03:07해당 세션이 진행 중이던 작업에 대한 요약을 빠르게 보여줍니다.
00:03:10한 세션에서 새로운 세션으로 옮기면서 모든 내용을 그대로 가져가고 싶다면,
00:03:14“export” 명령을 사용하세요.
00:03:16전체 대화 내용을 텍스트나 마크다운 파일로 변환해주며,
00:03:20이 파일을 새 세션에 끌어다 놓으면 이전 세션이 남긴 지점부터 바로 시작할 수 있습니다.
00:03:24모두 정말 기본적인 명령어들이지만 일상적인 사용에서,
00:03:27여러분의 생산성과 모델이 제공하는 답변의 질에 큰 차이를 만듭니다.
00:03:31저희 영상에 나오는 애니메이션을 예로 들어보죠.
00:03:32자체 내부 애니메이션 시스템과 Claude Code로 제작되었습니다.
00:03:36그래서 애니메이션을 수정해야 할 때, 제작했던 세션을 다시 열거나 닫혔다면 이어서 작업합니다.
00:03:42너무 오래 방치해서 해당 세션이 무엇을 하던 중이었는지 기억나지 않을 때도,
00:03:46“recap”을 통해 빠르게 파악합니다.
00:03:47이제 여러 세션이 같은 공유 파일을 작업 중이라고 가정해 봅시다.
00:03:51충돌이 발생하거나 서로의 변경 사항을 덮어쓰지 않도록 하려면,
00:03:54시작할 때 파일 소유권을 결정해야 합니다.
00:03:57한 세션에 파일 소유권을 부여하면 해당 세션만 파일을 변경할 수 있게 됩니다.
00:04:01나머지 세션은 파일을 읽거나 참조할 수는 있지만, 쓸 수는 없습니다.
00:04:05설정 방법은 간단합니다. 각 세션의 프롬프트에서 해당 파일들에 쓰기 작업을 하지 말라고 지시하면 됩니다.
00:04:10이제 독립적인 부분들로 구성된 새로운 결과물을 처음부터 구축한다고 해봅시다.
00:04:14더 빨리 끝내기 위해 병렬로 작업 가능한 것들이죠.
00:04:17이런 경우 저희 팀은 먼저 Claude Code의 “plan” 모드를 사용해 계획을 세웁니다.
00:04:22계획 단계에서는 작업에 대해 알고 있는 모든 정보를 에이전트에게 제공하고,
00:04:26단일 목표를 달성하기 위해 각 세션이 병렬로 실행할 수 있는 독립적인 작업으로 세분화하도록 요청합니다.
00:04:33이 계획 및 분석 단계는 매우 중요합니다. 세션들이 원활하게 작동할 수 있는 완벽에 가까운 환경을 제공해주기 때문이죠.
00:04:39파일을 두고 경쟁하거나 서로의 변경 사항을 덮어쓰는 일도 방지합니다.
00:04:43또한 모든 세션이 작업을 완료하는 데 필요한 공통된 맥락을 동일하게 공유하도록 보장합니다.
00:04:47계획이 완료되면, 각 독립적인 작업을 별도의 세션에 전달하여,
00:04:52모두가 협력하여 전체 프로젝트를 마무리할 수 있도록 합니다.
00:04:55그럴 때 우리는 “handoff” 기술을 사용합니다.
00:04:57아까 언급한 “export” 명령 기억하시나요?
00:04:59Handoff는 그보다 더 스마트한 버전입니다.
00:05:01Export는 대화 내용 전체를 단순히 파일로 덤프하기 때문에,
00:05:04새로운 세션이 맥락적으로 복잡하고 느려진 상태를 그대로 물려받게 됩니다.
00:05:08Handoff는 모든 것을 깔끔한 핸드오프 문서로 압축하여,
00:05:11파일을 복사하는 대신 기존 파일들을 가리키게 하여,
00:05:15새 세션이 신선하고 집중된 상태로 시작하도록 합니다.
00:05:17그 문서에는 필요한 모든 정보와 해당 맥락에 연결된 파일들에 대한 참조가 담겨 있으며,
00:05:22작업을 적절히 완료하기 위해 에이전트가 설치해야 할 기술 목록까지 포함되어 있습니다.
00:05:27이 명령어로 해당 기술을 설치하고 세션에서 “handoff” 키워드를 사용하여 호출합니다.
00:05:32따라서 계획이 완료되면, 계획 세션에 handoff 기술을 사용하여 각 작업에 대한 핸드오버 문서를 만들라고 요청하면 됩니다.
00:05:38그러면 작업당 하나씩 핸드오버 문서가 생성되고, 각각은 작성된 계획 파일을 가리키게 됩니다.
00:05:44이제 각 작업을 별도의 Claude 세션에 전달하기 위해 “Claude Agent dashboard”를 사용합니다.
00:05:49대시보드는 터미널 내부에서 작동하는 대화형 인터페이스로,
00:05:53백그라운드에서 실행 중인 모든 세션을 확인할 수 있습니다.
00:05:57세션 사이를 이동하거나 하나를 열어 무엇을 작업 중인지 볼 수 있죠.
00:06:00Claude Agent 명령으로 열면 완료되었거나 아직 실행 중인 세션 목록이 보입니다.
00:06:06또한 프롬프트를 입력하면 이를 위한 백그라운드 Claude Code 세션을 시작할 수 있으므로,
00:06:10각 핸드오프 문서를 개별적으로 지정하면 최종 목표를 향해 병렬로 작업을 수행하기 시작합니다.
00:06:15이 모든 세션들은 대시보드를 통해 계속 지켜볼 수 있습니다.
00:06:19백그라운드 세션을 시작하는 다른 방법도 있습니다. Claude 명령에 “background” 플래그를 추가하고 프롬프트를 입력하는 것입니다.
00:06:25이미 세션 내부에 있는데 백그라운드에서 계속 실행되길 원한다면,
00:06:29“BG”(background의 줄임말) 명령을 사용하세요. 백그라운드에서 계속 실행되면서 터미널은 자유롭게 비워집니다.
00:06:35어느 쪽이든 대시보드에서 모든 백그라운드 세션과 진행 상황을 확인할 수 있습니다.
00:06:39이 워크플로우를 사용하면 거의 모든 작업을 더 작은 조각으로 나누어 Claude Agent 대시보드에서 제어할 수 있습니다.
00:06:46이상으로 일반적인 사용을 위한 해결책들을 다루었습니다.
00:06:49하지만 본격적으로 소프트웨어를 개발하는 순간, 방금 말한 문제들 위에 새로운 문제들이 나타납니다.
00:06:55같은 프로젝트에서 여러 Claude Code 세션을 실행하면 같은 파일을 편집하여 서로 방해할 수 있습니다.
00:07:01다른 세션이 무엇을 하는지에 대한 맥락이 없기 때문에 서로의 변경 사항을 덮어쓰게 됩니다.
00:07:05코드가 온라인에 있는 원격 GitHub 저장소가 있다면, 세션들이 새 코드를 온라인에 푸시하거나 GitHub 브랜치를 전환해야 할 때 서로 싸우기 시작합니다.
00:07:15한 세션은 특정 브랜치에 푸시하고 다른 세션은 다른 브랜치로 전환할 수 있는데, 이는 브랜치와 저장소 전체를 빠르게 엉망으로 만듭니다.
00:07:22앱을 localhost에서 실행 중인데 여러 개의 localhost 서버가 돌아간다면, 모두 localhost 3000에서 시작하려 하기 때문에 서로 충돌하게 됩니다.
00:07:31모든 Claude 세션은 동일한 프로젝트 의존성(dependencies)을 공유합니다.
00:07:34따라서 한 세션이 의존성을 교체하거나 앱 전체가 빌드되는 방식을 바꾸거나 데이터베이스를 변경하면, 다른 세션들은 그 변경 사항을 전혀 모르기 때문에 작동이 중단됩니다.
00:07:43이러한 개발 특화 문제를 극복하기 위한 첫 번째 해결책은 “Git WorkTrees”입니다.
00:07:49Git WorkTree는 컴퓨터의 동일한 프로젝트에서 각각 별도의 폴더에 있는 여러 브랜치를 동시에 작업할 수 있게 해주는 내장 Git 기능입니다.
00:07:58따라서 매번 다른 브랜치가 필요할 때마다 프로젝트 전체를 별도 폴더로 복제할 필요 없이, 각 브랜치가 고유한 폴더를 가지며 계속해서 왔다 갔다 전환할 필요가 없습니다.
00:08:07WorkTrees를 사용하려면 ClaudeCode에게 새 WorkTree를 생성해달라고 요청한 다음, 해당 WorkTree에서 실험을 시작하면 됩니다.
00:08:14그러므로 여러 세션을 실행할 때 각 세션은 자신만의 별도 WorkTree에서 작업합니다.
00:08:18즉, 세션들이 같은 파일을 편집하여 변경 사항을 덮어쓰지 않으며, 각 세션이 작업할 독립적인 복사본을 가지고 있으므로 브랜치를 두고 충돌할 일도 없습니다.
00:08:28영상을 재미있게 보고 계시다면 채널을 구독하고 “좋아요” 버튼을 눌러주세요.
00:08:32이 작은 응원이 저희에게는 큰 힘이 됩니다.
00:08:35WorkTrees는 세션들이 코드 문제로 충돌하는 것을 막아주지만, 각 작업을 각 세션에 수동으로 전달하는 것은 여전히 여러분의 몫입니다.
00:08:41“OpenAI Symphony”는 그 부분을 자동화합니다.
00:08:43이 도구에 대해 이미 들어보셨을 수도 있지만, 저희 채널에서 실제로 다룬 적은 없었죠.
00:08:47이는 오픈 소스 오케스트레이터로, 한 번에 여러 코딩 에이전트를 관리하는 시스템이며 원래 OpenAI의 Codex 에이전트를 위해 만들어졌습니다.
00:08:55핵심 아이디어는 “할 일 목록(to-do list)”이 모든 것을 추적하는 단일 장소가 되어, 모든 세션의 실시간 진행 상황을 보여주는 것입니다.
00:09:03그렇게 하면 완료된 양과 남은 양을 확인할 수 있고, 모든 작업이 서로 독립적으로 유지되도록 보장합니다.
00:09:09Symphony는 이를 Linear를 통해 수행합니다. Linear는 작업의 현재 상태를 열별로 보여주는 프로젝트 관리 도구이며, OpenAI는 “harness engineering” 원칙에 따라 구축했는데, 이는 코드베이스 전체가 인간이 아닌 AI 에이전트에 의해 계획, 작성, 테스트된다는 의미입니다.
00:09:24Symphony는 오픈 소스이기 때문에 누군가 Claude Code와 작동하는 자체 버전을 만들었습니다.
00:09:30이 도구는 데몬(daemon)을 실행하는데, 이는 컴퓨터에서 항상 돌아가는 백그라운드 프로세스로 GitHub 저장소의 이슈, 즉 사용자가 생성한 작업들을 계속 확인합니다.
00:09:40특정 라벨(예: to-do)이 붙은 새로운 이슈가 나타나면, 자동으로 백그라운드 Claude Code 세션을 시작하고 작업을 수행합니다.
00:09:48그런 다음 해당 작업을 위한 별도의 브랜치를 생성하고 완료되면 풀 리퀘스트(pull request)를 여는데, 이는 완성된 작업을 메인 코드에 병합해달라고 요청하는 것입니다.
00:09:55하지만 Worktrees와 Symphony 포크 버전들도 문제의 일부분만 해결할 뿐입니다.
00:09:59Worktrees는 세션들이 파일을 덮어쓰고 Git의 혼란을 야기하는 것을 막아줄 뿐이고, 포크 버전들은 워크플로우를 원활하게 해줄 뿐이죠.
00:10:06세션들은 여전히 누군가 의존성 변경을 만들 때 중단될 것이며, 여전히 서로의 localhost 서버를 두고 싸울 것입니다.
00:10:13이러한 개발 문제를 실제로 해결하려면 “샌드박싱(sandboxing)”이 필요합니다.
00:10:16기본적으로 에이전트를 실제 머신을 건드리지 않고도 작업할 수 있도록 개발 환경의 처분 가능하고 완전히 격리된 복사본에서 실행하는 것이죠.
00:10:25그리고 이를 위해 오늘 영상을 후원해 준 “Docker Sandbox”를 사용합니다.
00:10:28각 샌드박스는 엄격한 보안 경계가 있는 전용 마이크로 VM에서 실행되므로, Claude가 패키지를 설치하거나 프로젝트를 빌드할 때 모든 것이 샌드박스 내부에 포함되어 실제 시스템은 그대로 유지됩니다.
00:10:41이는 코딩 에이전트가 격리된 상태에서 컨테이너를 빌드하고 실행할 수 있게 해주는 유일한 샌드박싱 방식이며, Claude Code의 병렬 하위 에이전트들과 각각 별도의 Git worktree에서 자연스럽게 결합됩니다.
00:10:52컴퓨터에 Docker Sandbox를 설치하려면 설치 명령어를 실행한 다음, 이 명령어로 로그인하세요.
00:10:57로그인 후, “sbx” 명령을 사용해 샌드박스를 생성합니다. “name” 플래그를 쓰고 샌드박스 이름을 지정한 뒤 “Claude”를 입력하세요.
00:11:04시작되면 여러분이 대화하는 AI 에이전트가 해당 격리된 샌드박스 내에서 실행됩니다.
00:11:09기본적으로 샌드박스 내의 에이전트는 변경 사항을 실제 프로젝트 파일인 작업 트리(working tree)에 바로 씁니다.
00:11:16한 걸음 더 나아가기 위해, Docker Sandbox는 “clone” 모드를 제공합니다.
00:11:19샌드박스를 생성할 때 “clone” 플래그를 추가하면, 프로젝트의 복제본을 가진 샌드박스가 만들어집니다.
00:11:24이렇게 하면 에이전트가 샌드박스 내부에서 수행하는 모든 변경 사항은 실제 파일에 영향을 주지 않고 복제본 내에서만 발생합니다.
00:11:31앱에서 큰 기능을 빌드해야 하는데 여러 개의 Claude Code 세션을 수동으로 실행하려고 생각 중이라고 가정해 봅시다.
00:11:38더 이상 그렇게 할 필요가 없습니다.
00:11:39오늘날의 모델들은 매우 강력해져서 전체 워크플로우를 처리할 수 있으며, 하위 에이전트나 작업을 시작하고 관리하는 능력이 훨씬 좋아졌습니다.
00:11:48요즘에는 Claude Code에게 전체 기능을 먼저 계획하게 한 다음, 하나씩 하위 작업을 수행하고, 각 작업마다 Docker Sandbox를 띄워 전달하도록 요청하기만 하면 됩니다.
00:11:58그렇게 하면 모든 하위 작업이 각자의 격리된 환경에서 완료되며, 변경 사항이 다른 세션들에 영향을 주지 않습니다.
00:12:04그 계획 세션 자체가 오케스트레이터 역할을 하여 모든 샌드박스를 관리하고 각 샌드박스로부터 변경 사항을 가져옵니다.
00:12:11샌드박스가 작업을 완료하면, 플래너는 작업이 완료되었음을 확인한 후 해당 샌드박스를 삭제할 수 있습니다.
00:12:16샌드박스가 실행되는 동안에는 샌드박스 대시보드에서 진행 상황을 지켜볼 수 있습니다.
00:12:21이 모든 기술과 워크플로우를 비롯해 저희가 영상에서 제작하고 보여드리는 모든 것은 저희 커뮤니티인 “AI Labs Pro”에서 찾을 수 있습니다.
00:12:27그곳에서 리소스, 스타터 팩 등을 얻을 수 있고 저희 팀을 포함해 같은 생각을 가진 사람들과 소통할 수 있는 공간이 있습니다.
00:12:35저희 활동에서 가치를 발견하셨고 채널을 지원하고 싶으시다면, 이것이 가장 좋은 방법입니다.
00:12:39링크는 설명란에 있습니다.
00:12:41이제 이번 영상도 마무리할 시간이네요.
00:12:43채널을 지원하고 이런 영상을 계속 만드는 데 도움을 주고 싶으시다면, 아래의 “슈퍼 땡스(super thanks)” 버튼을 사용해 주세요.
00:12:49언제나 그렇듯 시청해 주셔서 감사드리며 다음 영상에서 뵙겠습니다.