> ## 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.

# 환경 변수

> 세션 수준 기본값을 포함하여 CWSandbox 인스턴스에서 환경 변수를 설정하고 관리합니다

이 예시에서는 `CWSANDBOX_API_KEY`에 CoreWeave API 액세스 토큰을 사용합니다. Forge API 키 인증은 [시작하기](/ko/products/sandboxes/get-started)를 참조하세요. CKS 요구 사항은 [배치 모드](/ko/products/sandboxes/placement)를 참조하세요.

이 가이드에서는 CWSandbox 인스턴스에서 환경 변수를 설정하고 관리하는 방법을 설명합니다. 환경 변수를 사용하면 로그 수준이나 프로젝트 식별자 같은 민감하지 않은 설정 값을 샌드박스에 전달할 수 있습니다. 환경 변수는 개별 샌드박스에 설정하거나, 세션 내 여러 샌드박스에서 공유하거나, 원격 함수 범위로 한정할 수 있습니다.

<Warning>
  API 키, 비밀번호 또는 기타 자격 증명을 `environment_variables`에 하드코딩하거나 로그에 출력하지 마세요. 원시 자격 증명을 직접 전달하기보다는 시크릿 참조를 사용하는 것이 좋습니다. Forge 시크릿 주입을 사용할 수 없는 경우에도 민감한 값은 시크릿 관리자에 보관하세요. 이 지침은 serverless 샌드박스와 CKS 샌드박스 모두에 적용됩니다.
</Warning>

Forge로 인증된 serverless 샌드박스에서는 [Forge 시크릿](/ko/products/sandboxes/secrets)을 사용하세요. 서버가 이 참조를 확인한 뒤 해당 값을 환경 변수로 주입합니다. CKS 배치를 사용하거나 CoreWeave API 액세스 토큰으로 인증된 샌드박스에서는 Forge 시크릿 주입을 사용할 수 없습니다. CKS에서는 조직에서 승인한 방법으로 워크로드에 시크릿을 전달하세요.

<h2 id="basic-usage">
  기본 사용법
</h2>

샌드박스 내부에서 실행되는 process에 값을 사용 가능하게 하려면 `environment_variables` 딕셔너리를 `Sandbox.run`에 전달하세요:

```python theme={"system"}
from cwsandbox import Sandbox

with Sandbox.run(
    environment_variables={"LOG_LEVEL": "info"},
) as sandbox:
    result = sandbox.exec([
        "python",
        "-c",
        "import os; print(os.environ.get('LOG_LEVEL'));",
    ]).result()
    print(result.stdout.strip())  # "info"
```

<h2 id="session-level-defaults">
  세션 수준 기본값
</h2>

여러 샌드박스에서 동일한 변수를 필요로 할 때, 각 샌드박스마다 반복해서 정의하는 대신 세션에 한 번 정의하세요. 개별 샌드박스는 세션 기본값을 재정의하거나 자체 변수를 추가할 수 있습니다:

```python theme={"system"}
from cwsandbox import SandboxDefaults, Session

defaults = SandboxDefaults(
    environment_variables={
        "PROJECT_ID": "my-project",
        "LOG_LEVEL": "info",
    },
)

with Session(defaults) as session:
    with session.sandbox() as sb1:
        result = sb1.exec([
            "python",
            "-c",
            "import os; print(os.environ.get('LOG_LEVEL'));",
        ]).result()
        print(result.stdout.strip())  # "info"

    # LOG_LEVEL을 오버라이드하고 새 변수를 추가합니다
    with session.sandbox(
        environment_variables={
            "LOG_LEVEL": "debug",  # 세션 기본값 오버라이드
            "MODEL_NAME": "gpt-4",  # 새 변수 추가
        }
    ) as sb2:
        result = sb2.exec([
            "python",
            "-c",
            "import os; "
            "print(os.environ.get('PROJECT_ID')); "
            "print(os.environ.get('LOG_LEVEL')); "
            "print(os.environ.get('MODEL_NAME'));",
        ]).result()
        lines = result.stdout.strip().split("\n")
        print(lines)  # ["my-project", "debug", "gpt-4"]
```

<h2 id="remote-functions">
  원격 함수
</h2>

원격 함수는 세션에서 환경 변수를 상속받으며 `@session.function` 데코레이터를 통해 자체 환경 변수를 선언할 수 있습니다. SDK는 호출 시점에 함수 수준의 환경 변수와 세션 기본값을 병합합니다:

```python theme={"system"}
with Session(defaults) as session:
    @session.function(environment_variables={"MODEL_VERSION": "v2.0"})
    def process(task_id: int) -> dict:
        import os
        return {
            "task": task_id,
            "project": os.environ.get("PROJECT_ID"),  # 세션 기본값에서
            "version": os.environ.get("MODEL_VERSION"),  # 함수 데코레이터에서
        }

    result = process.remote(42).result()
    print(result)  # {"task": 42, "project": "my-project", "version": "v2.0"}
```

<Warning>
  환경 변수는 참조로 전달됩니다. 데코레이션 이후 딕셔너리의 변경 사항은 후속 함수 호출에 반영됩니다. 다음 예시에서 볼 수 있듯이.
</Warning>

```python theme={"system"}
env_vars = {"MODEL_VERSION": "v2.0"}

@session.function(environment_variables=env_vars)
def process(task_id: int) -> dict:
    import os
    return {"version": os.environ.get("MODEL_VERSION")}

result = process.remote(42).result()  # 버전: "v2.0"

env_vars["MODEL_VERSION"] = "v3.0"  # 딕셔너리를 수정합니다

result = process.remote(42).result()  # 버전: "v3.0" (changed)
```
