DBus(Desktop Bus)는 리눅스 및 유닉스 계열 운영 체제에서 애플리케이션 간 통신(IPC, Inter-Process Communication)을 위한 메시지 버스 시스템이다. 프리데스크톱(freedesktop.org)에서 개발하였으며, 데스크톱 환경뿐만 아니라 시스템 서비스에서도 널리 사용된다.
개요
DBus는 프로세스 간 데이터를 교환하기 위한 메시지 버스 시스템으로, 두 개의 주요 버스를 제공한다.
- 시스템 버스 (System Bus)
- 시스템 전반에서 실행되는 서비스 간의 통신을 제공한다.
- 예: 네트워크 관리(NetworkManager), udev, logind 등의 시스템 서비스.
- 세션 버스 (Session Bus)
- 사용자 세션 내에서 실행되는 애플리케이션 간의 통신을 담당한다.
- 예: GNOME, KDE와 같은 데스크톱 환경의 애플리케이션 간 메시지 전송.
동작 방식
DBus는 클라이언트-서버 모델을 기반으로 동작하며, 중앙에 있는 메시지 버스 데몬이 메시지를 라우팅한다.
- 프로세스들은 DBus를 통해 신호(Signal), 메서드 호출(Method Call), 응답(Reply)을 주고받는다.
- 서비스는 특정 경로(Path)와 인터페이스(Interface)를 통해 노출된다.
- 클라이언트는 버스를 통해 서비스에 접근하여 메시지를 주고받을 수 있다.
주요 개념
- 버스 (Bus)
- 메시지를 주고받는 채널로, 시스템 버스와 세션 버스로 구분된다.
- 서비스 (Service)
- 특정 기능을 제공하는 애플리케이션 또는 시스템 서비스.
- 예: org.freedesktop.NetworkManager
- 오브젝트 (Object)
- 서비스 내부에서 특정 기능을 수행하는 객체.
- 예: /org/freedesktop/NetworkManager
- 인터페이스 (Interface)
- 오브젝트가 제공하는 기능(API)을 정의한 인터페이스.
- 예: org.freedesktop.NetworkManager.Device
- 메서드 (Method)
- 인터페이스 내에서 호출 가능한 함수.
- 예: GetDevices()
- 신호 (Signal)
- 특정 이벤트 발생 시 다른 애플리케이션에 알리는 기능.
DBus 사용 예제
DBus를 이용하여 실행 중인 서비스 목록을 확인하는 명령어 예제:
dbus-send --session --dest=org.freedesktop.DBus --type=method_call \ --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames
위 명령어는 세션 버스에서 실행 중인 모든 서비스 목록을 출력한다.
DBus의 활용
DBus는 다양한 환경에서 사용되며 다음과 같은 주요 활용 사례가 있다.
- 데스크톱 환경
- GNOME, KDE, XFCE 등에서 애플리케이션 간 통신을 위해 사용됨.
- 예: 오디오, 네트워크, 전원 관리 기능 제어.
- 시스템 서비스
- 네트워크 관리자(NetworkManager), udev, systemd와 같은 시스템 서비스에서 활용됨.
- IoT 및 임베디드 시스템
- 저전력 디바이스 및 스마트 기기에서 서비스 간 메시지 전달을 위해 사용됨.
같이 보기
참고 문헌
- Freedesktop.org 공식 문서: DBus 공식 사이트