본문 바로가기

4.개발 및 운영 환경

D-Bus란

아래글은 저의 얄팍한 지식으로 적은 글이라서 단지 참고만 하시길 바랍니다. 자세한 내용은 참고자료를 보시길 바랍니다.

작성: http://ospace.tistory.com/(ospace114@empal.com),2010.03.18

D-Bus?

최근 D-Bus라는 것을 알았다. CORBA를 하던 중에 지인이 그런 비슷한게 D-Bus가 있다고 말해주었다. CORBA는 무겁고 D-Bus는 가볍다라는 것이다.

D-Bus은 Desktop Bus의 약자로 사용 목적은 어플리케이션 간의 IPC(Inter-Process Communication)을 제공하는 메시지 버스 시스템이다. 즉, 로컬 컴퓨터에서 통신하기 위한 목적이 강하다. 원래는 KDE의 DCOP에서 영향을 받아서 지금의 D-Bus가 생겨났더라고 하지만 DCOP이 뭔지 모르니 패스! ㅡ.ㅡ;

지인의 설명에 따르면 리눅스에서는 이전에 CORBA를 많이 사용했는데 지금은 D-Bus로 대체되었다고 한다.

자세히 D-Bus를 보니 Corba의 이벤트 서비스와 비슷한 느낌을 받았다. 예를 들어 장비의 하드웨어 정보가 변경되면 HAL 데몬이 시그널을 발생하고 D-Bus를 통해서 해당 처리하는 어플리케이션의 객체로 전달된다는 것이다.

다른 여러 기능이 있겠지만, 시간이 많이 걸리므로 패스.. ㅡ.ㅡ;(나참...)

구조

3계층으로 구성되어 있다.

  1. 라이브러리 libdbus가 최하위에 있고 메시지 전달하는 역활을 수행
  2. 메시지 버스 데몬 libdbus위에 구성되며 여러 어플리케이션과 접속하여 메시지를 처리한다. 발생/가입 패러다임을 사용.
  3. 특정 어플리케이션 프레임워크를 위한 포장된 라이브러리(wrapper library).

사용하는 곳이 어플리케이션 간, 데스크탑 세션와 운영체제 간에 주로 사용한다. 실제 사용하는 것을 보면 어플리케이션의 특정 객체로 메시지를 보내는 것으로 큰 그림에서는 CORBA와 비슷하다. 이는 주로 로컬에서 작동하는 것이 문제이다. 이는 unix domain socket를 사용하고 있기 때문이다. 이 부분은 원격 D-Bus(DBusRemote)로서 계획되고 있지만, 아직은 완벽하지는 않다. 현재 TCP/IP도 가능한 것 같지만 사용에 있어서 검증되지 않았다는 것 같다.그리고 SSH forwarding, Proxy daemon, D-Bus over X에서 사용될 가능성이 있다.

즉, 아직까지 원격에서 사용하기에는 부적당하다. 나중에는 가능할지도..

간단한 용법

전체적인 흐름을 보면, 프로그램이 서비스를 제공하기 위해 등록을 한다. 이 등록은 데몬(dbus-daemon)에서 수행한다. 클라이언트 프로그램은 서비스를 확인하고 가입을 한다. 시스템에서 이벤트(사용자 로그인, 하드웨어 변경)가 발생하면 데몬이 이를 감지하고 해당 이벤트에 가입된 클라이언트 프로그램으로 메시지를 전달한다.

메시지가 원하는 목적 객체로 가기 위해서 D-Bus는 디렉토리 구조와 비슷한 명명 규칙을 사용한다. 이는 읽기쉬운 형태로 되어 있어서 보기 편하다. 예를 들어 /org/kde/kspread/sheets/3/cells/4/5로 되어 있다. 이는 프로그램 내에 특정 객체의 특정 객체를 표시한다. 물론 내부용으로 사용되는 명명법도 있다. 예를 들어 /com/mycompany/c5yo817y0c1y1c5b도 가능하다.

추가로

D-Bus는 최하위 libdbus와는 별개로 D-Bus 프로토콜을 만족하는 다른 구현 라이브러리가 있다고하니 참고하면 좋을 것 같다. libdbus로 사용하기에는 작업이 많아지고 고려할 것이 많아지는 단점이 있다.

Windows용으로도 포팅되어 있지만, 아직 베타 상태라서 바로 사용하기에는 어려움이 있다. 이름은 winDBus로 되어 있다. 릴리즈된 일자도 한참이어있는데 아직 현재(2010.03)까지 갱신이 안되는 것을 보면, 작업이 더딘것 같다.

결론

CORBA를 보던 중에 D-Bus가 눈에 들어왔지만, 아직까지 원격에 대한 지원이 미미하여 사용하는데 문제가 많이 발생할 것 같다. 사실 CORBA는 무겁고, 기능이 워낙 많다보니 필요없는 것도 많아서 경량화된 목적으로 사용하기 부적합 할 수도 있다. 그래서 CORBA에서도 임베디드 목적의 CORBA가 나오고 있기는 하다.

그러나 크기는 크다. 최근 속도도 괜찮고 가볍다고 하는 omniORB를 사용했는데 실재 빌드해서 나온 바이너리가 의외로 크며, 부수적으로 설치해야할 라이브러리도 많았다. 그렇다고 해서 정적으로 빌드해서 전체 크기를 줄인다고 해도 다른 어플에서도 사용하기에 그 크기는 더 커질 것이다. 그냥 대충 봐도 기본적으로 5MB가 된다. 임베디드에서는 쉽게 넘어갈 크기는 아니다. 물론 일반 데스크탑 용이면 문제는 없다. 그렇다고 해서 D-Bus도 직업 확인해보지 않아서 어떻게 될지는 모르겠다. 선택은 자신의 몫이다.

마지막으로 라이센스는 GPL 또는 AFL(Academic Free License)이다.

참조

[1] freedesktop's D-Bus, http://www.freedesktop.org/wiki/Software/dbus

[2] wikipedia's D-Bus, http://en.wikipedia.org/wiki/D-Bus

[3] DBusRemote, http://www.freedesktop.org/wiki/Software/DBusRemote

[4] D-Bus tutorial, http://dbus.freedesktop.org/doc/dbus-tutorial.html

[4] D-Bus bindings, http://www.freedesktop.org/wiki/Software/DBusBindings

[5] windbus, http://sourceforge.net/projects/windbus/

반응형