MemoryLake
모든 글로 돌아가기
Tutorial2026년 8월 11일·11 분 소요

컨텍스트 손실 없이 Devin에서 Claude Code로 마이그레이션하는 방법 (2026)

Devin 워크스페이스 어딘가에는 약 40개의 Knowledge 노트가 있을 것입니다. 대부분은 세션이 잘못 진행된 후에 작성한 것들일 것입니다. 예를 들어 '생성된 클라이언트를 수정하지 마세요', '스테이징 배포 전에 마이그레이션을 먼저 실행해야 합니다', 'PR 제목은 티켓 ID로 시작해야 합니다' 같은 내용들입니다. 이 노트들은 실제로 작동합니다. Devin은 관련이 있을 때 이 노트들을 가져오며, 여러분은 실제로 그렇게 작동하는 모습을 보았을 것입니다. 이제 작업을 Claude Code로 옮기려고 하는데, 어디에도 내보내기 버튼이 보이지 않습니다.

이에 대한 직접적인 답변은 다음과 같습니다. Devin의 Knowledge 기능은 리포지토리 파일 읽을 뿐, 리포지토리 파일에서 밖으로 내보내지는 않습니다. 공식 문서에 따르면 Devin은 `.rules`, `.mdc`, `.cursorrules`, `.windsurf`, `CLAUDE.md`, `AGENTS.md`에서 Knowledge를 자동으로 가져오고 업데이트하므로, 리포지토리에서 시작된 모든 것은 갇혀 있지 않습니다. 진짜 갇혀 있는 것은 여러분이 Devin에 직접 입력한 내용과 각 노트가 검색되는 시점을 결정하는 트리거입니다. 이 부분은 수동으로 수집해야 하며, 구독을 취소한 후에는 할 수 없는 1시간 정도의 작업입니다.

이 글에서는 실제로 마이그레이션해야 하는 대상, 필요 없는 40개의 노트를 모두 복사하지 않고 필요한 것만 수집하는 방법, 그리고 다음 도구 전환 비용을 이번보다 더 낮추는 방법을 다룹니다.

실제로 마이그레이션되는 대상

Devin이 리포지토리에서 학습한 내용은 마이그레이션할 필요가 없습니다. 이 점을 먼저 명확히 해야 작업량이 크게 줄어듭니다. Devin의 문서에 따르면, 기존 README와 연결된 리포지토리의 파일 구조 및 콘텐츠에서 Knowledge를 자동으로 생성하며, CLAUDE.mdAGENTS.md를 포함한 에이전트 지침 파일에서 Knowledge를 가져오고 업데이트합니다. Knowledge 노트가 단순히 README의 내용을 재진술한 것이라면, 해당 내용은 이미 Claude Code가 읽을 리포지토리에 존재합니다.

Devin에 직접 입력한 내용이 대체 불가능한 부분입니다. 배포 순서, 독점 도구의 특이사항, 특정 디렉터리에 접근하면 안 되는 이유 등 다른 어디에도 존재하지 않는 노트들은 Cognition의 웹 앱에 저장되어 있습니다. Devin의 문서에서는 Knowledge를 "Devin이 모든 세션에서 참조할 수 있는 지침 및 조언의 모음"으로 설명하며, 이를 생성, 트리거 및 고정(pin)하는 방법을 설명합니다. 하지만 내보내기 기능에 대한 설명은 없으며, 우회할 방법도 없습니다. 직접 읽고 복사하는 것이 유일한 방법입니다.

텍스트만큼이나 트리거도 중요합니다. 이 부분은 많은 사람들이 놓치는 부분입니다. Devin의 검색은 조건부입니다. "Knowledge는 설정한 트리거를 기반으로 검색됩니다. 트리거가 구체적일수록(예: Knowledge가 적용되는 파일, 리포지토리 또는 작업 유형) 검색 결과가 더 좋아집니다." 노트와 트리거가 결합되면 범위가 지정된 규칙이 됩니다. 트리거가 없는 노트는 모든 세션에 로드해야 하거나 완전히 잊어버리게 될 문장에 불과합니다. 수집할 때는 두 열을 모두 수집하세요.

