> 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/deployment/ko/self-hosted/inference-server/architecture.md).

# Inference 아키텍처

추론은 서버 모드에서 실행하는 것이 가장 좋습니다. 또한 [네이티브 Python 인터페이스](/deployment/ko/self-hosted/inference-library.md)도 지원하지만, [Docker를 권장하는 이유를](#why-docker). 이와는 REST API를 통해 상호작용하며, 대부분은 [Inference SDK](https://docs.roboflow.com/reference/inference/inference-sdk)를 통해, 또는 웹 브라우저에서( [Roboflow 앱](https://app.roboflow.com) 이 로컬에서 호스팅되는 Inference 서버의 프런트엔드로 선택적으로 작동할 수 있습니다).

Inference는 모델 또는 여러 모델을 거쳐 예측을 얻고 결과를 처리하는 과정을 조율합니다. 작업을 병렬화하고 사용 가능한 GPU 및 CPU 코어를 효율적으로 활용하기 위해 자동으로 멀티스레딩하며, 비디오 스트림을 처리할 때 가변적인 처리 속도에 동적으로 적응하므로 호스트 머신이 과부하되지 않습니다.

Inference는 Roboflow 서비스와 통신하여 모델 가중치와 Workflow 정의를 가져오고, 나중의 평가를 위해 모델 결과를 추적하지만, 모든 계산은 로컬에서 수행되므로 오프라인으로 실행할 수 있습니다.

하나의 Inference 서버는 여러 클라이언트와 스트림을 처리할 수 있습니다.

<figure><img src="/files/59c6ee88883f1e0db98c032ba6a119415ee52c54" alt="Roboflow Inference architecture diagram"><figcaption><p>Inference가 애플리케이션, 모델, 그리고 Roboflow 플랫폼 사이에 위치하는 방식</p></figcaption></figure>

## 마이크로서비스로서의 Inference

Inference를 사용하는 가장 일반적인 방법은 더 큰 시스템의 작은 부분으로 사용하여, 하위 코드가 소비하는 응답을 생성하는 것입니다. 그 응답은 때때로 모델의 예측(예: 이미지에서 객체의 분류, 위치, 크기를 포함하는 탐지 집합)을 나타내지만, 후처리 로직의 결과(예: 검사의 합격/불합격 상태), 집계(예: 지난 한 시간 동안 관찰된 고유 객체 수), 또는 시각화를 나타낼 수도 있습니다.

이미지 작업의 경우 입력은 매개변수로 전달되고 응답은 동기적으로 반환됩니다.

<figure><img src="/files/016b7a96bcce1f6539f1cdbef46d47eb076792a0" alt="Inference as a microservice"><figcaption><p>마이크로서비스로서의 Inference</p></figcaption></figure>

비디오 스트림의 경우 서버는 세션이 종료될 때까지 실행되는 지속적인 비디오 워커를 시작합니다. 클라이언트 애플리케이션은 WebRTC를 통해 처리된 프레임과 예측 데이터를 수신합니다.

<figure><img src="/files/39c6f344cfee3145dfca6cc7d2429a38418d6245" alt="Inference Server video streaming"><figcaption><p>Inference 서버 비디오 스트리밍</p></figcaption></figure>

마이크로서비스 사용 사례 예시:

* 웹사이트에서 사용자가 업로드한 이미지에 태그 달기
* 기계를 켜기 전에 올바르게 설정되었는지 확인하기
* 비디오에서 얼굴 흐리게 처리하기
* 완성된 회로 기판에서 잘못 연결된 배선 감지하기
* 제조된 제품이 사양과 일치하는지 검사하기
* 객체에 결함과 흠이 없는지 검증하기
* 이미지에서 알약 개수 세기

## 어플라이언스로서의 Inference

Inference는 비디오 스트림을 지속적으로 소비하고 처리하며, 데이터베이스 업데이트, 알림 전송, 웹훅 실행, 하드웨어 신호 전송과 같은 하위 작업을 수행하는 자율 에이전트로도 취급할 수 있습니다. 이 패턴에서는 시스템의 전체 로직이 [워크플로](https://docs.roboflow.com/workflows) 에 정의되며, 출력은 외부 시스템으로 푸시됩니다.

<figure><img src="/files/fb5b0d2cabf0a5a8ac490627fcde8537e7a8f313" alt="Inference as an appliance"><figcaption><p>어플라이언스로서의 Inference</p></figcaption></figure>

어플라이언스 사용 사례 예시:

* 막힘이 발생하면 컨베이어 벨트 정지하기
* 고속도로 교통 분석 수집하기
* 보안 카메라 피드에서 의심스러운 활동 표시하기
* 차량이 야적장에 들어오거나 나갈 때 재고 시스템 업데이트하기
* 고철 더미가 넘칠 때 경보 울리기
* 하루 동안 소매 고객의 대기 시간을 기록하기

## 서버가 대신 처리해 주는 것

| 기능                        | 동작                                                                                                                                                                                                                           |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **모델 서빙**                 | 객체 탐지, 이미지 분류, 인스턴스 분할, 키포인트 탐지, 이미지 임베딩, OCR, 시각적 질의응답 등을 실행합니다. 참조 [지원되는 모델](https://docs.roboflow.com/models/supported-models/supported-models).                                                                          |
| **이미지 처리**                | 모델이 학습 중에 사용하는 것과 동일한 전처리 및 후처리 방법을 효율적으로 적용하여, 불필요한 지연 없이 정확도를 유지합니다.                                                                                                                                                       |
| **비디오 스트림 관리**            | 비디오 스트림을 처리하기 위해 별도의 스레드를 생성하여 모델이 항상 가능한 가장 최신 프레임을 받도록 합니다.                                                                                                                                                                |
| **워크플로**                  | 모델, 로직, 통합, 그리고 사용자 정의 코드를 통해 데이터를 전달하고 병렬화하는 선언된 계산 그래프를 실행합니다.                                                                                                                                                             |
| **HTTP 서버, SDK, 그리고 CLI** | 마이크로서비스로 사용할 수 있는 HTTP API와 함께, [Python SDK](https://docs.roboflow.com/reference/inference/inference-sdk) 및 [CLI](https://docs.roboflow.com/reference/inference/inference-cli) 이를 구동하기 위한                                    |
| **속도**                    | 멀티프로세싱, 하드웨어 가속, 동적 배칭을 통한 자동 병렬화에 더해, 지원되는 GPU에서 선택적으로 TensorRT 양자화와 장치별 레이어 융합을 제공합니다.                                                                                                                                     |
| **오프라인 캐시**               | 모델과 Workflow 정의를 내려받아 로컬에 저장하므로 서버가 [오프라인 모드](/deployment/ko/self-hosted/enterprise/offline-mode.md).                                                                                                                        |
| **인사이트**                  | Roboflow 플랫폼과 연결하여 이상치 데이터를 업로드하고, 통계와 텔레메트리를 노출하며, 하위 데이터 싱크로 데이터를 전달합니다. 참조 [모델 모니터링](/deployment/ko/monitoring-and-analytics/model-monitoring.md) 및 [액티브 러닝](/deployment/ko/monitoring-and-analytics/active-learning.md). |
| **이식성**                   | macOS 개발 머신, 클라우드 서버, 작은 엣지 장치에서 실행됩니다. Docker 태그만 바꾸면 같은 코드가 다른 플랫폼에서도 실행됩니다.                                                                                                                                               |
| **확장성**                   | Apache 2.0에 따라 오픈 소스로 제공됩니다. 사용자 정의 모델, Workflow 블록, 백엔드를 추가하거나, 블록 간의 간극을 메우기 위해 동적 Python 블록을 사용할 수 있습니다.                                                                                                                  |

## Docker를 사용하는 이유

Inference를 실행할 때는 Docker 컨테이너 사용을 강력히 권장합니다. 머신러닝 의존성은 환경의 작은 변화에도 민감합니다. 결정적인 환경으로 분리하지 않으면 운영 체제나 드라이버를 업데이트하거나, 애플리케이션 코드의 의존성을 업데이트하거나, 보안 패치를 적용하거나, 새 머신을 설정할 때 시스템이 쉽게 깨질 수 있습니다. 이미지들은 라이브러리 버전이 서로 호환되도록 보장하고, 패키지가 GPU를 활용하도록 컴파일되며, 보안 패치가 적용되도록 합니다.

Docker는 또한 이식성을 제공합니다. 나중에 하나의 큰 서버에서 여러 클라이언트에 서비스를 제공하거나, CPU에서 GPU로 업그레이드하더라도 애플리케이션 코드를 리팩터링하지 않아도 됩니다.

예외는 컨테이너가 가속기에 접근할 수 없는 하드웨어인데, 예를 들면 [macOS의 MPS](/deployment/ko/self-hosted/inference-server/install/mac.md)가 있으며, 이 경우 Docker 밖에서 실행하는 것만이 가속을 얻는 유일한 방법입니다.
