> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 코드 저장 및 비교

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

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

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

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

<Info>
  기본적으로 W\&B는 모든 팀에 대해 코드 저장을 비활성화합니다. 팀에 대해 이를 활성화하려면, 조직 관리자가 조직에 대해 **기본 코드 저장 비활성화**를 꺼둔 상태로 유지해야 합니다. [조직](#organization) 섹션을 참조하세요.
</Info>

<h3 id="team">
  팀
</h3>

팀 관리자가 팀의 코드 저장을 활성화하려면 **Settings** 페이지로 이동한 다음 **개인정보 보호** 섹션에서 해당 팀의 run에 대해 **Enable code saving by default**를 설정하세요. 이 옵션은 조직 관리자가 조직 전체에 **기본 코드 저장 비활성화**를 켜지 않은 경우에만 사용 가능합니다. 메뉴 이동 방법은 [팀의 개인정보 보호 설정 구성](/ko/products/wandb/platform/hosting/privacy-settings#configure-privacy-settings-for-a-team)을 참조하세요.

<h3 id="organization">
  조직
</h3>

조직 관리자는 **Settings**로 이동하여 **개인정보 보호**를 선택한 다음, **Project and content security** 섹션의 **기본 코드 저장 비활성화**를 사용해 모든 팀에서 코드 저장을 기본적으로 끌지 여부를 제어할 수 있습니다. 이 설정이 켜져 있는 동안에는 팀 관리자가 자신의 팀에 대해 **Enable code saving by default**를 켤 수 없습니다. 조직 제어 항목의 전체 목록은 [모든 팀에 개인정보 보호 설정 강제 적용하기](/ko/products/wandb/platform/hosting/privacy-settings#enforce-privacy-settings-for-all-teams)를 참조하세요.

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

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

코드를 저장하는 방법에는 세분화된 방식과 자동 방식 두 가지가 있습니다.

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

`wandb.Run.log_code()`를 사용하여 특정 파일이나 디렉터리를 [아티팩트](/ko/products/wandb/ref/python/experiments/artifact)로 로깅하세요.

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

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

```python theme={"system"}
import wandb

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

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

```python theme={"system"}
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/products/wandb/ref/python/experiments/run#log_code)를 참조하세요.

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

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

* `.py`로 끝나는 파일
* requirements.txt
* Dockerfile
* `wandb/` 또는 `.wandb/` 아래의 모든 항목 제외

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

```python theme={"system"}
import wandb

with wandb.init(settings=wandb.Settings(code_dir=".")) as run:
    # 여기 트레이닝 코드
```

`.`을 캡처하려는 디렉터리의 경로로 바꿔 다른 디렉터리를 지정할 수도 있습니다.

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

W\&B는 Git 저장소에서 staged 또는 unstaged 변경 사항이 있는 코드를 로깅할 때 diff 파일을 생성하며, W\&B UI에서 변경 사항을 볼 수 있습니다.

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

diff 파일을 보려면:

1. 프로젝트의 워크스페이스로 이동하세요.
2. left 사이드바에서 **워크스페이스**를 클릭하세요.
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/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/diff_unified_view.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=e9e70ee524d46ab1fad4f4acd6496168" alt="Diff patch unified view" width="3258" height="1232" data-path="products/wandb/_media/diff_unified_view.png" />
  </Frame>

* Split 뷰는 두 개의 패널에 나란히 diff를 표시합니다:

  <Frame>
    <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/diff_split_view.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=9a13d394d56b24dab5a524183c37c44d" alt="Diff patch split view" width="3272" height="1084" data-path="products/wandb/_media/diff_split_view.png" />
  </Frame>

diff 뷰의 upper right corner, **Download** 버튼 아래에 있는 **Unified** 또는 **Split** 버튼을 선택하여 두 뷰 간에 표시/숨기기하세요.

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

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

1. 코드가 포함된 프로젝트의 워크스페이스로 이동하세요.
2. 프로젝트 사이드바에서 **Artifacts** 탭을 선택하세요.
3. **code** 아티팩트를 확장하세요.
4. **Files** 탭을 선택하세요.

<Frame>
  <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/jupyter_session_history.gif?s=f3d7f95da48784cb05e41a1b854f8ec9" alt="Jupyter 세션 이력" width="3868" height="2574" data-path="products/wandb/_media/jupyter_session_history.gif" />
</Frame>

이 화면에는 IPython의 `display` 메서드를 호출하여 생성된 출력과 함께 세션에서 실행된 셀이 표시됩니다. 이를 통해 특정 run 내에서 Jupyter에서 실행된 코드를 정확히 확인할 수 있습니다. 가능한 경우 W\&B는 노트북의 가장 최근 버전도 저장하며, 코드 디렉터리에서도 확인할 수 있습니다.

<Frame>
  <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/jupyter_session_history_display.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=8be116a89181083f0c994627894adaee" alt="Jupyter 세션 출력" width="3707" height="1708" data-path="products/wandb/_media/jupyter_session_history_display.png" />
</Frame>

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

다른 W\&B run에서 사용된 코드를 비교하세요:

1. 페이지의 오른쪽 상단에 있는 **Add panels** 버튼을 선택하세요.
2. **TEXT AND CODE** 드롭다운을 확장하고 **코드**를 선택하세요.

<Frame>
  <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/code_comparer.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=fe09c2fd7401fcf13e1cada70c0f2d50" alt="코드 비교기 패널" width="887" height="337" data-path="products/wandb/_media/code_comparer.png" />
</Frame>


## Related topics

- [Evaluation Playground를 사용하여 모델 성능 비교](/ko/products/wandb/weave/guides/tools/evaluation_playground.md)