고정(Pinning) 역시 범위 정보입니다. Knowledge 노트를 모든 리포지토리에 고정하거나 특정 리포지토리에 고정할 수 있습니다. 이는 Claude Code의 메모리 계층 구조에 직접 매핑되므로, 작업하면서 기록해 두세요. 모든 곳에 고정된 노트는 개인 또는 조직 수준의 지침이 되고, 단일 리포지토리에 고정된 노트는 해당 리포지토리에 커밋된 지침이 됩니다.

반대편에서 Claude Code가 제공하는 것. 모든 세션이 시작될 때 로드되는 CLAUDE.md 파일은 광범위한 범위에서 구체적인 범위 순으로 해석됩니다. 먼저 조직에서 관리하는 파일, 개인 설정을 위한 ~/.claude/CLAUDE.md, 팀을 위해 커밋된 프로젝트의 ./CLAUDE.md 또는 ./.claude/CLAUDE.md, 그리고 비공개 프로젝트별 노트를 위한 ./CLAUDE.local.md 순입니다. 작업 디렉터리 상위의 파일은 시작 시 전체가 로드되고, 하위 디렉터리의 파일은 Claude가 해당 디렉터리의 파일을 읽을 때 로드됩니다. 조건부 로드를 위해 .claude/rules/가 있으며, 규칙 파일에 paths: 프런트매터(frontmatter)를 추가하여 Claude가 일치하는 파일에 접근할 때만 컨텍스트에 포함되도록 할 수 있습니다. 이는 Claude Code에 존재하는 Devin 트리거와 가장 유사한 구조적 대안입니다.

시작하기 전 두 가지 솔직한 당부 말씀. Devin의 Knowledge는 실제로 유용하게 작동하는 기능이며, 이번 마이그레이션이 번거로운 이유는 고장 난 도구에서 탈출하는 것이 아니라 잘 작동하는 도구를 떠나기 때문입니다. 또한 Claude Code 역시 완벽한 메모리 시스템은 아닙니다. 공식 문서에 명시되어 있듯이 지침 파일은 "강제된 구성이 아니라 컨텍스트"일 뿐이며, 엄격한 준수를 보장하지 않습니다. 규칙이 매번 반드시 준수되어야 한다면, 문장을 더 잘 쓰는 것보다 훅(hooks)을 사용하는 것을 권장합니다.

수동 마이그레이션 단계

1단계: 액세스 권한을 잃기 전에 Knowledge를 수집하고 출처별로 분류하기

Knowledge 목록을 열고 모든 노트를 임시 파일에 복사하세요. 이때 노트별로 텍스트, 트리거, 고정 대상의 세 가지 정보를 함께 기록해야 합니다. 반드시 구독이 유지되는 동안 이 작업을 수행하세요. 이 마이그레이션의 다른 모든 단계는 반복할 수 있지만, 이 단계는 단 한 번만 가능합니다.

그런 다음 각 노트를 출처에 따라 다음 세 가지 범주로 분류하세요:

리포지토리에서 파생된 내용. README의 재진술, 디렉터리 레이아웃, package.json에 작성된 테스트 명령 등입니다. 이 내용들은 삭제하세요. Claude Code가 리포지토리를 읽을 것이며, /init 명령어가 발견된 내용을 바탕으로 초기 CLAUDE.md를 생성합니다. 이를 그대로 복사해 두면 파일만 길어져 오히려 지침 준수율이 떨어집니다.

직접 작성했으며 여전히 유효한 내용. 배포 순서, 특정 플래그가 필요한 도구, 이번 분기에 아무도 리팩터링해서는 안 되는 모듈과 그 이유 등입니다. 이것들이 바로 마이그레이션 대상입니다.

직접 작성했으나 더 이상 유효하지 않은 내용. 모든 Knowledge 모음에는 비활성화된 서비스에 대한 노트나 이미 해결된 버그의 우회 방법 같은 것들이 포함되어 있습니다. 지침 파일에 오래된 규칙을 남겨두는 것은 잃어버리는 것보다 나쁩니다. Claude가 그 잘못된 규칙을 따를 것이기 때문입니다. 기억이 생생할 때 지금 의도적으로 삭제하세요.

