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

# 워크플로 배포

워크플로를 네 가지 방법으로 배포할 수 있습니다:

1. 이미지를 다음으로 전송하세요: [Roboflow API](#process-images) 에서 워크플로를 사용해 처리하세요.
2. 다음을 생성하세요: [Roboflow 전용 배포](https://docs.roboflow.com/deployment/roboflow-cloud/dedicated-deployments) 를 귀하의 전용 인프라에 배포하세요.
3. 다음을 사용하여 자신의 하드웨어에서 워크플로를 실행하세요 [Roboflow Inference](https://docs.roboflow.com/deployment/self-hosted/self-hosted).
4. 다음을 사용하세요: [배치 처리](https://docs.roboflow.com/deployment/roboflow-cloud/batch-processing) 를 사용해 코딩 비용을 효율적으로 들이지 않고 대량의 데이터를 처리하세요.

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

| 옵션                                                                                           | 적합한 경우                                                                                                                                                                                              |
| -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **HTTP API** (Roboflow 호스팅 또는 자체 호스팅 `inference` 서버)                                         | 애플리케이션을 Python 이외의 언어로 유지한 채 워크플로를 독립형 서비스로 사용하거나, 연산 집약적인 작업을 전용 서버로 오프로드하려는 경우.                                                                                                                   |
| [**WebRTC 스트리밍**](/workflows/ko/deploy/video-processing.md)                                  | Serverless 또는 자체 호스팅 Inference Server에서 워크플로를 통해 비디오 파일, 웹캠, 카메라 스트림을 처리합니다.                                                                                                                        |
| [**`inference-cli`**](https://docs.roboflow.com/reference/inference/inference-cli/workflows) | 명령줄에서 코드 없이 이미지, 디렉터리 또는 비디오 파일을 처리합니다.                                                                                                                                                             |
| [**배치 처리**](https://docs.roboflow.com/deployment/roboflow-cloud/batch-processing)            | 저장된 이미지와 비디오에 대한 대규모 비동기 작업으로, 귀하를 위해 프로비저닝된 인프라를 사용합니다.                                                                                                                                            |
| **`inference` Python 패키지**                                                                   | Execution Engine을 HTTP를 거치지 않고 완전히 제어하면서 Python 애플리케이션 내부에서 직접 실행합니다. 다음을 참조하세요: [실행 엔진](/workflows/ko/developer-guide/developer-guide/execution-engine.md#running-the-execution-engine-in-python). |

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

* 워크플로 런타임은 최대 20초입니다.
* 응답 페이로드는 최대 6MB이므로, 시각화 블록이 많거나 입력 이미지가 큰 워크플로는 실패할 수 있습니다.

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

자체 하드웨어에서 워크플로를 실행하면 일반 **웹캠** 및 전문 **CCTV 카메라**).

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

* NVIDIA Jetson
* AWS EC2, GCP Cloud Engine, Azure 가상 머신
* Raspberry Pi

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

### Workflow 배포하기

워크플로를 배포하려면 워크플로 에디터의 왼쪽 상단 모서리에 있는 "Deploy" 버튼을 클릭하세요. 모든 배포 옵션은 이 페이지에 문서화되어 있습니다.

워크플로 에디터의 코드 스니펫에는 워크플로 URL과 API 키가 미리 입력됩니다.

스니펫은 에디터가 실행 중인 런타임과 일치합니다. 에디터를 로컬 Inference 서버 또는 [전용 배포](https://docs.roboflow.com/deployment/roboflow-cloud/dedicated-deployments)로 전환하면, `api_url` 각 스니펫의 항목은 해당 서버를 가리키고, 일치하는 탭은 권장으로 표시됩니다. 스니펫은 저장된 워크플로 미리보기에서 예시 이미지를 가져와 채워 넣기도 합니다.

{% hint style="info" %}
워크플로 사용 제한에 대해 자세히 알아보려면 [Roboflow 요금 페이지](https://roboflow.com/workflows).
{% endhint %}

#### 이미지 처리

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

먼저 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

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

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 워크스페이스 이름과 워크플로 ID로 바꾸세요.

이 값들을 찾으려면 Roboflow 워크플로를 열고 "Deploy 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' \
    --data '{
    "api_key": "<YOUR-API-KEY>",
    "inputs": {
        "image": {"type": "url", "value": "https://your-image-url"},
        "parameter": "some-value"
    }
}'
```

다음의 키는 `inputs` 객체는 워크플로에 의해 결정되므로, 정의한 입력에 따라 이름이 달라집니다. 다음으로 선언된 입력은 `WorkflowImage` 다음이 포함된 객체를 사용합니다: `type` 및 `값` 키; HTTP를 통해 지원되는 `type` 값은 `url` 및 `base64`.

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

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

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

SDK와 WebRTC 종속성을 설치하세요:

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

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

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

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

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 워크스페이스 이름과 워크플로 ID로 바꾸세요.

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

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

#### 데이터 배치 처리

Roboflow Batch Processing 서비스를 사용하여 이미지 및 비디오 파일 디렉터리 같은 전체 데이터 배치를 효율적으로 처리할 수 있습니다. 이 완전 관리형 솔루션은 코딩이나 로컬 계산을 요구하지 않습니다. 데이터와 워크플로를 선택하기만 하면 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` 코드 없이 개별 이미지, 이미지 디렉터리 또는 비디오 파일에 대해 워크플로를 실행할 수 있습니다:

```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` 파일이 있어 해당 파일의 워크플로 결과와 실행 중 생성된 이미지가 들어 있고, 또 `aggregated_results.csv` 파일이 있어 모든 입력의 결과가 하나로 연결되어 있습니다.

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

## 다음 단계

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