이 페이지에서

시작하기 Qt Remote Objects

소개

Qt Remote Objects 모듈은 프로세스와 장치 간에 Qt API를 손쉽게 공유할 수 있는 방법을 제공합니다. 이를 위해 프로세스와 장치 간에 데이터 채널이 필요합니다. 이 데이터 채널을 구축하려면 먼저 노드( QRemoteObjectNode)가 필요합니다.

QtRO에서 노드(node)는 통신을 위한 종단점입니다. 원격 객체 네트워크에서 프로세스든 장치든 각 참여자는 고유한 노드를 가져야 합니다. QtRO는 피어 투 피어(peer-to-peer) 네트워크이며, 연결된 노드들이 네트워크의 연결 고리 역할을 합니다.

노드 자체만으로는 큰 용도가 없습니다. 하지만 공유할 ‘ QObject ’ 클래스를 노드에 추가하면 그 가치가 드러납니다. 그러면 어떤 피어 노드라도 호스트 노드(즉, 해당 객체를 공유하는 노드)에게 공유 객체의 복사본이나 인스턴스를 요청할 수 있습니다.

(독립적인 속성과 신호 발신을 갖는) 일반 클래스 인스턴스를 사용할 때와 달리, QtRO는 공유 객체에 대한 변경 사항을 모든 복사본에 걸쳐 자동으로 동기화합니다. 몇 가지 예외를 제외하고, 이러한 복사본들은 원본 객체와 동일한 Qt API를 가지며, 마치 원본 객체가 사용 가능한 것처럼 정확히 동일하게 사용되도록 설계되었습니다.

QtRO에서 원본 객체는 ‘소스(Source)’라고 합니다. 이는 필요한 기능을 제공하기 위한 필수 비즈니스 로직을 갖춘, 완전히 구현된 C++ 클래스입니다. 이 객체의 복사본은 ‘리플리카( Replica)’라고 합니다. 레플리카를 위해 별도의 C++ 코드를 작성할 필요는 없으며, 대신 노드에서 인스턴스를 요청하면 됩니다. 신호를 자체 슬롯에 연결하는 등 레플리카를 사용하기 위한 일부 코드는 필요하지만, 내부 동작을 구현할 필요는 없습니다. 이는 소스에서 이미 처리되어 있습니다.

소스 프로세스가 다른 프로세스에 있거나 심지어 다른 장치에 있을 수도 있으므로, QtRO에서는 일반적으로 프로세스 간 통신(IPC) 없이 개발할 때는 접하지 않는 몇 가지 고려해야 할 사항이 있습니다. 구체적으로, 해당 프로세스나 장치가 존재하지 않으면 어떻게 될까요? 이때 바로 Replica API에 추가된 기능이 필요합니다:

  • initialized() 신호는 레플리카가 QtRO 네트워크로부터 소스 상태를 수신하면 발생합니다.
  • isReplicaValid 속성과 stateChanged() 시그널은 모두 연결이 끊어졌을 때 사용자에게 알립니다.

QtRO를 통해 공유되는 객체는 모든 통신에 노드 간의 링크(컨듀이트)를 사용합니다. QObject 를 공유하려면 다른 노드가 연결할 수 있는 URL을 가진 호스트 노드를 생성해야 합니다. 레지스트리를 사용하여 연결을 용이하게 할 수도 있지만, 소스를 공유하는 노드는 여전히 호스트 노드여야 합니다. 공유되는 각 객체에는 QtRO 네트워크에서 이를 식별하는 데 사용되는 이름( QString)이 부여됩니다.

구현

원격 객체의 사용 방법을 설명하기 위해, 소스 측에서는 다음을 수행해야 합니다:

  1. repc( Qt Remote Objects ) 컴파일러를 사용하든 사용하지 않든, 다른 노드로 복제될 소스 객체를 생성합니다.
  2. 선택적으로 레지스트리를 생성합니다. 그렇지 않은 경우 직접 연결을 사용합니다.
  3. 소스 객체를 공유할 수 있도록 호스트 노드를 생성합니다.
  4. 노드의 enableRemoting() 함수를 호출하여 소스 객체를 공유합니다.

복제본 측에서는 다음 작업을 수행해야 합니다:

  1. 선택적으로 repc를 사용하여 프로젝트용 Replica 헤더를 생성합니다.
  2. 소스 호스트 노드와 연결할 노드를 생성합니다.
  3. 노드의 acquire() 함수를 호출하여 복제본에 대한 포인터를 생성합니다.

다음 예제는 repc로 컴파일된 정적 객체와 동적 소스 객체를 모두 보여줍니다. 또한, 노드 간 직접 연결과 레지스트리를 사용하는 연결도 보여줍니다.

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