작업 시 유용한 팁: Devin 세션에는 어떤 Knowledge에 액세스했는지 표시됩니다. 따라서 최근 세션을 보면 실제로 어떤 노트가 자주 활성화되는지 알 수 있습니다. 한 달 동안 한 번도 검색되지 않은 노트는 트리거가 잘못 설정되었거나 더 이상 유효하지 않은 것이므로, 세 번째 범주(삭제 대상)로 분류하는 것이 좋습니다.

2단계: CLAUDE.md 및 경로 범위 규칙으로 노트 재구성하기

이제 살아남은 노트를 한 파일에 모두 넣지 말고, 기록해 둔 범위에 따라 배치하세요:

  • 모든 리포지토리에 고정됨, 개인용~/.claude/CLAUDE.md. 여러분의 습관이나 선호하는 워크플로우입니다. 컴퓨터의 모든 프로젝트에 로드되므로 짧게 유지하세요.
  • 모든 리포지토리에 고정됨, 팀 표준 → 각 리포지토리의 프로젝트 CLAUDE.md 또는 팀에서 중앙 집중식으로 배포하는 조직 관리 정책 파일.
  • 단일 리포지토리에 고정됨 → 해당 리포지토리의 루트 ./CLAUDE.md에 커밋하여 팀원들이 이를 다시 찾을 필요 없이 그대로 물려받을 수 있도록 합니다.
  • 특정 파일 또는 특정 유형의 작업에서 트리거됨 → 해당 파일과 일치하는 paths: 프런트매터가 있는 .claude/rules/ 내의 파일. 이는 Devin 트리거가 하던 역할과 가장 유사합니다. 예를 들어 paths: ["src/api/**/*.ts"]는 Claude가 API 레이어에서 작업할 때만 해당 규칙을 로드하고, 그렇지 않을 때는 컨텍스트에서 제외합니다.
  • 비공개 및 프로젝트 전용 → gitignore에 등록된 ./CLAUDE.local.md.

여기서 두 가지 기술적 디테일이 번거로움을 줄여줍니다. Claude Code 문서에서는 CLAUDE.md 파일당 200행 미만을 유지할 것을 권장합니다. 파일이 길어질수록 더 많은 컨텍스트를 소비하고 지침 준수율이 떨어지기 때문입니다. 따라서 1단계에서의 분류 작업은 단순히 정리 정돈이 아니라 결과물을 제대로 작동하게 만드는 핵심 과정입니다. 또한 리포지토리에 이미 Devin이 읽던 AGENTS.md가 있다면 중복해서 작성하지 마세요. @AGENTS.md로 이를 가져오는 CLAUDE.md를 생성하고 그 아래에 Claude 전용 지침을 추가하면, 두 도구 모두 하나의 소스를 읽을 수 있습니다.

마지막으로, 방금 우회한 비대칭성에 주목하세요. Devin은 처음부터 리포지토리의 에이전트 파일을 읽고 있었습니다. Claude Code는 새로운 대화형 흐름이 활성화된 상태에서 /init을 실행할 때 Devin Desktop 설정의 .devin/rules/ 파일을 읽을 수 있으며, /import를 통해 지원되는 에이전트의 구성을 가져올 수 있습니다. 하지만 어떤 도구도 웹 앱에만 존재했던 Knowledge는 읽을 수 없습니다. 여기서 얻을 수 있는 교훈은 Devin에 대한 것이 아닙니다. 벤더의 UI에 저장된 지식은 언젠가 직접 손으로 복사해야 하는 지식이 된다는 점입니다.

더 나은 방법: 에이전트에 종속되지 않는 단일 메모리 레이어

