Claude 에이전트로 Windows→Linux 개발환경 이전 3시간 만에 끝내기
제 개발 노트북을 Windows 11에서 Ubuntu 22.04로 옮기는 데 Claude 에이전트가 3시간 반을 절약해줬습니다. 패키지 127개, dotfile 18개, VSCode 설정 37개를 일일이 옮기는 대신 Claude에게 마이그레이션 스크립트를 작성하게 했거든요. 이 글을 읽고 나면 WSL 환경에서 현재 개발 도구 목록을 추출하고, Claude에게 Linux용 설치 스크립트를 만들게 해서 OS 전환 시간을 확 줄이는 방법을 알게 됩니다.
준비물
이 작업을 시작하기 전에 다음 항목들이 필요해요.
- Windows 11 + WSL2 (Ubuntu 20.04 이상)
- Claude API 접근 권한 (Sonnet 3.5 이상 권장)
- 새 Linux 머신 또는 듀얼부팅 파티션
- 백업 저장소 (GitHub private repo 추천)
WSL 버전 확인은 PowerShell에서 wsl --list --verbose로 할 수 있어요. Version이 2가 아니면 wsl --set-version Ubuntu 2로 업그레이드하세요. 제 경우 WSL1에서 2로 올리는 데 약 8분 걸렸습니다.
WSL에서 현재 환경을 목록으로 뽑아내기
먼저 Windows에 깔린 개발 도구가 뭐가 있는지 정리해야 합니다. WSL 터미널을 열고 다음 명령을 실행하세요.
# 설치된 패키지 목록
dpkg --get-selections > ~/migration/packages.txt
# dotfile 목록 (숨김 파일)
ls -a ~ | grep "^\." > ~/migration/dotfiles.txt
# VSCode 확장 목록
code --list-extensions > ~/migration/vscode-extensions.txt
제 경우 packages.txt가 1.2MB였는데요, 실제로 직접 설치한 건 127개뿐이었어요. 나머지는 의존성 패키지라 따로 적을 필요가 없더라고요. apt-mark showmanual로 직접 설치한 것만 골라냈습니다.
이렇게 입력하면 → ~/migration/ 폴더에 txt 파일 3개가 생겨요. 이게 Claude에게 넘길 재료입니다.
여기서 막힌 지점 — Postman이랑 Slack 같은 GUI 도구는 dpkg로 안 잡히더라고요. 이것들은 snap으로 설치했기 때문이었어요. snap list > ~/migration/snap-packages.txt 명령을 추가로 실행해서 snap 목록도 따로 뽑아야 했습니다. snap 패키지가 14개 나왔는데, 이것들은 나중에 수동으로 처리했어요.
또 한 가지 삽질한 부분은 배포판 차이였어요. WSL에서는 Ubuntu 20.04를 쓰고 있었는데 새 머신은 22.04라서 일부 패키지 이름이 달랐습니다. 예를 들어 python3.8-venv는 22.04에서 python3.10-venv로 바뀌어 있더라고요. 이 매핑 작업을 미리 안 하면 나중에 스크립트 실행할 때 에러가 쏟아져요.
Claude에게 Linux 설치 스크립트 작성 맡기기
이제 Claude에게 이 목록을 주고 Linux에서 돌아갈 셸 스크립트를 만들어달라고 요청합니다. 제가 쓴 프롬프트는 이래요.
다음 패키지 목록과 dotfile을 Ubuntu 22.04에 설치하는 bash 스크립트를 작성해줘.
- 패키지는 apt로 설치
- dotfile은 심볼릭 링크로 ~/에 배치
- 실패해도 스크립트가 멈추지 않게 에러 핸들링 추가
- 설치 전후 확인 로그를 ~/migration-log.txt에 기록
[packages.txt 내용 붙여넣기]
[dotfiles.txt 내용 붙여넣기]
Claude가 돌려준 스크립트는 대략 이런 구조였어요.
#!/bin/bash
set +e # 에러가 나도 계속 진행
LOG=~/migration-log.txt
echo "=== 시작: $(date)" >> $LOG
# apt 패키지 설치
while read pkg; do
sudo apt install -y "$pkg" 2>&1 | tee -a $LOG
done < packages.txt
# dotfile 복사
for file in .bashrc .vimrc .gitconfig; do
cp ~/backup/$file ~/ 2>&1 | tee -a $LOG
done
echo "=== 완료: $(date)" >> $LOG
첫 번째 시도는 실패했습니다. 스크립트를 돌렸더니 3분 만에 E: Package 'build-essential' has no installation candidate 에러로 멈췄어요. Claude가 apt update를 빼먹었더라고요. 다시 요청할 때 "스크립트 최상단에 sudo apt update를 먼저 실행"이라고 명시했더니 제대로 된 스크립트를 줬습니다.
두 번째 수정 요청에서는 "패키지 설치 실패 시 로그에 SKIP으로 표시하고 계속 진행"이라는 조건도 추가했어요. 그랬더니 각 패키지마다 설치 성공 여부를 확인하는 if 문을 넣어주더라고요.
이 스크립트를 migrate.sh로 저장했어요. 실행하기 전에 꼭 내용을 확인하세요. Claude가 가끔 경로를 /home/user/ 같은 예시로 하드코딩하는 경우가 있거든요.
새 Linux 머신에서 실행하고 검증하기
스크립트를 새 Ubuntu 머신으로 옮긴 뒤 실행 권한을 주고 돌립니다.
chmod +x migrate.sh
./migrate.sh
제 경우 전체 실행에 17분 걸렸어요. 중간에 libssl-dev 패키지가 의존성 충돌로 실패했는데, 로그를 보고 sudo apt --fix-broken install로 해결했습니다.
스크립트가 끝나면 이렇게 확인하세요.
which node→ Node.js 경로가 나오는지git --version→ 버전이 표시되는지code --version→ VSCode가 설치됐는지
제 체크리스트 21개 중 19개가 바로 통과했어요. 실패한 2개(Docker Desktop, WSL 전용 도구)는 Linux에서 필요 없는 것들이라 무시했습니다.
dotfile 18개 중에서는 .zshrc만 문제가 있었어요. WSL에서는 Oh My Zsh 플러그인 경로가 /mnt/c/Users/...로 되어 있었는데, 당연히 Linux에서는 작동하지 않았죠. 이 부분은 .zshrc를 열어서 경로를 ~/.oh-my-zsh로 수동 수정했습니다.
흔한 실수와 해결법
제가 이 과정에서 삽질한 부분 몇 가지를 공유할게요.
크리덴셜 파일을 그대로 복사했다가 노출 — .env 파일이나 SSH 키를 스크립트에 포함시켰더니 GitHub에 올라갈 뻔했어요. 민감한 파일은 별도로 암호화해서 옮기거나, 새 머신에서 처음부터 재생성하는 게 안전합니다.
Windows 경로를 Linux에서 그대로 쓰려다 실패 — C:\Users\ 같은 경로가 스크립트에 남아있어서 첫 실행이 통째로 꼬였어요. Claude에게 요청할 때 "Linux 절대 경로만 사용"이라고 명시하니 해결됐습니다.
패키지 이름과 명령어 이름이 다른 경우 — Ubuntu apt에는 node라는 패키지가 아예 없습니다. nodejs를 깔아야 node 명령이 생겨요. 스크립트에 apt install node라고 적혀 있어서 처음에 한 번 걸렸습니다. 이런 차이는 Claude에게 "Windows 패키지명을 Ubuntu apt 패키지명으로 매핑해줘"라고 별도로 부탁하면 표를 만들어줍니다.
GUI 도구는 자동 설치가 안 된다 — Figma Desktop이나 Notion 같은 GUI 앱은 apt에 없어서 스크립트로 처리가 안 돼요. 이런 건 공식 홈페이지에서 .deb 파일을 받아 sudo dpkg -i 명령으로 따로 깔아야 합니다. 제 경우 GUI 도구 7개를 수동으로 설치하는 데 25분 걸렸어요.
자주 묻는 질문
Q. WSL 없이 바로 Linux로 옮기는 건 안 되나요?
A. 가능합니다. 대신 현재 환경 목록을 뽑을 방법이 필요해요. Windows에서 choco list --local-only로 패키지 목록을 추출하고, 그걸 Claude에게 주면 Ubuntu용으로 변환해줍니다. 다만 WSL을 거치면 이미 Linux 명령어로 목록을 뽑으니 변환 과정이 줄어들어요.
Q. 비밀번호나 API 키는 어떻게 옮기나요?
A. 절대 스크립트에 넣지 마세요. 1Password나 Bitwarden 같은 패스워드 매니저를 쓰거나, gpg로 암호화한 파일을 별도로 옮긴 뒤 새 머신에서 복호화하세요. Claude에게도 "크리덴셜 제외"라고 명시하면 .env나 .ssh/ 같은 파일을 스킵합니다.
Q. 스크립트 실행 중 에러가 나면 롤백할 수 있나요?
A. 완전 자동 롤백은 어렵지만, 로그 파일(migration-log.txt)에 설치 시각이 남으니 그 시점 이후 설치된 패키지를 apt remove로 지울 수 있어요. 더 안전하게 하려면 VM이나 Docker 컨테이너에서 먼저 테스트하세요.
Q. VSCode 설정이나 확장은 어떻게 옮기나요?
A. ~/.config/Code/User/settings.json을 복사하고, code --install-extension <확장이름> 명령을 스크립트에 넣으면 됩니다. 확장 목록은 위에서 뽑은 vscode-extensions.txt를 while 루프로 돌리면 돼요.
Q. 이 방법으로 macOS로도 옮길 수 있나요?
A. 패키지 관리자만 바꾸면 가능합니다. apt 대신 brew install로 바꾸고, 경로 차이(Linux /home/ vs macOS /Users/)만 수정하면 Claude가 macOS용 스크립트를 만들어줘요.
다음 단계
이제 기본 개발 환경은 옮겨졌으니, 프로젝트별 의존성을 설치할 차례예요. Python 가상환경이나 Node.js 프로젝트 node_modules는 새 머신에서 pip install -r requirements.txt나 npm install로 다시 깔아야 합니다. Docker 이미지가 많다면 docker save/load보다는 registry에서 다시 pull 하는 게 빠를 수도 있어요.
Claude에게 환경 이전을 맡기면 수작업 체크리스트 작성과 패키지 하나하나 설치하는 시간을 크게 줄일 수 있습니다. 다만 크리덴셜 관리와 최종 검증은 사람이 직접 해야 안전하다는 걸 꼭 기억하세요.