> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/workflows/ko/deploy/deploy-a-workflow.md).

# Workflow 배포

Workflow를 네 가지 방식으로 배포할 수 있습니다:

1. 이미지를 다음으로 전송: [Roboflow API](#process-images) Workflow를 사용해 처리합니다.
2. 다음을 생성: [Roboflow 전용 배포](https://docs.roboflow.com/deployment/roboflow-cloud/dedicated-deployments) 전용으로 제공되는 인프라에서.
3. 다음을 사용해 자체 하드웨어에서 Workflow를 실행하세요: [Roboflow Inference](https://docs.roboflow.com/deployment/self-hosted/self-hosted).
4. 사용: [배치 처리](https://docs.roboflow.com/deployment/roboflow-cloud/batch-processing) 코드 작성 비용 없이 대량의 데이터를 효율적으로 처리합니다.

### 어떤 옵션을 사용해야 하나요?

| 옵션                                                                                           | 적합한 용도                                                                                                                                                                                                         |
| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **HTTP API** (Roboflow 호스팅 또는 자체 호스팅 `추론` 서버)                                                | Workflows를 독립형 서비스로 사용하거나, 애플리케이션을 Python이 아닌 다른 언어로 유지하거나, 연산 집약적인 작업을 전용 서버로 오프로딩할 때 적합합니다.                                                                                                                  |
| [**WebRTC 스트리밍**](/workflows/ko/deploy/video-processing.md)                                  | Serverless 또는 자체 호스팅 Inference Server에서 Workflow를 통해 비디오 파일, 웹캠, 카메라 스트림을 처리할 때 적합합니다.                                                                                                                         |
| [**`inference-cli`**](https://docs.roboflow.com/reference/inference/inference-cli/workflows) | 코드 없이 명령줄에서 이미지, 디렉터리 또는 비디오 파일을 처리합니다.                                                                                                                                                                        |
| [**배치 처리**](https://docs.roboflow.com/deployment/roboflow-cloud/batch-processing)            | 저장된 이미지와 비디오를 대상으로 하는 대규모 비동기 작업으로, 인프라가 대신 제공됩니다.                                                                                                                                                             |
| **`추론` Python 패키지**                                                                          | Execution Engine을 Python 애플리케이션 내부에서 직접 실행하며, 완전한 제어와 HTTP 왕복 없이 사용할 수 있습니다. 참조: [Execution Engine](/workflows/ko/developer-guide/developer-guide/execution-engine.md#running-the-execution-engine-in-python). |

{% hint style="warning" %}
Roboflow 호스팅 API에서 Workflow를 실행할 때는 다음 두 가지 제한을 고려해야 합니다:

* Workflow 실행 시간은 20초로 제한됩니다.
* 응답 페이로드는 6MB로 제한되므로, 시각화 블록이 많거나 입력 이미지가 큰 Workflows는 실패할 수 있습니다.

자체 호스팅 및 전용 배포에는 이러한 제한이 없습니다.
{% endhint %}

자체 하드웨어에서 Workflow를 실행하면 일반적인 **웹캠** 및 전문 **CCTV 카메라**).

온프레미스 배포를 선택하면 Inference를 배포할 수 있는 모든 시스템에서 Workflows를 실행할 수 있습니다. 여기에는 다음이 포함됩니다:

* NVIDIA Jetson
* AWS EC2, GCP Cloud Engine 및 Azure Virtual Machines
* Raspberry Pi

{% hint style="info" %}
Roboflow Enterprise 고객은 Basler 카메라에서 추론을 실행하는 등 추가 비디오 스트림 옵션을 이용할 수 있습니다. 제공 사항에 대해 자세히 알아보려면, [Roboflow 영업팀에 문의하세요](https://roboflow.com/sales).
{% endhint %}

### Workflow 배포

workflow를 배포하려면 Workflows 편집기 왼쪽 상단의 "Deploy" 버튼을 클릭하세요. 모든 배포 옵션은 이 페이지에 문서화되어 있습니다.

Workflows 편집기의 코드 스니펫에는 Workflows URL과 API 키가 미리 채워집니다.

스니펫은 편집기가 실행 중인 런타임과 일치합니다. 편집기를 로컬 Inference 서버 또는 [전용 배포](https://docs.roboflow.com/deployment/roboflow-cloud/dedicated-deployments), 그러면 `api_url` 각 스니펫의 api\_url이 해당 서버를 가리키며, 일치하는 탭은 권장으로 표시됩니다. 또한 스니펫은 저장된 Workflow 미리보기에 예시 이미지가 있는 경우 이를 채워 넣습니다.

{% hint style="info" %}
Workflows의 사용 제한에 대해 자세히 알아보려면 다음을 참조하세요: [Roboflow 요금 페이지](https://roboflow.com/workflows).
{% endhint %}

#### 이미지 처리

Roboflow API 또는 로컬 Inference 서버를 사용해 단일 이미지에서 Workflow를 실행할 수 있습니다.

먼저 Roboflow Inference SDK를 설치하세요:

```bash
pip install inference-sdk inference-cli
```

로컬에서 실행한다면 다음을 따르세요: [공식 Docker 설치 안내](https://docs.docker.com/get-docker/) 를 따라 컴퓨터에 Docker를 설치하고 Inference 서버를 시작하세요:

```
inference server start
```

그런 다음 새 Python 파일을 만들고 다음 코드를 추가하세요:

```python
from inference_sdk import InferenceHTTPClient, InferenceConfiguration

client = InferenceHTTPClient(
    api_url="https://serverless.roboflow.com",  # 또는 로컬 배포의 경우 "http://127.0.0.1:9001"
    api_key="API_KEY"
).configure(InferenceConfiguration(api_key_transport="header"))

result = client.run_workflow(
    workspace_name="workspace-name",
    workflow_id="workflow-id",
    images={
        "image": "YOUR_IMAGE.jpg"
    }
)

```

위에서 다음을 바꾸세요: `API_KEY` 를 Roboflow API 키로 바꾸세요. 다음도 바꾸세요: `workspace-name` 및 `workflow-id` 를 Roboflow 워크스페이스 이름과 Workflow ID로 바꾸세요.

이 값들을 찾으려면 Roboflow Workflow를 열고 "Deploy Workflow"를 클릭하세요. 그런 다음 페이지에 표시되는 코드 스니펫에서 워크스페이스 이름과 workflow ID를 복사하세요.

로컬 실행은 CPU 및 NVIDIA CUDA GPU 장치에서 동작합니다. 최상의 성능을 위해 NVIDIA Jetson 또는 NVIDIA GPU가 탑재된 클라우드 서버와 같은 GPU 지원 장치에 배포하세요.

원하는 경우 어떤 언어에서든 엔드포인트를 직접 호출하려면 HTTP 요청을 보내세요:

```bash
curl --location 'https://serverless.roboflow.com/infer/workflows/<your-workspace-name>/<your-workflow-id>' \\
    --header 'Content-Type: application/json' \\
    --header 'Authorization: Bearer <YOUR-API-KEY>' \\
    --data '{
    "inputs": {
        "image": {"type": "url", "value": "https://your-image-url"},
        "parameter": "some-value"
    }
}'
```

{% hint style="info" %}
키를 다음 형식으로 보내는 것은 `?api_key=` 쿼리 매개변수로 또는 `api_key` 본문 필드는 기존 방식입니다. 여전히 동작하지만, `Authorization: Bearer` 헤더를 사용하면 키가 URL과 로그에 노출되지 않습니다. 참조: [REST API로 인증](https://docs.roboflow.com/reference/platform/rest-api/authenticate-with-the-rest-api).
{% endhint %}

다음의 키는 `inputs` 객체는 Workflow에 의해 결정되므로, 정의한 입력에 따라 이름이 달라집니다. 다음으로 선언된 입력은 `WorkflowImage` 다음 키를 가진 객체를 받습니다: `type` 및 `value` 키를 사용하며, HTTP에서 지원되는 `type` 값은 `url` 및 `base64`.

위 예시는 Roboflow 플랫폼에 저장된 Workflow를 실행합니다. 요청과 함께 전체 Workflow 정의를 보낼 수도 있는데, 이는 API 키로 제한된 블록을 사용하지 않는 처음부터 만든 Workflows에 유용합니다. 다음을 참조하세요: [Inference SDK](https://docs.roboflow.com/reference/inference/inference-sdk/workflows) 다음의 `사양` 인수.

#### 비디오 스트림 처리

Inference SDK WebRTC 클라이언트를 사용해 웹캠, RTSP 스트림 또는 비디오 파일에서 Workflow를 실행하세요. 동일한 코드는 Serverless와 자체 호스팅 Inference Server 모두에서 동작합니다.

WebRTC 종속성과 함께 SDK를 설치하세요:

```
pip install "inference-sdk[webrtc]"
```

자체 호스팅 Inference Server를 시작하거나 다음을 사용하세요: `https://serverless.roboflow.com` 서버를 실행하지 않고도 사용할 수 있습니다. 그런 다음 Python 파일을 만드세요:

```python
from inference_sdk import InferenceHTTPClient, InferenceConfiguration
from inference_sdk.webrtc import StreamConfig, WebcamSource

client = InferenceHTTPClient(
    api_url="https://serverless.roboflow.com",  # 또는 "http://localhost:9001"
    api_key="API_KEY",
).configure(InferenceConfiguration(api_key_transport="header"))

session = client.webrtc.stream(
    source=WebcamSource(),
    workflow="workflow-id",
    workspace="workspace-name",
    config=StreamConfig(data_output=["predictions"]),
)

@session.on_data("predictions")
def handle_predictions(predictions, metadata):
    print(predictions)

session.run()
```

위에서 다음을 바꾸세요: `API_KEY` 를 Roboflow API 키로 바꾸세요. 다음도 바꾸세요: `workspace-name` 및 `workflow-id` 를 Roboflow 워크스페이스 이름과 Workflow ID로 바꾸세요.

이 값들을 찾으려면 Roboflow Workflow를 열고 "Deploy Workflow"를 클릭하세요. 그런 다음 페이지에 표시되는 코드 스니펫에서 워크스페이스 이름과 workflow ID를 복사하세요.

다음을 변경: `WebcamSource()` 로컬 웹캠에서 비디오가 오지 않는 경우 다른 소스로 바꾸세요. 참조: [Workflows로 비디오 처리](/workflows/ko/deploy/video-processing.md) RTSP 스트림, 비디오 파일, 출력 비디오에 대해

#### 데이터 배치 처리

Roboflow Batch Processing 서비스를 사용하면 이미지와 비디오 파일 디렉터리로 이루어진 전체 데이터 배치를 효율적으로 처리할 수 있습니다. 이 완전 관리형 솔루션은 코딩이나 로컬 연산이 필요하지 않습니다. 데이터와 Workflow만 선택하면 나머지는 Roboflow가 처리합니다.

Batch Processing은 UI, CLI, REST API 상호작용을 모두 지원합니다. 아래에서는 CLI 명령을 소개합니다. 다음을 확인하세요: [모든 옵션](https://docs.roboflow.com/deployment/roboflow-cloud/batch-processing#cli).

처리를 실행하려면 Inference CLI를 설치하세요:

```
pip install inference-cli
```

그런 다음 데이터를 적재할 수 있습니다:

```
inference rf-cloud data-staging create-batch-of-images \\
    --images-dir <your-images-dir-path> \\
    --batch-id <your-batch-id>
```

데이터가 로드되면 처리 작업을 시작하세요:

```
inference rf-cloud batch-processing process-images-with-workflow \\
    --workflow-id <workflow-id> \\
    --batch-id <batch-id>
```

작업 진행 상황은 다음을 사용해 표시할 수 있습니다:

```
inference rf-cloud batch-processing show-job-details \\
    --job-id <your-job-id>  # job-id는 작업을 만들 때 표시됩니다
```

작업이 완료되면 결과를 내보내세요:

```
inference rf-cloud data-staging export-batch \\
    --target-dir <dir-to-export-result> \\
    --batch-id <output-batch-of-a-job>
```

#### CLI로 로컬 디렉터리 처리

이미 실행 중인 머신에 있는 데이터의 경우, `inference-cli` 코드 없이 개별 이미지, 이미지 디렉터리 또는 비디오 파일에 대해 Workflow를 실행할 수 있습니다:

```bash
pip install inference-cli
```

```bash
inference workflows process-images-directory \\
    -i {your_input_directory} \\
    -o {your_output_directory} \\
    --workspace_name {your-roboflow-workspace-url} \\
    --workflow_id {your-workflow-id} \\
    --api-key {your_roboflow_api_key}
```

출력 디렉터리에는 입력 파일당 하나의 하위 디렉터리가 생성되며, 각 디렉터리에는 다음이 포함됩니다: `results.json` 해당 파일의 Workflow 결과와 실행 중 생성된 이미지가 들어 있는 파일, 그리고 `aggregated_results.csv` 모든 입력의 결과가 하나로 연결된 파일입니다.

다음을 참조하세요: [Inference CLI 참조](https://docs.roboflow.com/reference/inference/inference-cli/workflows) 에서 모든 옵션을 확인하세요.

## 다음 단계

* Execution Engine을 자체 Python 애플리케이션 내부에서 직접 실행하려면 다음을 참조하세요: [개발자 가이드](/workflows/ko/developer-guide/developer-guide.md).
* Workflow가 반환하는 결과의 형태를 이해하려면 다음을 참조하세요: [Workflow 실행](/workflows/ko/developer-guide/developer-guide/workflow-execution.md#output-construction).