여러분은 방금 벤더의 지식 저장소를 파일로 변환하는 데 한 시간을 보냈습니다. 이 파일들은 버전 관리가 가능하고, 검토할 수 있으며, 검색 및 이식이 가능하다는 점에서 확실한 개선책입니다. 하지만 다음 분기에 Codex를 추가하거나, 팀원이 릴리스 노트를 작성하면서 ChatGPT에서 동일한 컨텍스트를 사용하고 싶어 한다면 어떻게 해야 할지 생각해 보세요. 오직 하나의 도구만 읽을 수 있는 곳에서 또다시 복사 작업을 반복해야 할 것입니다.

해결책은 영구적인 자료를 모든 어시스턴트가 읽을 수 있는 단일 저장소에 보관하고, 지침 파일은 본연의 역할, 즉 코딩 에이전트가 항상 눈앞에 두어야 하는 짧고 강력한 규칙을 담는 용도로만 사용하는 것입니다.

MemoryLake는 이를 위한 메모리 레이어입니다. 규칙 뒤에 숨겨진 결정 사항, 장애 이력, 소스 문서 등을 한곳에 모아 Claude 및 Codex와 같은 MCP 지원 도구에서 직접 읽을 수 있고, API를 통해 ChatGPT에서도 읽을 수 있습니다. 규칙은 리포지토리에 남고, 그 규칙이 만들어진 이유는 특정 제품의 데이터베이스에 갇히지 않게 됩니다.

1단계: API 키 생성하기

약 30초 만에 키를 생성하고 첫 번째 요청을 보낼 수 있습니다. 세션에 직접 붙여넣는 대신 환경 변수나 비밀 관리자(secret manager)에 보관하세요.

MemoryLake API 키 생성하기
MemoryLake API 키 생성하기

2단계: 첫 번째 메모리 업로드하기

방금 마이그레이션한 노트의 배경이 되는 문서, 이미지, 파일을 업로드하세요. 배포 순서가 명시된 런북, 특정 디렉터리 접근을 제한하게 만든 장애 보고서, 아키텍처 결정 사항, 이전에 기록해 둔 벤더의 API 특이사항 등이 해당됩니다. 한 줄짜리 요약본보다는 원본 소스를 업로드하세요. 요약본은 방금 여러분이 한 시간 동안 재구성하느라 애썼던 바로 그 형태입니다.

MemoryLake에 첫 번째 메모리 업로드하기
MemoryLake에 첫 번째 메모리 업로드하기

3단계: AI 및 에이전트 연결하기

Claude, Codex, OpenClaw 및 기타 AI 에이전트가 MCP 또는 API를 통해 메모리에 액세스할 수 있도록 설정하세요. Claude Code는 CLAUDE.md 파일과 함께 MCP를 통해 저장소를 직접 읽습니다. ChatGPT의 경우, API를 통해 필요한 내용을 검색하여 프롬프트나 모델을 호출하는 워크플로우에 주입할 수 있습니다.

MCP를 통해 AI 및 에이전트 연결하기
MCP를 통해 AI 및 에이전트 연결하기

실제 적용 시 변화되는 점

첫 번째 차이점은 규칙과 함께 그 이유가 함께 전달된다는 것입니다. "스테이징 배포 전에 마이그레이션을 실행하라"는 규칙은 누군가 불필요해 보인다고 판단하기 전까지만 준수됩니다. 반면 "스테이징 배포 전에 마이그레이션을 실행하라 — 지난 3월에 순서가 잘못된 배포로 인해 스테이징 서버가 두 번 다운되었습니다. 보고서 참조"라는 규칙은 새로 온 엔지니어의 자의적 판단 속에서도 살아남습니다.

두 번째는 CLAUDE.md 파일을 짧게 유지할 수 있다는 점입니다. 지침 파일의 가장 큰 딜레마는 유용한 모든 내용을 항상 로드되는 파일에 넣고 싶어 하지만, 그 파일이 커질수록 성능이 저하된다는 것입니다. 세부 사항을 검색할 수 있게 되면, 지침 파일에는 핵심적인 제약 조건만 남겨둘 수 있습니다. 이는 이미 알고 있는 내용에서 시작하는 대신 매 세션마다 코드베이스를 다시 읽는 에이전트 문제를 해결하는 방법이기도 합니다.

