집 밖에서 바이브 코딩하기
AI

집 밖에서 바이브 코딩하기

러닝하면서, 술 마시면서, 훈련 받으면서 개발하는 일류 개발자 되기.

#AI#workflow#harness
6
1,144

0) 들어가며

내일인 8월 18일부터 동원예비군 훈련이 있습니다.

앞으로 2박 3일 동안 PC를 만질 수 없게 돼서, 이 참에 그냥 쉬고 오자 싶다가도.. 뭔가 또 만지작거리고 싶을 때 못하면 아쉬울까봐 미리 원격 개발 환경 세팅을 해두려고 합니다.

지난 포스팅에서 요구 사항을 말하면 에이전트가 설계안과 함께 이슈를 생성하고, 승인하면 구현과 셀프리뷰를 거쳐 PR을 올리고, CI의 리뷰 봇과 피드백 루프를 돈 뒤 최종 머지 판단만 넘어오는 구조로 소개했습니다.

어차피 제가 하는 일은 대부분 읽고, 판단하고, 짧게 답하는 것이라, 설계안을 읽고 "ㄱㄱ, 진행해, 이건 이렇게 하자.", diff를 읽고 "머지해". 이건 전부 폰 화면 안에서 할 수 있는 일입니다. 그래서 입소 전날인 오늘, 부랴부랴 훈련장에서 개인정비 시간에 폰만으로 개발 사이클을 돌릴 수 있는 환경을 세팅해보았습니다.

1) 기획, 구조, 구현 방법 결정 외에는 사람이 빠질 것

지난 포스팅에서, 제가 소개했떤 이슈 기반 워크플로는 사람이 개입하는 지점을 세 곳으로 고정해 두었습니다.

  1. 설계 승인: 에이전트가 정리한 설계, 계획, 이슈 초안을 읽고 수정 및 승인
  2. 범위 질문 답변: 작업 완료 조건이 모호할 때 생성되는 조건부 질문에 답변
  3. 머지 판단: 봇 리뷰 루프가 수렴하고 CI가 green일 때 최종 머지 확인

나머지 구간(worktree 생성, 구현, 테스트, 셀프리뷰, PR 생성, 리뷰 반영)은 모두 에이전트가 자율적으로 진행하고 결과만 보고합니다. PR이 열리면 리뷰 봇이 리뷰를 진행하고 에이전트는 봇이 LGTM을 낼 때까지 리뷰 반영 루프를 돕니다.

만약 워크플로가 사람이 수시로 코드를 직접 고치는 형태라면, 폰으로 작업 환경을 옮겨도 결국 코드 에디터가 필요해서 작업을 원활하게 진행할 수 없습니다. 개입 지점이 되도록 판단 영역으로 압축되어 있어야 폰 환경에서도 개발 사이클이 원활히 돌아갑니다.

2) 두 가지 옵션: 클라우드 vs 집에 있는 맥

밖에서 에이전트를 사용하는 방법은 크게 두 옵션이 있습니다.

관점클라우드 실행집 맥 원격 조종
실행 위치클라우드 샌드박스 (GitHub 연동)기존 로컬 환경 그대로
집 맥 상태꺼져 있어도 무관켜져 있어야 함
기존 환경 & 셋업 재사용스킬, 훅, 워크플로 일부 재구성 필요기존 환경 그대로
초기 세팅거의 없음네트워크, 전원, 세션 관리 필요
Claude 앱에서 Github Claude App을 활용해 깃허브 리포지토리 연동
Claude 앱에서 Github Claude App을 활용해 깃허브 리포지토리 연동
깃허브가 연동된 모습
깃허브가 연동된 모습

솔직히 클라우드 쪽이 딸깍으로 세팅은 훨씬 가볍습니다.

하지만 저는 로컬에 커스텀 스킬(이슈 워크플로, 커밋 컨벤션, 디자인 QA), git worktree 컨벤션, pre-push 훅, Obsidian SoT 문서 싱크와 같은 파이프라인들을 이미 쌓아 두었고, 이런 방식들을 3일 훈련을 위해 잠시 무시하고 싶지도 않았고, 임시로 클라우드 환경의 하네스를 새로 작업하기에는 새로운 환경을 검증할 시간이 없었습니다. 익숙한 로컬 환경을 그대로 쓰는 쪽이 변수가 적다고 생각했습니다.

그래서 집 맥을 켜 두고 원격으로 조종하는 방법을 골랐습니다. 대신 3일간 PC에 전혀 손댈 수 없으니, 진입 경로를 이중화해서 안정성을 확보할 필요가 있었습니다.

3) 주 옵션: Claude Code Remote Control

최첨단 테크놀로지아!

모바일 Claude App으로 로컬 환경 실행
모바일 Claude App으로 로컬 환경 실행
그대로 Mac에서 실행되는 모습
그대로 Mac에서 실행되는 모습

Anthropic이 2026년 2월에 공개한 Remote Control입니다.

맥에서 돌던 Claude Code 세션이 그대로 유지되고 폰의 Claude 앱이 그 세션의 또 하나의 창이 되는 구조입니다. 터미널에서 치던 대화를 폰에서 이어서 치고, 폰에서 받은 응답이 터미널에도 그대로 남습니다.

설정은 매우매우 간단합니다.

맥의 Claude Code에서
/config # → Remote Control 찾아서 토글 ON

