# 워크스페이스 격리 (/ko/docs/verdent-manager/advanced-features/workspace-isolation)

> Verdent가 git worktree로 병렬 코드 변경을 분리하는 방법



워크스페이스 격리는 git worktree를 사용해 파일 시스템 수준에서 병렬 코드 변경을 분리합니다. 워크스페이스에는 자체 디렉터리, 브랜치 체크아웃, 파일, 스테이징 상태가 있습니다.

<Note>
  현재 Verdent Desktop 인터페이스에서는 수동 워크스페이스 생성이 제공되지 않습니다. **New Workspace** 버튼, 해당 키보드 단축키, **Duplicate to New Workspace**는 숨겨져 있습니다. 응답을 복제하면 현재 워크스페이스에 새 작업이 생성됩니다.
</Note>

***

## 배울 내용 [#배울-내용]

* 워크스페이스 격리가 충돌을 방지하는 방법
* git worktree가 격리를 가능하게 하는 방법
* Base Workspace와 워크스페이스의 차이
* 기존 워크스페이스와 Verdent가 관리하는 워크스페이스가 인터페이스에 표시되는 방식
* 워크스페이스 관리 모범 사례

***

## 워크스페이스 격리란? [#워크스페이스-격리란]

Verdent가 별도 워크스페이스에서 작업을 실행하면, 한 worktree의 변경 사항이 다른 worktree의 파일이나 스테이징 상태를 수정하지 않습니다. 따라서 병렬 구현과 리뷰를 더 안전하게 진행할 수 있습니다.

### 작동 방식 [#작동-방식]

| 계층       | 작동 방식                                   |
| -------- | --------------------------------------- |
| **디렉터리** | 각 워크스페이스는 격리된 디렉터리입니다                   |
| **브랜치**  | 각 워크스페이스에는 자체 브랜치 체크아웃이 있습니다            |
| **파일**   | 한 워크스페이스의 파일 변경은 다른 워크스페이스에 영향을 주지 않습니다 |
| **스테이징** | 각 워크스페이스에는 자체 스테이징 영역이 있습니다             |

### 장점 [#장점]

<CardGroup cols="2">
  <Card title="간섭 없음" icon="shield-halved">
    파일 변경은 별도의 worktree 디렉터리에 유지됩니다
  </Card>

  <Card title="안전한 실험" icon="flask">
    안정적인 코드에 영향을 주지 않고 위험한 변경을 시도할 수 있습니다
  </Card>

  <Card title="명확한 비교" icon="code-compare">
    git diff를 사용해 워크스페이스별 접근 방식을 비교할 수 있습니다
  </Card>

  <Card title="선택적 리베이스" icon="code-merge">
    신뢰하는 결과만 리베이스합니다
  </Card>
</CardGroup>

***

## Base Workspace와 워크스페이스 [#base-workspace와-워크스페이스]

### Base Workspace [#base-workspace]

Base 워크스페이스는 원래 저장소 체크아웃이며, 기본 시작점 역할을 합니다.

| 특성         | 설명                      |
| ---------- | ----------------------- |
| **위치**     | 원래 git clone 또는 init 위치 |
| **기본 브랜치** | 일반적으로 main 또는 개발 브랜치    |
| **기준점**    | 실험 작업을 비교하는 기준 소스       |

**Base를 사용할 때:**

* 격리가 필요 없는 빠른 변경
* 실험 작업을 비교하기 위한 기준점
* 변경 사항을 main 브랜치에 직접 반영하고 싶을 때
* 병렬 실행이 필요 없는 단순한 작업

### 워크스페이스 [#워크스페이스]

워크스페이스는 git worktree를 사용해 만든 격리된 작업 환경이며, 자체 독립 브랜치 체크아웃과 파일 상태를 가집니다.

지원되는 워크플로에서 격리된 코드 변경이 필요할 때 Verdent는 워크스페이스를 사용할 수 있습니다. 기존 워크스페이스는 해당 프로젝트와 계속 연결되며 여러 작업을 포함할 수 있습니다.

***

## 기존 워크스페이스로 작업하기 [#기존-워크스페이스로-작업하기]

이미 프로젝트에 속한 워크스페이스는 Projects 패널에서 해당 프로젝트 아래에 함께 그룹화됩니다. 워크스페이스를 선택해 작업과 파일 상태를 확인합니다.

* 같은 워크스페이스 안의 작업은 파일을 공유하지만, 대화 컨텍스트는 별도로 유지합니다.
* 다른 워크스페이스로 전환하면 활성 worktree와 브랜치 컨텍스트가 변경됩니다.
* 응답을 복제하면 복제된 작업은 현재 워크스페이스에 유지됩니다.
* 필요한 작업을 커밋, 리베이스하거나 다른 방식으로 보존한 뒤에만 워크스페이스를 삭제합니다.

