{"meta":{"title":"BYOK(사용자 고유의 키 가져오기)","intro":"BYOK를 사용하면 GitHub Copilot 인증을 우회하여 모델 공급자의 고유한 API 키와 함께 Copilot SDK를 사용할 수 있습니다. 엔터프라이즈 배포, 사용자 지정 모델 호스팅 또는 모델 공급자에게 직접 청구하려는 경우에 유용합니다.","product":"GitHub Copilot","breadcrumbs":[{"href":"/ko/copilot","title":"GitHub Copilot"},{"href":"/ko/copilot/how-tos","title":"방법"},{"href":"/ko/copilot/how-tos/copilot-sdk","title":"코필로트 SDK"},{"href":"/ko/copilot/how-tos/copilot-sdk/auth","title":"인증"},{"href":"/ko/copilot/how-tos/copilot-sdk/auth/byok","title":"BYOK"}],"documentType":"article"},"body":"# BYOK(사용자 고유의 키 가져오기)\n\nBYOK를 사용하면 GitHub Copilot 인증을 우회하여 모델 공급자의 고유한 API 키와 함께 Copilot SDK를 사용할 수 있습니다. 엔터프라이즈 배포, 사용자 지정 모델 호스팅 또는 모델 공급자에게 직접 청구하려는 경우에 유용합니다.\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\n## 지원되는 공급자\n\n| Provider                                                            | 타입 값          | Notes                                 |\n| ------------------------------------------------------------------- | ------------- | ------------------------------------- |\n| OpenAI                                                              | `\"openai\"`    | OpenAI API 및 OpenAI 호환 엔드포인트          |\n| Microsoft Foundry/Azure OpenAI                                      |               |                                       |\n| `\"openai\"` 또는 `\"azure\"`                                             |               |                                       |\n| `\"azure\"`에는 `/openai/v1/`을 사용하고, 기본 Azure 엔드포인트에는 `\"openai\"`를 사용하세요 |               |                                       |\n| Anthropic                                                           | `\"anthropic\"` | 클로드 모델                                |\n| Ollama                                                              | `\"openai\"`    | OpenAI 호환 API를 통한 로컬 모델               |\n| Microsoft Foundry 로컬                                                | `\"openai\"`    | OpenAI 호환 API를 통해 디바이스에서 로컬로 AI 모델 실행 |\n| 기타 OpenAI 호환                                                        | `\"openai\"`    | vLLM, LiteLLM 등                       |\n\n## 빠른 시작: Microsoft Foundry\n\nMicrosoft Foundry는 기업의 일반적인 BYOK 배포 대상입니다. 전체 예제는 다음과 같습니다.\n\n<div class=\"ghd-codetabs\">\n<div class=\"ghd-codetab\" data-lang=\"python\" data-label=\"Python\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Python</div>\n\n```python\nimport asyncio\nimport os\nfrom copilot import CopilotClient\nfrom copilot.session import PermissionHandler\n\nFOUNDRY_MODEL_URL = \"https://<resource-name>.openai.azure.com/openai/v1/\"\n# Set FOUNDRY_API_KEY environment variable\n\nasync def main():\n    client = CopilotClient()\n    await client.start()\n\n    session = await client.create_session(on_permission_request=PermissionHandler.approve_all, model=\"gpt-5.2-codex\", provider={\n        \"type\": \"openai\",\n        \"base_url\": FOUNDRY_MODEL_URL,\n        \"wire_api\": \"responses\",  # Use \"completions\" for older models\n        \"api_key\": os.environ[\"FOUNDRY_API_KEY\"],\n    })\n\n    done = asyncio.Event()\n\n    def on_event(event):\n        if event.type.value == \"assistant.message\":\n            print(event.data.content)\n        elif event.type.value == \"session.idle\":\n            done.set()\n\n    session.on(on_event)\n    await session.send(\"What is 2+2?\")\n    await done.wait()\n\n    await session.disconnect()\n    await client.stop()\n\nasyncio.run(main())\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"typescript\" data-label=\"TypeScript\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">TypeScript</div>\n\n```typescript\nimport { CopilotClient } from \"@github/copilot-sdk\";\n\nconst FOUNDRY_MODEL_URL = \"https://<resource-name>.openai.azure.com/openai/v1/\";\n\nconst client = new CopilotClient();\nconst session = await client.createSession({\n    model: \"gpt-5.2-codex\",  // Your deployment name\n    provider: {\n        type: \"openai\",\n        baseUrl: FOUNDRY_MODEL_URL,\n        wireApi: \"responses\",  // Use \"completions\" for older models\n        apiKey: process.env.FOUNDRY_API_KEY,\n    },\n});\n\nsession.on(\"assistant.message\", (event) => {\n    console.log(event.data.content);\n});\n\nawait session.sendAndWait({ prompt: \"What is 2+2?\" });\nawait client.stop();\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"go\" data-label=\"Go\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Go</div>\n\n```golang\npackage main\n\nimport (\n    \"context\"\n    \"fmt\"\n    \"os\"\n    copilot \"github.com/github/copilot-sdk/go\"\n)\n\nfunc main() {\n    ctx := context.Background()\n    client := copilot.NewClient(nil)\n    if err := client.Start(ctx); err != nil {\n        panic(err)\n    }\n    defer client.Stop()\n\n    session, err := client.CreateSession(ctx, &copilot.SessionConfig{\n        Model: \"gpt-5.2-codex\",  // Your deployment name\n        Provider: &copilot.ProviderConfig{\n            Type:    \"openai\",\n            BaseURL: \"https://<resource-name>.openai.azure.com/openai/v1/\",\n            WireAPI: \"responses\",  // Use \"completions\" for older models\n            APIKey:  os.Getenv(\"FOUNDRY_API_KEY\"),\n        },\n    })\n    if err != nil {\n        panic(err)\n    }\n\n    response, err := session.SendAndWait(ctx, copilot.MessageOptions{\n        Prompt: \"What is 2+2?\",\n    })\n    if err != nil {\n        panic(err)\n    }\n\n    if d, ok := response.Data.(*copilot.AssistantMessageData); ok {\n        fmt.Println(d.Content)\n    }\n}\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"dotnet\" data-label=\".NET\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">.NET</div>\n\n```csharp\nusing GitHub.Copilot;\n\nawait using var client = new CopilotClient();\nawait using var session = await client.CreateSessionAsync(new SessionConfig\n{\n    Model = \"gpt-5.2-codex\",  // Your deployment name\n    Provider = new ProviderConfig\n    {\n        Type = \"openai\",\n        BaseUrl = \"https://<resource-name>.openai.azure.com/openai/v1/\",\n        WireApi = \"responses\",  // Use \"completions\" for older models\n        ApiKey = Environment.GetEnvironmentVariable(\"FOUNDRY_API_KEY\"),\n    },\n});\n\nvar response = await session.SendAndWaitAsync(new MessageOptions\n{\n    Prompt = \"What is 2+2?\",\n});\nConsole.WriteLine(response?.Data.Content);\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"java\" data-label=\"Java\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Java</div>\n\n```java\nimport com.github.copilot.CopilotClient;\nimport com.github.copilot.rpc.*;\n\nvar client = new CopilotClient();\nclient.start().get();\n\nvar session = client.createSession(new SessionConfig()\n    .setModel(\"gpt-5.2-codex\")  // Your deployment name\n    .setOnPermissionRequest(PermissionHandler.APPROVE_ALL)\n    .setProvider(new ProviderConfig()\n        .setType(\"openai\")\n        .setBaseUrl(\"https://<resource-name>.openai.azure.com/openai/v1/\")\n        .setWireApi(\"responses\")  // Use \"completions\" for older models\n        .setApiKey(System.getenv(\"FOUNDRY_API_KEY\")))\n).get();\n\nvar response = session.sendAndWait(new MessageOptions()\n    .setPrompt(\"What is 2+2?\")).get();\nSystem.out.println(response.getData().content());\n\nclient.stop().get();\n```\n\n</div>\n\n</div>\n\n## 공급자 구성 참조\n\n### ProviderConfig 필드\n\n| Field                                                                                                                                                                                | Type         | Description                                                                    |\n| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------ | ------------------------------------------------------------------------------ |\n| `type`                                                                                                                                                                               |              |                                                                                |\n| `\"openai\"`                                                                                                                                                                           |              |                                                                                |\n| \\|                                                                                                                                                                                   |              |                                                                                |\n| `\"azure\"`                                                                                                                                                                            |              |                                                                                |\n| \\|                                                                                                                                                                                   |              |                                                                                |\n| `\"anthropic\"`                                                                                                                                                                        |              |                                                                                |\n| 공급자 유형(기본값: `\"openai\"`)                                                                                                                                                              |              |                                                                                |\n| `baseUrl` / `base_url`                                                                                                                                                               | string       |                                                                                |\n| **필수입니다**. API 엔드포인트 URL                                                                                                                                                             |              |                                                                                |\n| `apiKey` / `api_key`                                                                                                                                                                 | string       | API 키(Ollama와 같은 로컬 공급자의 경우 선택 사항)                                             |\n| `bearerToken` / `bearer_token`                                                                                                                                                       | string       | 전달자 토큰 인증(apiKey보다 우선)                                                         |\n| `bearerTokenProvider` / `bearer_token_provider`                                                                                                                                      | 콜백(callback) | 요청 시에 Bearer 토큰을 반환합니다(`apiKey` 및 `bearerToken`보다 우선 적용됨)                      |\n| `wireApi` / `wire_api`                                                                                                                                                               |              |                                                                                |\n| `\"completions\"`                                                                                                                                                                      |              |                                                                                |\n| \\|                                                                                                                                                                                   |              |                                                                                |\n| `\"responses\"`                                                                                                                                                                        |              |                                                                                |\n| 광범위한 모델 호환성을 위해서는 `\"completions\"`을 선택하세요(Chat Completions API). 다중 턴 상태 관리, 도구 네임스페이싱 및 추론 지원을 위해서는 `\"responses\"`을 선택하세요(Responses API). Anthropic 모델은 이 설정에 관계없이 항상 메시지 API를 사용합니다. |              |                                                                                |\n| `azure.apiVersion` / `azure.api_version`                                                                                                                                             | string       | Azure API 버전입니다. 설정되면 런타임은 버전이 지정된 배포 경로를 사용합니다. 생략하면 GA 버전 없는 `v1` 경로를 사용합니다. |\n\n### Wire API 형식\n\n이 설정은 `wireApi` 사용할 OpenAI API 형식을 결정합니다.\n\n* **`\"completions\"`** (기본값) - 광범위한 모델 호환성을 위한 채팅 완료 API(`/chat/completions`)입니다.\n* **`\"responses\"`** - 다중 턴 상태 관리, 도구 네임스페이싱 및 추론 지원을 위한 Responses API\n\nAnthropic 모델은 이 설정에 관계없이 항상 Anthropic 메시지 API를 사용합니다.\n\n### 유형별 참고 사항\n\n**OpenAI(`type: \"openai\"`)**\n\n* OpenAI API 및 OpenAI 호환 엔드포인트에서 작동\n* `baseUrl` 에는 전체 경로(예: `https://api.openai.com/v1`)가 포함되어야 합니다.\n\n**Azure(`type: \"azure\"`)**\n\n* 네이티브 Azure OpenAI 엔드포인트에 사용\n* `baseUrl` 는 호스트(예: `https://my-resource.openai.azure.com`)일 뿐입니다.\n* URL에 `/openai/v1`를 넣지 마세요. SDK가 경로를 구성합니다.\n\n**Anthropic(`type: \"anthropic\"`)**\n\n* Anthropic API에 직접 액세스하기 위한\n* 클로드별 API 형식 사용\n\n## 구성 예\n\n### OpenAI 직통\n\n```typescript\nprovider: {\n    type: \"openai\",\n    baseUrl: \"https://api.openai.com/v1\",\n    apiKey: process.env.OPENAI_API_KEY,\n}\n```\n\n### Azure OpenAI(기본 Azure 엔드포인트)\n\n`type: \"azure\"`을(를) `*.openai.azure.com`에 있는 엔드포인트에 사용하십시오.\n\n```typescript\nprovider: {\n    type: \"azure\",\n    baseUrl: \"https://my-resource.openai.azure.com\",  // Just the host\n    apiKey: process.env.AZURE_OPENAI_KEY,\n    azure: {\n        apiVersion: \"2024-10-21\",\n    },\n}\n```\n\n### Microsoft Foundry(OpenAI 호환 엔드포인트)\n\n`/openai/v1/` 엔드포인트가 있는 Microsoft Foundry 배포의 경우 `type: \"openai\"`를 사용합니다:\n\n```typescript\nprovider: {\n    type: \"openai\",\n    baseUrl: \"https://<resource-name>.openai.azure.com/openai/v1/\",\n    apiKey: process.env.FOUNDRY_API_KEY,\n    wireApi: \"responses\",  // For GPT-5 series models\n}\n```\n\n### Ollama (로컬)\n\n```typescript\nprovider: {\n    type: \"openai\",\n    baseUrl: \"http://localhost:11434/v1\",\n    // No apiKey needed for local Ollama\n}\n```\n\n### Microsoft Foundry 로컬\n\n[Microsoft Foundry Local](https://foundrylocal.ai)을 사용하면 OpenAI 호환 API를 사용하여 자체 디바이스에서 로컬로 AI 모델을 실행할 수 있습니다. Foundry 로컬 CLI를 통해 설치한 다음 로컬 엔드포인트에서 SDK를 가리킵니다.\n\n```typescript\nprovider: {\n    type: \"openai\",\n    baseUrl: \"http://localhost:<PORT>/v1\",\n    // No apiKey needed for local Foundry Local\n}\n```\n\n> \\[!NOTE]\n> Foundry Local은 **동적 포트**에서 시작되며 포트는 고정되지 않습니다.\n> `foundry service status`를 사용하여 서비스가 현재 수신 대기 중인 포트를 확인한 다음, `baseUrl`에서 해당 포트를 사용합니다.\n\nFoundry Local을 시작하려면 다음을 수행합니다.\n\n```bash\n# Windows: Install Foundry Local CLI (requires winget)\nwinget install Microsoft.FoundryLocal\n\n# macOS / Linux: see https://foundrylocal.ai for installation instructions\n# List available models\nfoundry model list\n\n# Run a model (starts the local server automatically)\nfoundry model run phi-4-mini\n\n# Check the port the service is running on\nfoundry service status\n```\n\n### Anthropic\n\n```typescript\nprovider: {\n    type: \"anthropic\",\n    baseUrl: \"https://api.anthropic.com\",\n    apiKey: process.env.ANTHROPIC_API_KEY,\n}\n```\n\n### 전달자 토큰 인증\n\n일부 공급자는 API 키 대신 전달자 토큰 인증이 필요합니다.\n`bearerToken`와 함께 정적 토큰을 제공하거나, GitHub Copilot SDK 런타임이 아웃바운드 공급자 요청 전에 호출하는 `bearerTokenProvider` 콜백을 제공하세요. 래핑하는 콜백 또는 ID 라이브러리는 토큰 캐싱 및 새로 고침을 관리합니다.\n\n애플리케이션에 이미 토큰이 있는 경우 사용합니다 `bearerToken` .\n\n```typescript\nprovider: {\n    type: \"openai\",\n    baseUrl: \"https://<resource-name>.openai.azure.com/openai/v1/\",\n    bearerToken: process.env.MY_BEARER_TOKEN,  // Sets Authorization header\n}\n```\n\n> \\[!NOTE]\n> 이 `bearerToken` 옵션은 **정적 토큰 문자열** 만 허용합니다. SDK는 이 토큰을 자동으로 새로 고치지 않습니다. 토큰이 만료되면 요청이 실패하고 새 토큰으로 새 세션을 만들어야 합니다.\n\n요청 시 토큰을 획득하는 데 사용합니다 `bearerTokenProvider` .\n\n<!-- docs-validate: skip -->\n\n```typescript\nprovider: {\n    type: \"openai\",\n    baseUrl: \"https://my-custom-endpoint.example.com/v1\",\n    bearerTokenProvider: async () => {\n        return await acquireBearerToken();\n    },\n}\n```\n\nMicrosoft Entra 전달자 토큰을 획득하고 새로 고치는 방법에 대한 자세한 내용은 [BYOK를 사용하는 Azure 관리 ID](/ko/copilot/how-tos/copilot-sdk/setup/azure-managed-identity)을 참조하세요.\n\n## 사용자 지정 모델 목록\n\nBYOK를 사용하는 경우 CLI 서버는 공급자가 지원하는 모델을 모를 수 있습니다. 공급자의 모델을 표준 `onListModels` 형식으로 반환할 수 있도록 `client.listModels()` 클라이언트 수준에서 사용자 지정 `ModelInfo` 처리기를 제공할 수 있습니다. 이를 통해 다운스트림 소비자는 CLI를 쿼리하지 않고 사용 가능한 모델을 검색할 수 있습니다.\n\n<div class=\"ghd-codetabs\">\n<div class=\"ghd-codetab\" data-lang=\"typescript\" data-label=\"TypeScript\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">TypeScript</div>\n\n```typescript\nimport { CopilotClient } from \"@github/copilot-sdk\";\nimport type { ModelInfo } from \"@github/copilot-sdk\";\n\nconst client = new CopilotClient({\n    onListModels: () => [\n        {\n            id: \"my-custom-model\",\n            name: \"My Custom Model\",\n            capabilities: {\n                supports: { vision: false, reasoningEffort: false },\n                limits: { max_context_window_tokens: 128000 },\n            },\n        },\n    ],\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"python\" data-label=\"Python\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Python</div>\n\n```python\nfrom copilot import CopilotClient\nfrom copilot.client import ModelInfo, ModelCapabilities, ModelSupports, ModelLimits\n\nclient = CopilotClient(\n    on_list_models=lambda: [\n        ModelInfo(\n            id=\"my-custom-model\",\n            name=\"My Custom Model\",\n            capabilities=ModelCapabilities(\n                supports=ModelSupports(vision=False, reasoning_effort=False),\n                limits=ModelLimits(max_context_window_tokens=128000),\n            ),\n        )\n    ],\n)\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"go\" data-label=\"Go\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Go</div>\n\n```golang\npackage main\n\nimport (\n    \"context\"\n    copilot \"github.com/github/copilot-sdk/go\"\n)\n\nfunc main() {\n    client := copilot.NewClient(&copilot.ClientOptions{\n        OnListModels: func(ctx context.Context) ([]copilot.ModelInfo, error) {\n            return []copilot.ModelInfo{\n                {\n                    ID:   \"my-custom-model\",\n                    Name: \"My Custom Model\",\n                    Capabilities: copilot.ModelCapabilities{\n                        Supports: copilot.ModelSupports{Vision: false, ReasoningEffort: false},\n                        Limits:   copilot.ModelLimits{MaxContextWindowTokens: copilot.Int(128000)},\n                    },\n                },\n            }, nil\n        },\n    })\n    _ = client\n}\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"dotnet\" data-label=\".NET\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">.NET</div>\n\n```csharp\nusing GitHub.Copilot;\n\nvar client = new CopilotClient(new CopilotClientOptions\n{\n    OnListModels = (ct) => Task.FromResult<IList<ModelInfo>>(new List<ModelInfo>\n    {\n        new()\n        {\n            Id = \"my-custom-model\",\n            Name = \"My Custom Model\",\n            Capabilities = new ModelCapabilities\n            {\n                Supports = new ModelSupports { Vision = false, ReasoningEffort = false },\n                Limits = new ModelLimits { MaxContextWindowTokens = 128000 }\n            }\n        }\n    })\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"java\" data-label=\"Java\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Java</div>\n\n```java\nimport com.github.copilot.CopilotClient;\nimport com.github.copilot.rpc.*;\nimport java.util.List;\nimport java.util.concurrent.CompletableFuture;\n\nvar client = new CopilotClient(new CopilotClientOptions()\n    .setOnListModels(() -> CompletableFuture.completedFuture(List.of(\n        new ModelInfo()\n            .setId(\"my-custom-model\")\n            .setName(\"My Custom Model\")\n            .setCapabilities(new ModelCapabilities()\n                .setSupports(new ModelSupports().setVision(false).setReasoningEffort(false))\n                .setLimits(new ModelLimits().setMaxContextWindowTokens(128000)))\n    )))\n);\n```\n\n</div>\n\n</div>\n\n결과는 기본 동작과 마찬가지로 첫 번째 호출 후에 캐시됩니다. 처리기는 CLI의 `models.list` RPC를 완전히 대체합니다. 서버로의 대체는 발생하지 않습니다.\n\n## 제한점\n\n### 기능 제한 사항\n\n일부 Copilot 기능은 BYOK에서 다르게 동작할 수 있습니다.\n\n* **모델 가용성** - 공급자가 지원하는 모델만 사용할 수 있습니다.\n* \\*\\* 속도 제한\\*\\* - Copilot 아닌 공급자의 속도 제한에 따라 다릅니다.\n* **사용량 추적** - 사용량은 GitHub Copilot이 아니라 공급자가 추적합니다.\n* **프레미스 요청** - Copilot 프리미엄 요청 할당량에 대해 계산하지 마세요.\n\n### 공급자별 제한 사항\n\n| Provider                                           | 제한점                                                |\n| -------------------------------------------------- | -------------------------------------------------- |\n| [Microsoft Foundry Local](https://foundrylocal.ai) | 로컬 전용; 모델 가용성은 디바이스 하드웨어에 따라 달라집니다. API 키가 필요하지 않음 |\n| Ollama                                             | API 키가 없습니다. 로컬 전용; 모델 지원은 다양합니다.                  |\n| OpenAI                                             | OpenAI 속도 제한 및 할당량 적용                              |\n\n## Troubleshooting\n\n### \"모델을 지정하지 않음\" 오류\n\nBYOK를 `model` 사용하는 경우 매개 변수가 **필요합니다**.\n\n```typescript\n// ❌ Error: Model required with custom provider\nconst session = await client.createSession({\n    provider: { type: \"openai\", baseUrl: \"...\" },\n});\n\n// ✅ Correct: Model specified\nconst session = await client.createSession({\n    model: \"gpt-4\",  // Required!\n    provider: { type: \"openai\", baseUrl: \"...\" },\n});\n```\n\n### Azure 엔드포인트 유형 혼동\n\nAzure OpenAI 엔드포인트(`*.openai.azure.com`)의 경우 올바른 형식을 사용합니다.\n\n```typescript\n// ❌ Wrong: Using \"openai\" type with native Azure endpoint\nprovider: {\n    type: \"openai\",  // This won't work correctly\n    baseUrl: \"https://my-resource.openai.azure.com\",\n}\n\n// ✅ Correct: Using \"azure\" type\nprovider: {\n    type: \"azure\",\n    baseUrl: \"https://my-resource.openai.azure.com\",\n}\n```\n\n그러나 Microsoft Foundry 배포에서 OpenAI 호환 엔드포인트 경로(예`/openai/v1/`: )를 제공하는 경우 다음을 사용합니다`type: \"openai\"`.\n\n```typescript\n// ✅ Correct: OpenAI-compatible Microsoft Foundry endpoint\nprovider: {\n    type: \"openai\",\n    baseUrl: \"https://your-resource.openai.azure.com/openai/v1/\",\n}\n```\n\n### 연결이 거부됨(Ollama)\n\nOllama가 실행 중이고 액세스할 수 있는지 확인합니다.\n\n```bash\n# Check Ollama is running\ncurl http://localhost:11434/v1/models\n\n# Start Ollama if not running\nollama serve\n```\n\n### 연결이 거부됨(Foundry Local)\n\nFoundry Local은 다시 시작 사이에 변경 될 수 있는 동적 포트를 사용합니다. 활성 포트를 확인합니다.\n\n```bash\n# Check the service status and port\nfoundry service status\n```\n\n출력에 표시된 포트와 일치하도록 업데이트합니다 `baseUrl` . 서비스가 실행되지 않으면, 서비스를 시작하기 위한 모델을 시작하십시오.\n\n```bash\nfoundry model run phi-4-mini\n```\n\n### 인증 실패\n\n1. API 키가 올바르고 만료되지 않았는지 확인합니다.\n2. 공급자의 `baseUrl` 예상 형식과 일치하는지 확인합니다.\n3. 전달자 토큰의 경우 전체 토큰이 제공되었는지 확인합니다(접두사뿐만 아니라).\n\n## 다음 단계\n\n* [인증](/ko/copilot/how-tos/copilot-sdk/auth) - 모든 인증 방법에 대해 알아보기\n* [첫 번째 Copilot 기반 앱 빌드](/ko/copilot/how-tos/copilot-sdk/getting-started) - 첫 번째 Copilot 지원 앱 빌드"}