이후 같은 계정으로 로그인한 폰 Claude 앱에 로컬 세션이 나타납니다.

로컬 프로세스가 아웃바운드 HTTPS로 API에 세션을 등록하고 폴링하는 방식이라, 완벽히 Anthropic 서버에 기대는 편안한 방식입니다.

Claude RC의 진짜 가치는 로컬 세션이 그대로라는 점입니다. 커스텀 스킬, worktree, 커밋 훅, 봇 리뷰 루프까지 로컬 그대로의 워크플로가 실행될 수 있습니다.

4) 보조 옵션: Tailscale + SSH + tmux

Remote Control은 이미 떠 있는 Claude 세션에 붙는 방식이다보니, 3일간 무인으로 돌아가는 맥에서 어쩌다 세션이 죽어버리면 생활관에서 세션을 새로 띄울 방법이 필요했습니다.

그래서 Remote Control이 없었을 때 전통적으로? 핫했던 조합을 가져갑니다.

  • Tailscale: 맥과 폰을 사설 Mesh VPN(tailnet)으로 묶을 수 있는 서비스. 공인 IP, 포트포워딩, DDNS 설정이 필요없고, MagicDNS라는 것을 설정해 IP 대신 my-macbook 같은 이름으로 접속할 수 있습니다.
  • SSH: 시스템 설정에서 맥의 원격 로그인 옵션을 켜 두고, 폰에서 Termius같은 SSH 클라이언트로 쉽게 연결 설정을 해둡니다.
  • tmux: 연결이 끊겨도 계속 프로세스는 살아있도록 하기 위해, tmux 위에서 작업을 수행합니다.

폰 환경에서는 화면이 잠기거나, Wi-fi가 냅다 잡히거나, Wi-fi에서 셀룰러로 전환되거나, 앱이 백그라운드로 가거나 등등 연결이 끊길 일이 정말 많습니다. 또, 훈련장에서 틈틈이 본다고 해도 (가능한가?) 쓱 보고 다시 집어 넣을 수 있으려면 이러한 환경에 면역이 되어야합니다. 그래서 tmux는 필수로 가져가야합니다.

폰 환경 터미널에서 프로젝트 루트로 이동, tmux 세션 유무 확인, 세션 진입 등의 일을 번거롭게 타이핑하기 귀찮을 것 같아, harunikki라는 명령어를 로컬 하나 만들어뒀습니다. (이름 뜻은 진행하고 있는 토이프로젝트..) harunikki라는 이름의 세션이 있으면 그대로 진입하고, 없으면 프로젝트 루트(-c ~/harunikki)에서 새로 만들어 진입하는 명령입니다. 세션이 살아 있는지 기억할 필요 없이 언제 쳐도 같은 자리에 도착하는 진입 명령이라, 폰에서 접속하면 무조건 이것부터 치면 됩니다.

~/.zshrc — 폰에서 접속하면 무조건 이것부터
alias harunikki='tmux new -As harunikki -c ~/harunikki'
  • -A : 세션이 있으면 붙고, 없으면 만드는 옵션
  • -s : 세션 이름 고정. 항상 같은 하나의 세션으로 들어가게 보장
  • -c : 세션을 새로 만들 때 시작 디렉토리 위치 폰에서 cd부터 칠 필요 없이 바로 프로젝트 루트로 이동
전통적인 방법의 원격 바이브코딩.. 이게 더 느낌있긴 하다.
전통적인 방법의 원격 바이브코딩.. 이게 더 느낌있긴 하다.

5) dev 서버로 UI 확인

로직 변경이야 diff와 테스트 결과로 판단하면 되지만, UI 변경은 실제 렌더를 봐야 합니다. 이건 Tailscale로 해결합니다.

Vite 설정에서 host: true로 모든 인터페이스에 바인딩해 두면, 맥에서 띄운 dev 서버를 폰에서 tailnet 주소로 열 수 있습니다.

vite.config.ts
server: { host: true, port: 5174, }
폰 Safari에서
http://my-macbook:5174
  • 추가 이득인 부분은 만약 진행하고 있는 프로젝트가 모바일 웹 프로젝트라면 실기기 확인이 개발 사이클 안에 들어와있는 꼴이 돼서, 개발 도중 데스크톱 브라우저의 디바이스 에뮬레이션보다 훨씬 직관적인 QA가 가능합니다.
개발 서버를 원격으로 확인할 수 있다.
개발 서버를 원격으로 확인할 수 있다.

6) 유의사항 및 확인할 것

  1. (필수) macOS 자동 업데이트 끄기
  2. pmset -g 맥 잠자기 모드 옵션을 켜서, 전원 연결 시 sleep 0인지 확인
  3. 전원 어댑터 연결상태 확인
  4. 맥북 열어두기: 맥북은 외장 디스플레이 연결 없이 덮을 경우 pmset 설정과 무관하게 잠든다고 합니다.
sleep 0 인지 확인
sleep 0 인지 확인

긴 외부 일정이 있을 경우, 되도록 밖에 러닝을 하러 나가거나 장 보러 갈 때, 몇 번 테스트를 충분히 해 볼 것을 추천드립니다!

훈련 즐겁게 잘 마치고 오겠습니다 :)

그런데.. 갑자기 Github 서버가 터졌다.. 부디 훈련날에는 잘 정상화되길..🥲

왜 하필 지금..
왜 하필 지금..

참고 자료

Comments