Git Worktrees에서 Microservice 변경 사항을 엔드투엔드 테스트하기 (Terminal Tab Explosion 없이)

발행: (2026년 2월 28일 오후 07:45 GMT+9)
13 분 소요
원문: Dev.to

Source: Dev.to

TL;DR

저는 Git 워크트리 안에 존재하는 Claude가 생성한 코드를 테스트하는 어려움을 해결하기 위해 Recomposable이라는 시각적 CLI‑툴을 만들었습니다.

The Problem

Claude Code를 Git worktree와 함께 사용할 때 동일한 저장소의 여러 브랜치를 동시에 체크아웃하는 경우가 많습니다:

  • Claude는 하나의 worktree에서 작업합니다.
  • 다른 worktree에서 나머지 스택을 검토·실행합니다.

단일 서비스 프로젝트에서는 잘 동작하지만, 마이크로서비스 아키텍처에서는 금방 한계에 부딪힙니다.

Claude가 하나의 서비스에 만든 변경 사항이 나머지 스택에서도 정상적으로 동작하는지 확인해야 합니다. 즉:

  1. 해당 서비스만 worktree의 코드로 다시 빌드한다.
  2. 다른 모든 서비스는 main 브랜치를 유지한다.

Docker Compose는 worktree 개념을 알지 못하고 디스크상의 파일만 인식하기 때문에, 많은 수동 경로 조작을 하게 됩니다.

Source:

수동 워크플로 (현재 상태)

단계수행 내용
1️⃣ 작업 트리 경로 찾기Claude는 .claude/worktrees/ 아래에 자동 생성된 이름으로 작업 트리를 만듭니다.
bash\ngit worktree list\n# /Users/you/project abc1234 [main]\n# /Users/you/project/.claude/worktrees/jan-abc123 def5678 [fix‑oauth]\n
2️⃣ 작업 트리에서 서비스 빌드작업 트리 경로와 compose 파일 경로를 결합하고 서비스를 지정합니다.
bash\ndocker compose -f /Users/you/project/.claude/worktrees/jan-abc123/docker-compose.yml build auth-service\n
3️⃣ 서비스 시작bash\ndocker compose -f /Users/you/project/.claude/worktrees/jan-abc123/docker-compose.yml up -d auth-service\n
4️⃣ 검증다른 터미널을 열어 로그를 tail하고, 서비스를 호출하고, 실패 시 다시 빌드합니다.
5️⃣ 원래 상태로 전환단계 2‑3을 반복하되 원래 compose 파일을 가리키도록 합니다.

각 단계마다 작업 트리 경로를 기억하거나 복사해야 하며, 어떤 compose 파일이 어느 서비스에 해당하는지도 추적해야 합니다.
어떤 서비스가 어느 브랜치에서 실행되고 있는지에 대한 개요가 없습니다.

쉘 별칭이나 Makefile을 사용해 일부 불편함을 숨길 수 있지만, 여전히 다음이 부족합니다:

  • 어떤 서비스가 어느 작업 트리에서 실행되는지에 대한 빠른 시각적 표시.
  • 새로운 작업 트리가 나타날 때 자동 업데이트.

Recomposable 소개 (v1.1.4)

Recomposable은 개발 워크플로를 위해 만든 Docker‑Compose TUI입니다.
버전 1.1.4에서는 워크트리 전환을 일급 기능으로 추가했습니다.

작동 방식

  1. UI에서 원하는 서비스에 t를 누릅니다.
  2. git worktree list --porcelain 명령으로 수집된 전체 Git 워크트리가 표시됩니다.
  3. j/k 로 이동하고, Enter 로 선택합니다.
  4. 선택한 워크트리의 compose 파일을 기준으로 서비스가 중지, 재빌드된 뒤 다시 시작됩니다.

그게 전부 – 경로를 직접 지정할 필요도, 추가 docker compose -f … 플래그도, 별도 터미널 탭도 없습니다.

UI 개요

서비스가 서로 다른 브랜치에서 실행될 경우 WORKTREE 열이 자동으로 표시됩니다.
main이 아닌 브랜치는 노란색으로 강조됩니다.

SERVICE        STATUS   BUILT   PORTS   WORKTREE
auth-service   running  2m ago  5001    fix-oauth
api-gateway    running  1h ago  8080    main
web-app        running  3d ago  3000    main
  • 경로를 기억할 필요가 없습니다.
  • 컨테이너가 어떤 브랜치에서 빌드됐는지 추측할 필요도 없습니다.

내부 동작

  • Discoverygit worktree list --porcelain 를 compose 파일이 있는 디렉터리에서 실행해 모든 워크트리를 탐색합니다.
  • Mapping – 도구는 원본 compose 파일 경로를 대상 워크트리 내부의 동일한 상대 경로와 매핑합니다. 파일이나 서비스가 대상 워크트리에 존재하지 않으면 오류가 표시됩니다.
  • Override storage – 선택한 워크트리 오버라이드는 서비스별로 저장되므로 이후 모든 작업(rebuild, restart, logs, exec, watch, 의존성 기반 연쇄 재빌드)에서 자동으로 오버라이드된 compose 파일을 사용합니다.
  • Switch back – 다시 t 키를 눌러 원래 워크트리(보통 main)를 선택하면 됩니다.