세 번째는 다음 마이그레이션 비용이 매우 저렴해진다는 것입니다. 이번 마이그레이션에는 UI에서 복사하는 데 한 시간이 걸렸지만, 다음번에는 설정 변경 한 번으로 끝납니다. 지식이 떠나려는 도구 내부에 갇혀 있지 않기 때문입니다.

또한 이는 Claude Code가 이미 제공하는 기능과도 잘 결합됩니다. Claude Code의 자동 메모리(auto memory) 기능은 빌드 명령과 디버깅 인사이트를 리포지토리별로 유용하게 계속 축적합니다. 다만 한계를 알아둘 필요가 있습니다. 이 저장소는 로컬 머신에 국한되며, 문서에 따르면 파일이 머신 간 또는 클라우드 환경 간에 공유되지 않습니다. 따라서 로컬 편의성 레이어로는 훌륭하지만 공식 기록 시스템으로는 부족하며, 이는 우리가 원하는 정확한 역할 분담이기도 합니다.

에이전트 플랫폼을 떠날 때의 모범 사례

액세스 권한이 있을 때 수집하기

Knowledge, 메모리, 저장된 컨텍스트는 구독이 만료되는 순간까지만 표시되며, 단 1분도 연장되지 않습니다. 먼저 복사부터 하고 정리는 나중에 하세요. 이 단계는 전체 마이그레이션 과정 중 유일하게 기한이 있는 단계입니다.

텍스트뿐만 아니라 트리거도 기록하기

검색 조건도 중요한 정보입니다. Devin이 결제 모듈을 다룰 때 활성화되었던 노트는 경로 범위 규칙이 됩니다. 하지만 이 조건을 잊어버린 채 노트만 남겨두면 모든 세션에서 노이즈가 되거나 무관하다는 이유로 삭제될 수 있습니다. 두 열을 모두 복사하세요.

마이그레이션 과정에서 과감히 삭제하기

마이그레이션은 모든 규칙을 새로운 시각으로 검토할 수 있는 유일한 기회입니다. 이 기회를 활용하세요. 오래된 지침은 없는 것보다 나쁩니다. 에이전트는 그 지침을 따를 것이고, 여러분은 한 달 동안 그 사실을 눈치채지 못할 수도 있기 때문입니다.

이유는 검색 가능한 곳에, 규칙은 로드되는 곳에 두기

두 줄짜리 규칙은 CLAUDE.md에 있어야 합니다. 반면 장애 보고서, RFC, 그리고 이를 도출해 낸 벤더 스레드는 에이전트가 설명이나 재고가 필요할 때 가져올 수 있는 저장소에 있어야 합니다. 두 가지를 모두 지침 파일에 쑤셔 넣으면 파일이 800행에 달하게 되고, 결국 에이전트가 지침을 따르지 않게 됩니다.

지침 파일이 강제력을 가질 것이라 기대하지 않기

Claude Code의 자체 문서에서도 지침 파일은 강제된 구성이 아니라 컨텍스트일 뿐이라고 명확히 밝히고 있으며, 매번 반드시 실행되어야 하는 작업에는 훅(hooks)을 사용할 것을 권장합니다. 마이그레이션하려는 규칙이 매우 중요한 것(예: main 브랜치에 직접 푸시 금지, 항상 린터 실행)이라면 훅이나 CI 체크로 구현하고, 지침 파일에는 그것이 왜 존재하는지 설명하는 역할만 부여하세요.

결론

Devin에서 Claude Code로의 이동은 단방향 복사입니다. 그 이유는 적대적인 정책 때문이 아니라 구조적인 한계 때문입니다. Devin의 Knowledge는 CLAUDE.mdAGENTS.md를 포함한 리포지토리 파일에서 정보를 가져오지만, Devin 외부로 정보를 내보내는 기능은 없습니다. 리포지토리에서 파생된 모든 것은 이미 Claude Code가 참조할 위치에 있습니다. 웹 앱에 직접 입력한 내용과 범위 지정을 위한 트리거 및 고정 정보는 액세스 권한이 있을 때 직접 수집해야 합니다.