***

## 워크스페이스 변경 사항 리베이스 [#워크스페이스-변경-사항-리베이스]

워크스페이스 변경 사항을 main 브랜치에 다시 통합할 준비가 되면 다음을 진행합니다.

### Verdent UI 사용 [#verdent-ui-사용]

<Steps>
  <Step title="작업 완료">
    워크스페이스에서 작업을 완료합니다
  </Step>

  <Step title="변경 사항 검토">
    가운데 패널에서 **Task Changes**를 선택해 모든 수정 사항을 검토합니다
  </Step>

  <Step title="main 브랜치로 리베이스">
    Workspace Bar에서 **Workspace Actions → Rebase to main branch**를 선택합니다
  </Step>

  <Step title="충돌 해결">
    메시지가 표시되면 충돌을 해결합니다
  </Step>

  <Step title="확인">
    확정하기 전에 변경 사항을 검토합니다
  </Step>
</Steps>

### 워크스페이스 최신 상태 유지 [#워크스페이스-최신-상태-유지]

**Workspace Actions → Sync with main branch**를 사용해 main 브랜치의 최신 변경 사항을 워크스페이스로 가져옵니다. 이렇게 하면 리베이스할 때 큰 충돌을 방지하는 데 도움이 됩니다.

***

## 모범 사례 [#모범-사례]

### 워크스페이스 유지 관리 [#워크스페이스-유지-관리]

| 실천 방법                 | 이유                       |
| --------------------- | ------------------------ |
| **리베이스한 워크스페이스 삭제**   | 디스크 공간을 확보합니다            |
| **중단한 실험 제거**         | 워크스페이스 목록을 관리하기 쉽게 유지합니다 |
| **워크스페이스 수를 적정하게 유지** | 시스템 리소스는 한정되어 있습니다       |

### Git 관리 [#git-관리]

| 실천 방법               | 이유                                   |
| ------------------- | ------------------------------------ |
| **자주 커밋**           | 전환하기 전에 진행 중인 작업을 커밋합니다              |
| **작은 커밋**           | 작은 커밋은 cherry-pick하기 더 쉽습니다          |
| **base와 정기적으로 동기화** | 워크스페이스가 main 브랜치에서 너무 멀리 갈라지지 않게 합니다 |
| **충돌 복잡도 줄이기**      | 정기적인 통합은 큰 충돌을 방지합니다                 |

***

## FAQ [#faq]

<AccordionGroup>
  <Accordion title="각 워크스페이스는 디스크 공간을 얼마나 사용하나요?">
    각 워크스페이스는 작업 파일을 복제하지만 `.git` 디렉터리는 공유합니다. 공간 사용량은 대략 워크스페이스마다 프로젝트 크기와 비슷합니다. 여러 병렬 워크스페이스가 있는 대형 프로젝트는 상당한 디스크 공간을 사용합니다.
  </Accordion>

  <Accordion title="워크스페이스를 삭제할 수 있나요?">
    예. Verdent에서 워크스페이스를 삭제합니다. 디렉터리는 제거되지만 브랜치에 커밋된 작업은 보존됩니다.
  </Accordion>

  <Accordion title="새 워크스페이스는 어떻게 만드나요?">
    현재 Desktop 인터페이스에서는 수동 생성이 제공되지 않습니다. **New Workspace** 항목과 단축키는 숨겨져 있습니다. 그래도 Verdent는 지원되는 격리 워크플로에서 내부적으로 워크스페이스를 사용할 수 있습니다.
  </Accordion>

  <Accordion title="워크스페이스를 삭제하면 커밋하지 않은 변경 사항은 어떻게 되나요?">
    워크스페이스를 삭제하면 커밋하지 않은 변경 사항은 손실됩니다. 워크스페이스를 제거하기 전에 항상 변경 사항을 커밋하거나 stash합니다.
  </Accordion>

  <Accordion title="워크스페이스를 base 워크스페이스로 변환할 수 있나요?">
    직접 변환할 수는 없지만, 워크스페이스의 모든 변경 사항을 main 브랜치로 리베이스한 다음 워크스페이스를 삭제할 수 있습니다. 브랜치 기록은 보존됩니다.
  </Accordion>

  <Accordion title="worktree는 모든 git 호스팅 서비스에서 작동하나요?">
    예. Git worktree는 표준 git 기능입니다. GitHub, GitLab, Bitbucket, 기타 모든 git 호스팅 서비스와 함께 작동합니다.
  </Accordion>
</AccordionGroup>