Recomposable을 활용한 전형적인 워크플로

  1. 프로젝트 루트에서 Recomposable을 실행합니다 – 전체 스택이 main에서 실행됩니다.
  2. Claude Code를 열고 auth-service를 새로운 워크트리에서 작업하도록 지시합니다.
  3. Claude가 변경을 가하면, 전체 흐름을 검증해야 합니다.
  4. Recomposable에서 auth-service로 이동해 t 키를 누르고 Claude의 워크트리를 선택합니다.
  5. 해당 서비스가 Claude의 브랜치에서 재빌드되고, 나머지 스택은 여전히 main에 머무릅니다.
  6. 로그를 확인하고, 요청을 보내며 동작을 검증합니다 – 모두 TUI 안에서 이루어집니다.
  7. 작업이 끝나면 다시 t 키를 눌러 main으로 전환합니다.

별도 터미널 탭 없이, 경로를 뒤섞지 않고, 추측 없이.

이 방식은 확장성이 뛰어납니다: Claude가 두 개의 워크트리에서 세 개의 서비스를 작업한다면, 세 서비스를 모두 전환할 수 있으며 WORKTREE 열이 즉시 현재 실행 중인 위치를 알려줍니다.

기능 미래 대비 (아이디어 및 격차)

영역현재 상태가능한 개선
워크트리 자동 감지t 키를 수동으로 눌러야 합니다.새 워크트리(예: Claude가 생성한 경우)를 감시하고, 영향을 받은 서비스를 자동으로 전환하도록 사용자에게 안내합니다.
워크트리 인식 연쇄 재빌드의존성 인식 재빌드(d)는 전이적 종속성을 재시작하지만, 해당 서비스들은 현재 워크트리에 머무릅니다.서비스가 전환될 때 종속 서비스도 동일한 워크트리로 전환하는 “연쇄 전환” 기능을 추가합니다(옵션 토글).
전환 전 차이 미리보기미리보기가 없으며, 무작정 재빌드합니다.재빌드 전에 현재 compose 파일과 대상 워크트리 간 변경된 파일/서비스 요약을 표시하여, 전환이 가치 있는지 사용자가 판단할 수 있게 합니다.
브랜치 상태 표시기워크트리 이름만 표시됩니다.워크트리 브랜치가 main보다 앞서 있는지 뒤처지는지, 혹은 커밋되지 않은 변경이 있는지를 표시하여 어떤 워크트리를 테스트할지 결정하는 데 도움을 줍니다.
배치 작업서비스를 하나씩 전환합니다.UI에서 여러 서비스를 선택하고 한 번에 동일한 워크트리로 전환할 수 있게 합니다.
지속 프로필오버라이드는 서비스별이며 휘발성입니다.명명된 “프로필”(예: Claude‑Auth)을 저장하여 서비스‑워크트리 매핑 집합을 보관하고, 단일 명령으로 로드할 수 있게 합니다.

이 중 어느 하나라도 구현하면 Claude Code + 워크트리 패턴에 크게 의존하는 팀에게 도구가 더욱 강력해집니다.

TL;DR (again)

  • Problem: Claude가 만든 변경 사항을 여러 마이크로서비스에 걸쳐 검증하려면 번거로운 워크트리 경로 처리가 필요합니다.
  • Solution: Recomposable – Docker‑Compose TUI로, 한 번의 키 입력만으로 원하는 서비스의 Git 워크트리를 전환하고, 각 서비스별 현재 워크트리를 명확한 표로 보여줍니다.
  • Result: 경로 복사·붙여넣기 없이, 추가 docker compose -f … 플래그 없이도, 각 컨테이너가 실행 중인 브랜치를 한눈에 파악할 수 있습니다.

시도해 보시고, UI가 무거운 작업을 대신하도록 해 보세요!

# Recomposable – Multi‑service Worktree Switch

> “0 commits ahead” is a different risk profile than a change that only touches a single config file.

무엇을 하는가

Recomposable는 저장소의 모든 서비스를 하나의 Docker Compose 파일에서 동일한 작업 트리로 단일 작업으로 전환할 수 있게 합니다.
변경 사항이 여러 서비스에 걸쳐 있을 때, 이제 각 서비스를 개별적으로 전환할 필요가 없으며 마찰이 사라집니다.

설치

npm install -g recomposable

Quick start

  1. Navigate to a directory that contains a docker‑compose.yml file.

  2. Create a recomposable.json that points to the compose files you want to manage.

  3. Run the tool:

    recomposable

The worktree feature works out‑of‑the‑box with any Git repository that has multiple worktrees.

링크

  • GitHub:
  • npm:

## 작동 방식

Recomposable는 저장소의 **all services**를 하나의 Docker Compose 파일에서 동일한 워크트리로 단일 작업으로 전환할 수 있게 합니다.  
변경 사항이 여러 서비스에 걸쳐 있을 때, 이제 각 서비스를 개별적으로 전환할 필요가 없으며 – 불편함이 사라집니다.

## 설치

```bash
npm install -g recomposable

빠른 시작

  1. Navigatedocker‑compose.yml 파일이 포함된 디렉터리로 이동합니다.

  2. 관리하려는 compose 파일을 가리키는 recomposable.jsonCreate합니다.

  3. 도구를 Run합니다:

    recomposable

워크트리 기능은 여러 워크트리를 가진 모든 Git 저장소에서 별도 설정 없이 바로 작동합니다.

링크

  • GitHub:
  • npm:
0 조회
Back to Blog

관련 글

더 보기 »

내가 만드는 모든 서비스는 죽는다

그게 바로 요점입니다. 저는 급여에서 직접 청구서를 결제할 수 있게 하는 핀테크 스타트업 Ontime Payments에서 시니어 소프트웨어 엔지니어로 일하고 있습니다. 우리는 의도적으로...