한 손에는 삭제 키를 쥐고 수집 작업을 진행한 다음, 범위별로 재구성하세요. 개인 설정은 ~/.claude/CLAUDE.md에, 팀 표준은 커밋된 CLAUDE.md에, 파일별 규칙은 paths: 프런트매터가 있는 .claude/rules/에, 비공개 노트는 CLAUDE.local.md에 배치하세요. 파일은 짧게 유지해야 합니다. 그런 다음 규칙 뒤에 숨겨진 이유들을 어시스턴트가 읽을 수 있는 단일 저장소에 보관하세요. 그렇게 하면 다음에 플랫폼을 바꿀 때는 지식을 다시 파헤칠 필요 없이 도구만 바꾸면 됩니다.

자주 묻는 질문

Devin Knowledge를 내보낼 수 있나요?

파일 형태로 내보낼 수는 없습니다. Devin 문서에는 Knowledge 생성, 트리거 설정, 노트를 단일 또는 모든 리포지토리에 고정하는 방법은 나와 있지만, 내보내기 기능은 제공되지 않습니다. 현실적인 방법은 액세스 권한이 활성화되어 있는 동안 각 노트의 텍스트와 트리거, 고정 범위를 임시 파일에 복사해 두는 것입니다.

Devin이 CLAUDE.md를 읽나요?

네, 그렇습니다. Devin 문서에 따르면 .rules, .mdc, .cursorrules, .windsurf, CLAUDE.md, AGENTS.md에서 Knowledge를 자동으로 가져오고 업데이트합니다. 이 때문에 리포지토리에 있던 컨텍스트는 갇혀 있지 않았던 것이며, 마이그레이션 작업이 생각보다 간단한 이유이기도 합니다.

Devin 트리거에 해당하는 Claude Code 기능은 무엇인가요?

.claude/rules/ 디렉터리 내에 paths: 프런트매터가 포함된 규칙 파일입니다. 이는 Claude가 패턴과 일치하는 파일로 작업할 때만 로드되며, 이는 Knowledge 노트의 범위를 특정 파일이나 작업 유형으로 제한하는 것과 동일한 개념입니다. paths: 필드가 없는 규칙은 모든 곳에 고정된 노트처럼 무조건 로드됩니다.

모든 내용을 하나의 CLAUDE.md에 넣어야 하나요?

아닙니다. Claude Code 문서에서는 파일당 200행 미만을 유지할 것을 권장하며, 파일이 길어질수록 지침을 일관되게 따르는 능력이 떨어진다고 명시하고 있습니다. 사용자, 프로젝트, 하위 디렉터리, 경로 범위 규칙 등 범위별로 분할하여 각 세션에서 지금까지 결정한 모든 내용 대신 관련 있는 내용만 로드하도록 하세요.

이후에 Claude Code가 스스로 기억을 저장하나요?

네, 어느 정도는 그렇습니다. 자동 메모리(auto memory) 기능이 기본적으로 활성화되어 있어 Claude가 빌드 명령, 디버깅 인사이트, 발견한 선호도 등의 노트를 리포지토리별로 스스로 축적할 수 있습니다. 다만 이는 로컬 머신에 저장되며, 문서에 따르면 머신 간 또는 클라우드 환경 간에 공유되지 않습니다. 따라서 팀의 표준을 보관하는 곳이라기보다는 로컬 편의성 레이어로 취급해야 합니다. 자세한 내용은 Claude Code에 공유 메모리 레이어 추가하기에서 다룹니다.

Devin Desktop에서 마이그레이션하는 것과 동일한가요?

아닙니다. 이 둘은 구분해야 합니다. Devin Desktop은 이름이 바뀐 Windsurf 에디터이며, 그 규칙은 디스크의 파일에 저장됩니다. 이는 시작점과 경로가 다르며, Windsurf 설정을 Claude Code로 이동하기에서 다루고 있습니다. 본 글은 지식이 파일 시스템이 아닌 웹 앱에 저장되는 클라우드 에이전트에 관한 것입니다. 두 가지를 모두 사용해 왔다면 두 번의 수집 작업을 해야 하며, 그중 하나만 수동 작업입니다.