이 페이지에서

Qt Remote Objects

원격 객체 개념

Qt Remote Objects (QtRO)는 Qt를 위해 개발된 프로세스 간 통신(IPC) 모듈입니다. 이 모듈은 Qt의 기존 기능을 확장하여 프로세스나 컴퓨터 간에 정보를 손쉽게 교환할 수 있게 해줍니다.

이러한 정보 교환을 가능하게 하는 Qt의 핵심 기능 중 하나는 객체의 API(속성, 시그널 및 슬롯으로 정의됨)와 해당 API의 구현을 구분하는 것입니다. QtRO의 목적은 실제 객체( QObject )가 다른 프로세스에 있더라도 기대되는 API를 충족시키는 것입니다. 객체의 복사본(QtRO에서 ‘Replica’ )에 호출된 슬롯은 처리를 위해 실제 객체(QtRO에서 ‘Source’ )로 전달됩니다. 모든 Replica는 속성 변경이나 발신된 시그널 등 Source에 대한 업데이트를 수신합니다.

Replica는 Source 객체를 위한 경량 프록시이지만, QObject와 동일한 연결 및 동작을 지원하므로 Qt가 제공하는 다른 어떤 객체( QObject )와도 동일한 방식으로 사용할 수 있습니다. 내부적으로 QtRO는 Replica가 Source와 동일하게 보이도록 하는 데 필요한 모든 작업을 처리합니다.

리모트 객체는 기존의 원격 프로시저 호출(RPC) 구현과는 다르게 동작한다는 점에 유의하십시오. 예를 들어:

  • RPC에서는 클라이언트가 요청을 보내고 응답을 기다립니다.
  • RPC에서는 서버가 요청에 대한 응답이 아닌 한 클라이언트에게 어떤 정보도 푸시하지 않습니다.
  • 대개 RPC는 서로 다른 클라이언트들이 서로 독립적으로 작동하도록 설계됩니다. 예를 들어, 두 클라이언트가 지도 서비스에 경로를 요청했을 때 서로 다른 결과를 받을 수 있습니다.

QtRO에서 속성이 없는 소스(Sources)와 반환 값이 있는 슬롯(slots)을 사용하여 이러한 RPC 스타일의 동작을 구현하는 것은 가능하지만, QtRO는 처리가 실제로 원격에서 이루어진다는 사실을 숨깁니다. 사용자는 직접 리플리카를 생성하는 대신 노드에서 리플리카를 제공받으며, 상태 신호(isReplicaValid()))를 사용할 수도 있지만, 그 후에는 다른 QObject 기반 유형과 마찬가지로 객체와 상호 작용합니다.

사용 사례: GPS

글로벌 포지셔닝 시스템(GPS) 수신기와 같은 센서를 생각해 봅시다. QtRO 용어로 표현하면:

  • 소스(Source )는 GPS 하드웨어와 직접 상호작용하여 현재 위치를 산출하는 프로세스입니다.
  • 위치 정보는 ` QObject ` 속성으로 노출되며, 위치에 대한 주기적인 업데이트는 이러한 속성을 갱신하고 속성 변경 신호를 발생시킵니다.
  • 리플리카는 다른 프로세스에서 생성되며 사용자의 현재 위치를 항상 파악하고 있지만, 센서 데이터로부터 위치를 계산하는 로직은 전혀 필요하지 않습니다.
  • Replica의 위치 변경 신호에 연결하면 예상대로 작동합니다. 즉, Source에서 방출된 신호가 모든 Replica에서 신호 방출을 트리거합니다.

사용 사례: 프린터 액세스

프린터에 대한 액세스를 제공하는 서비스를 생각해 봅시다. QtRO 용어로 설명하면 다음과 같습니다:

  • 소스(Source )는 프린터를 직접 제어하는 프로세스입니다.
  • 잉크 잔량과 프린터 상태는 ` QObject ` 속성을 통해 모니터링됩니다. 이러한 속성이 업데이트되면 속성 변경 신호가 발생합니다.
  • 핵심 기능인 ‘무언가를 인쇄하는 것’은 프린터로 다시 전달되어야 합니다. 참고로, 이는 QtRO가 리플리카(Replica)가 소스(Source)에 호출을 수행하는 방식으로 사용하는 Qt 슬롯(slot) 메커니즘과 일치합니다. 실질적으로, 속성과 신호는 소스에서 리플리카로 전달되고, 슬롯은 리플리카에서 소스로 전달됩니다.
  • 인쇄 요청이 수락되면 프린터 상태가 변경되어 status 속성의 변경이 트리거됩니다. 그러면 이 변경 사항이 모든 Replica에 보고됩니다.

모듈 사용법

Qt 모듈을 사용하려면 모듈 라이브러리에 직접 또는 다른 종속성을 통해 링크해야 합니다. CMake와 qmake를 비롯한 여러 빌드 도구가 이를 위해 전용 지원을 제공합니다.

CMake를 사용한 빌드

find_package() 명령어를 사용하여 Qt6 패키지에서 필요한 모듈 구성 요소를 찾아보세요:

find_package(Qt6 REQUIRED COMPONENTS RemoteObjects)

CMake를 사용한 빌드 개요도 참조하십시오.

qmake를 사용한 빌드

qmake를 사용하여 모듈을 빌드하도록 구성하려면, 프로젝트의 .pro 파일에서 ` QT ` 변수의 값으로 해당 모듈을 추가하십시오:

QT       += remoteobjects

기사 및 가이드

API 참조

라이선스

Qt Remote Objects 는 The Qt Company의 상용 라이선스에 따라 제공됩니다. 또한, GNU Lesser General Public License 버전 3 또는 GNU General Public License 버전 2에 따라 제공됩니다. 자세한 내용은 Qt 라이선싱을 참조하십시오.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.