> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-docs-sandboxes-integrations-placement.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 코드 저장 및 비교

> 코드 저장을 활성화하고, 코드 비교로 여러 W&B run의 코드를 비교하며, Jupyter 세션 이력을 캡처하세요.

W\&B를 사용하여 코드를 저장하고, 여러 run 간 코드를 비교하고, 로컬 변경 사항을 확인하고, Jupyter 세션 이력을 캡처하세요.

<div id="enable-code-saving">
  ## 코드 저장 활성화
</div>

팀 또는 조직의 코드 저장을 설정하세요. 팀 및 조직 제어에 대해서는 [개인정보 보호 설정 구성](/ko/platform/hosting/privacy-settings)에 설명되어 있습니다.

<Info>
  기본적으로 W\&B는 모든 팀에서 코드 저장을 비활성화합니다. 팀에서 이 기능을 켜려면 먼저 조직 관리자가 조직 수준에서 이를 활성화해야 합니다. [조직](#organization) 섹션을 참조하세요.
</Info>

<div id="team">
  ### 팀
</div>

팀 관리자로서 팀의 코드 저장을 활성화하려면 팀 **Settings** 페이지를 열고 **Privacy** 섹션으로 이동한 다음, 해당 팀의 run에 대해 **Enable code saving by default**를 설정하세요. 이 옵션은 조직 관리자가 조직 전체에 코드 저장 제한을 강제 적용하지 않은 경우에만 사용 가능합니다. 내비게이션 단계는 [팀의 개인정보 보호 설정 구성](/ko/platform/hosting/privacy-settings#configure-privacy-settings-for-a-team)을 참조하세요.

<div id="organization">
  ### 조직
</div>

조직 관리자가 조직의 코드 저장을 사용 설정하려면 **Settings**로 이동하여 **Privacy** 섹션으로 이동한 다음, **Enforce default code saving restrictions**를 켜서 모든 팀에서 코드 저장이 기본적으로 꺼진 상태로 유지되도록 하세요. 이 설정이 강제 적용되는 동안에는 팀 관리자가 팀에 대해 **Enable code saving by default**를 켤 수 없습니다. 조직 제어 기능의 전체 목록은 [모든 팀에 개인정보 보호 설정 강제 적용](/ko/platform/hosting/privacy-settings#enforce-privacy-settings-for-all-teams)을 참조하세요.

<div id="save-code">
  ## 코드 저장
</div>

run을 생성한 소스 코드를 [아티팩트](/ko/models/ref/python/experiments/artifact)로 캡처하세요. 코드 아티팩트는 프로젝트의 워크스페이스에서 볼 수 있습니다.

코드를 저장하는 방법은 두 가지입니다. 세밀하게 제어하는 방식과 자동 방식입니다.

<div id="fine-grain-control">
  ### 세밀한 제어
</div>

`wandb.Run.log_code()`를 사용해 특정 파일이나 디렉터리를 [아티팩트](/ko/models/ref/python/experiments/artifact)로 로깅할 수 있습니다.

기본적으로 W\&B는 현재 디렉터리를 순회하며 `.py`로 끝나는 모든 파일을 로깅합니다.

다음 예시는 `wandb.Run.log_code()`를 사용해 현재 디렉터리를 로깅하는 방법을 보여줍니다.

```python theme={null}
import wandb

with wandb.init() as run:
    # 현재 디렉토리를 코드 아티팩트로 기록합니다
    run.log_code(root=".")
```

다음 예시는 코드를 기록할 때 포함할 파일과 제외할 파일을 지정하기 위해 `include_fn=` 및 `exclude_fn=` 매개변수와 함께 `wandb.Run.log_code()`를 사용하는 방법을 보여줍니다:

```python theme={null}
import wandb

with wandb.init() as run:
    run.log_code(
         root="../",
         include_fn=lambda path: path.endswith(".py") or path.endswith(".ipynb"),
         exclude_fn=lambda path, root: os.path.relpath(path, root).startswith(
             "cache/"
         ),
    )
```

W\&B가 저장하는 소스 코드 파일의 유형과 저장 위치를 더 세부적으로 제어하려면 [레퍼런스 문서](/ko/models/ref/python/experiments/run#log_code)를 참조하세요.

<div id="automatically-capture-code">
  ### 코드 자동 캡처
</div>

현재 디렉터리와 하위 디렉터리의 모든 코드를 자동으로 캡처하려면 `wandb.init(settings=wandb.Settings(code_dir=))`를 사용하세요. 기본적으로 W\&B는 다음을 캡처합니다:

* `.py`로 끝나는 파일
* requirements.txt
* Dockerfile
* `wandb/` 또는 `.wandb/` 아래에 있는 항목은 제외

다음 예시에서는 현재 디렉터리와 하위 디렉터리의 모든 코드를 캡처하는 방법을 보여줍니다:

```python theme={null}
import wandb

with wandb.init(settings=wandb.Settings(code_dir=".")) as run:
    # 트레이닝 코드를 여기에 작성하세요
```

`.` 대신 캡처할 디렉터리의 경로를 입력하면 다른 디렉터리를 지정할 수도 있습니다.

<div id="view-local-changes">
  ## 로컬 변경 사항 보기
</div>

W\&B는 Git 저장소에 스테이징된 변경 사항이나 스테이징되지 않은 변경 사항이 있는 상태에서 코드를 로깅하면 diff 파일을 생성하며, W\&B UI에서 이러한 변경 사항을 확인할 수 있습니다.

W\&B는 diff 파일 이름을 `diff.patch` 또는 `diff_<sha>.patch`로 지정합니다. 이 파일에는 `HEAD`를 기준으로 아직 Git에 커밋되지 않은 로컬 코드 변경 사항이 포함됩니다.

diff 파일을 보려면 다음 단계를 따르세요.

1. 프로젝트의 워크스페이스로 이동합니다.
2. 왼쪽 사이드바에서 **워크스페이스**를 클릭합니다.
3. run 선택기에서 diff를 보려는 run을 선택합니다.
4. run **Overview** 페이지에서 **Files** 탭을 선택합니다.
5. 파일 목록에서 `diff.patch` 또는 `diff_<sha>.patch` 파일을 선택합니다.
6. 목록에서 파일을 선택해 해당 파일의 diff를 펼칩니다.

W\&B는 여러 run에 걸친 diff를 볼 수 있도록 *unified*와 *split*의 두 가지 모드를 지원합니다.

* Unified 뷰는 diff를 단일 창에 표시합니다.
  <Frame>
    <img src="https://mintcdn.com/wb-21fd5541-docs-sandboxes-integrations-placement/MAxbgoUtLbv2P8uu/images/app_ui/diff_unified_view.png?fit=max&auto=format&n=MAxbgoUtLbv2P8uu&q=85&s=4ecaaa22e5576f0de8ce8ba98292f460" alt="Diff 패치 unified 뷰" width="3258" height="1232" data-path="images/app_ui/diff_unified_view.png" />
  </Frame>

* Split 뷰는 diff를 두 개의 창에 나란히 표시합니다.

  <Frame>
    <img src="https://mintcdn.com/wb-21fd5541-docs-sandboxes-integrations-placement/MAxbgoUtLbv2P8uu/images/app_ui/diff_split_view.png?fit=max&auto=format&n=MAxbgoUtLbv2P8uu&q=85&s=d93c5ca3229897e25306bd74e964c0ad" alt="Diff 패치 split 뷰" width="3272" height="1084" data-path="images/app_ui/diff_split_view.png" />
  </Frame>

diff 뷰 오른쪽 위의 **Download** 버튼 아래에서 **Unified** 또는 **Split** 버튼을 선택해 두 뷰 사이를 전환하세요.

<div id="jupyter-session-history">
  ## Jupyter 세션 이력
</div>

W\&B는 Jupyter 노트북 세션에서 실행한 코드의 이력을 저장합니다. Jupyter에서 `wandb.init()`를 호출하면 W\&B가 후크를 추가해 현재 세션에서 실행한 코드 이력이 포함된 Jupyter 노트북을 자동으로 저장합니다.

1. 코드가 있는 프로젝트 워크스페이스로 이동합니다.
2. 프로젝트 사이드바에서 **Artifacts** 탭을 선택합니다.
3. **code** 아티팩트를 펼칩니다.
4. **Files** 탭을 선택합니다.

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-docs-sandboxes-integrations-placement/hS4tNv5jzsGoCezc/images/app_ui/jupyter_session_history.gif?s=cd9cddda2379ec75096cc8b495b577f5" alt="Jupyter 세션 이력" width="3868" height="2574" data-path="images/app_ui/jupyter_session_history.gif" />
</Frame>

그러면 세션에서 실행된 셀과 IPython의 `display` 메서드를 호출해 생성된 모든 출력이 표시됩니다. 이를 통해 특정 run에서 Jupyter 내에서 정확히 어떤 코드가 실행되었는지 확인할 수 있습니다. 가능하면 W\&B는 노트북의 최신 버전도 저장하며, 이 파일은 code 디렉터리에서도 찾을 수 있습니다.

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-docs-sandboxes-integrations-placement/hS4tNv5jzsGoCezc/images/app_ui/jupyter_session_history_display.png?fit=max&auto=format&n=hS4tNv5jzsGoCezc&q=85&s=e9d104acea20e55287aed185fe94f0c5" alt="Jupyter 세션 출력" width="3826" height="1840" data-path="images/app_ui/jupyter_session_history_display.png" />
</Frame>

<div id="compare-code-across-runs">
  ## run 간 코드 비교
</div>

서로 다른 W\&B run에서 사용된 코드를 비교합니다:

1. 페이지 오른쪽 상단에 있는 **Add panels** 버튼을 선택합니다.
2. **TEXT AND CODE** 드롭다운을 펼친 후 **Code**를 선택합니다.

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-docs-sandboxes-integrations-placement/MAxbgoUtLbv2P8uu/images/app_ui/code_comparer.png?fit=max&auto=format&n=MAxbgoUtLbv2P8uu&q=85&s=2316d21dcaa56878843af6f170d917a5" alt="코드 비교 패널" width="887" height="337" data-path="images/app_ui/code_comparer.png" />
</Frame>
