{{위키데이터 속성 추적}}
{{소프트웨어 정보
| name = 
| logo = 
| screenshot = 
| caption = 
| developer = [[레드햇]]
| released = {{시작 날짜와 나이|2006|11}}
| latest_release_version = 1.12.10
| latest_release_date = {{시작 날짜와 나이|2018|08|02}}<ref>{{웹 인용|url= https://cgit.freedesktop.org/dbus/dbus/tree/NEWS?h=dbus-1.12|title= D-Bus 1.12.x changelog|accessdate=5 August 2018}}</ref>
| latest_preview_version = 1.13.6
| latest_preview_date = {{시작 날짜와 나이|2018|8|2}}<ref>{{웹 인용|url=https://cgit.freedesktop.org/dbus/dbus/tree/NEWS?h=master|title=NEWS file for current branch|accessdate=14 November 2018}}</ref>
| programming_language = [[C (프로그래밍 언어)|C]]
| operating_system = [[크로스 플랫폼]]
| platform = 
| genre = {{기호없는 목록|[[프로세스 간 통신|IPC 데몬]]|[[리눅스]]}}
| license = [[GNU 일반 공중 사용 허가서|GPLv2+]] 또는 [[아카데믹 자유 라이선스|AFL]]&nbsp;2.1<ref>[http://blog.ometer.com/2007/07/17/gpl--afl/ Havoc's Blog July, 2007<!-- Bot generated title -->]</ref>
| website = {{URL|http://www.freedesktop.org/wiki/Software/dbus}}
}}

[[컴퓨팅]]에서 '''D-Bus'''(데스크톱 버스, "'''Desktop Bus'''"<ref>{{서적 인용 | last1 = Ward | first1 = Brian | author-link1 = | url = https://books.google.com/books?id=fP5WBQAAQBAJ | orig-year = 2004 | chapter = 14: A brief survey of the Linux desktop | title = How Linux Works: What Every Superuser Should Know | edition = 2 | location = San Francisco | publisher = No Starch Press | publication-date = 2014 | page = 305 | isbn = 9781593275679 | access-date = 2016-11-07 | quote = One of the most important developments to come out of the Linux desktop is the Desktop Bus (D-Bus), a message-passing system. D-Bus is important because it serves as an interprocess communication mechanism that allows desktop applications to talk to each other [...]. }}</ref>)는 같은 머신에서 동시에 실행 중인 여러 [[컴퓨터 프로그램]](즉, [[프로세스]]) 간의 통신을 가능케 하는 [[소프트웨어 버스]], [[프로세스 간 통신]] (IPC), [[원격 프로시저 호출]] (RPC) 매커니즘이다.{{r|intro dbus}}{{r|Cocagne 2012}} D-Bus는 [[레드햇]]의 [[하복 페닝튼]]이 [[그놈]], [[KDE]] 등의 [[리눅스]] [[데스크톱 환경]]이 제공하는 서비스들을 표준화하기 위해 발의된, [[Freedesktop.org]] 프로젝트의 일부로서 개발되었다.{{r|intro dbus q1}}{{r|Palmieri 2005}}

또, freedesktop.org 프로젝트는 이 사양의 참조 구현체로서 libdbus라는 이름의 [[자유-오픈 소스 소프트웨어|자유-오픈 소스]] [[라이브러리 (컴퓨팅)|라이브러리]]를 개발하였다. 이 라이브러리는 D-Bus와는 구별된다. 실제로 다른 구현체의 D-Bus 클라이언트 라이브러리도 존재하는데, 이를테면 GDBus (GNOME),{{r|gdbus}} QtDBus ([[Qt (프레임워크)|Qt]]/KDE),{{r|qtdbus}} dbus-java{{r|dbus-java}}, sd-bus ([[systemd]]의 일부) 등이 있다.{{r|Poettering 2015}}

== 개요 ==
D-Bus는 원래 [[컴포넌트 기반 소프트웨어 공학|소프트웨어 구성 요소]] 통신 시스템을 대체하기 위해 설계된 IPC 매커니즘으로, [[그놈]] 및 [[KDE]] 리눅스 [[데스크톱 환경]](각각 [[공통 객체 요구 매개자 구조|CORBA]], [[DCOP]])에 의해 사용된다.{{r|dbus tut q1}}{{r|intro dbus q2}} 이 데스크톱 환경들의 구성 요소들은 일반적으로 수많은 프로세스에 배포되며, 제각기 몇몇의 서비스(보통은 하나의 서비스)를 제공한다. 이러한 서비스들은 자신들의 태스크를 수행하기 위해 일반적인 클라이언트 [[응용 소프트웨어|애플리케이션]]에 의해, 또는 데스크톱 환경의 다른 구성 요소들에 의해 사용될 수 있다.
{{multiple image
 | footer = D-Bus는 하나의 단일 공유 채널에서 IPC 요건을 단순하게 만들어 준다.
 | image1 = Processes without D-Bus.svg
 | alt1 = D-Bus가 없는 프로세스들
 | caption1 = D-Bus가 없는 프로세스들
 | image2 = Processes with D-Bus.svg
 | alt2 = D-Bus가 있는 프로세스들
 | caption2 = D-Bus가 있는 동일한 프로세스들
 }}

수반되는 프로세스들의 수가 많은 까닭에 이들 간의 1대1 IPC 통신은 비효율적이고 꽤나 미덥지 못한 접근 방식이 된다. 대신, D-Bus는 [[소프트웨어 버스]] [[추상화 (컴퓨터 과학)|추상화]]를 제공하여 단일 공유 가상 채널을 경유하여 일련의 프로세스들 간의 모든 통신을 수집한다.{{r|Cocagne 2012}} 버스에 연결된 프로세스들은 내부 구현 방식에 대해 알지 못하지만 D-Bus 사양은 버스에 연결된 모든 프로세스들이 이를 통해 서로 통신할 수 있음을 보증한다.

리눅스 데스크톱 환경은 하나의 버스뿐 아니라 수많은 버스들을 열거함으로써 D-Bus 기능을 활용한다{{r|dbus spec}}{{r|Cocagne 2012}}{{r|dbus tut}}:
* 하나의 단일 '''시스템 버스''': 시스템의 모든 사용자와 프로세스에 이용이 가능하며, 시스템 서비스에 대한 접근 권한을 제공한다. (예: [[운영 체제]]와 [[데몬 (컴퓨팅)|데몬]]이 제공하는 서비스들)
* 각 사용자 로그인 세션별 '''세션 버스''': 데스크톱 서비스를 동일 데스크톱 세션의 사용자 애플리케이션에 제공하고 하나의 단위로 데스크톱 세션을 허용한다

프로세스가 버스들에 대한 접근 권한이 있다면 프로세스는 수많은 버스들에 연결할 수 있다. 즉, 어떠한 사용자 프로세스라도 시스템 버스와 현재 소속된 세션 버스에 연결할 수 있으나 다른 사용자의 세션 버스, 심지어는 동일 사용자가 소유한 다른 세션 버스에 연결할 수는 없음을 의미한다. 후자의 제한은 나중에 모든 사용자 세션이 하나의 사용자 버스로 병합되는 경우에는 변경될 수 있다.{{r|Poettering 2015 q1}}

D-Bus는 정보 공유, 모듈성, [[권한 격리]] 등 애플리케이션에 대한 기존 기능을 추가하거나 단순화한다. 이를테면, [[블루투스]]나 [[스카이프]]를 통해 들어온 음성 통화(voice call)의 정보는 현재 실행 중인 음악 플레이어에 의해 전파되고 해석될 수 있으며 통화가 끝날 때까지 음소거하거나 재생을 일시 중지시킴으로써 반응할 수 있다.{{r|Love 2005}}

또, D-Bus는 각기 다른 사용자 애플리케이션의 구성 요소 연동을 위한 [[소프트웨어 프레임워크|프레임워크]]로서 사용될 수 있다. 이를테면, [[오피스 제품군]]은 [[워드 프로세서]]와 [[스프레드시트]] 간 데이터 공유를 위해 세션 버스를 통해 통신할 수 있다.

== 같이 보기 ==
{{Div col|colwidth=25em}}
* [[리눅스]]
* [[공통 언어 기반]]
* [[공통 객체 요구 매개자 구조]]
* [[컴포넌트 오브젝트 모델]]
* [[분산 컴포넌트 오브젝트 모델]]
* [[외부 함수 인터페이스]]
* [[자바 원격 함수 호출]]
* [[원격 프로시저 호출]]
* [[XPCOM]]
{{div col end}}

== 각주 ==
{{각주|refs=
<ref name="intro dbus">{{웹 인용|last1=Vermeulen|first1=Jeroen|title=Introduction to D-Bus|url=http://www.freedesktop.org/wiki/IntroductionToDBus/|website=FreeDesktop.org|date=14 Jul 2013|accessdate=22 October 2015}}</ref>
<ref name="intro dbus q1">{{웹 인용|last1=Vermeulen|first1=Jeroen|title=Introduction to D-Bus|url=http://www.freedesktop.org/wiki/IntroductionToDBus/|website=FreeDesktop.org|date=14 Jul 2013|accessdate=3 October 2015|quote="D-Bus [...] is designed for use as a unified middleware layer underneath the main free desktop environments."}}</ref>
<ref name="intro dbus q2">{{웹 인용|last1=Vermeulen|first1=Jeroen|title=Introduction to D-Bus|url=http://www.freedesktop.org/wiki/IntroductionToDBus/|website=FreeDesktop.org|date=14 Jul 2013|accessdate=3 October 2015|quote=" D-Bus was first built to replace the CORBA-like component model underlying the GNOME desktop environment. Similar to DCOP (which is used by KDE), D-Bus is set to become a standard component of the major free desktop environments for GNU/Linux and other platforms."}}</ref>
<ref name="dbus spec">{{웹 인용|last1=Pennington|first1=Havoc|last2=Carlsson|first2=Anders|last3=Larsson|first3=Alexander|last4=Herzberg|first4=Sven|last5=McVittie|first5=Simon|last6=Zeuthen|first6=David|title=D-Bus Specification|url=http://dbus.freedesktop.org/doc/dbus-specification.html|website=Freedesktop.org|accessdate=22 October 2015}}</ref>
<ref name="dbus tut">{{웹 인용|last1=Pennington|first1=Havoc|last2=Wheeler|first2=David|last3=Walters|first3=Colin|title=D-Bus Tutorial|url=http://dbus.freedesktop.org/doc/dbus-tutorial.html|accessdate=21 October 2015}}</ref>
<ref name="dbus tut q1">{{웹 인용|last1=Pennington|first1=Havoc|last2=Wheeler|first2=David|last3=Walters|first3=Colin|title=D-Bus Tutorial|url=http://dbus.freedesktop.org/doc/dbus-tutorial.html|accessdate=21 October 2015|quote="For the within-desktop-session use case, the GNOME and KDE desktops have significant previous experience with different IPC solutions such as CORBA and DCOP. D-Bus is built on that experience and carefully tailored to meet the needs of these desktop projects in particular."}}</ref>
<ref name="Cocagne 2012">{{웹 인용|last1=Cocagne|first1=Tom|title=DBus Overview|url=https://pythonhosted.org/txdbus/dbus_overview.html|date=August 2012|website=pythonhosted.org|accessdate=22 October 2015}}</ref>
<ref name="Love 2005">{{잡지 인용|last1=Love|first1=Robert|title=Get on the D-BUS|url=http://www.linuxjournal.com/article/7744|date=5 January 2005|magazine=[[Linux Journal]]|accessdate=14 October 2014}}</ref>
<ref name="Palmieri 2005">{{웹 인용|last1=Palmieri|first1=John|title=Get on D-BUS|url=https://www.redhat.com/magazine/003jan05/features/dbus/|date=January 2005|publisher=Red Hat Magazine|accessdate=3 November 2015|url-status=dead|archiveurl=https://web.archive.org/web/20151023072022/http://www.redhat.com/magazine/003jan05/features/dbus/|archivedate=23 October 2015|df=}}</ref>
<ref name="Poettering 2015"   >{{웹 인용|last1=Poettering|first1=Lennart|title=The new sd-bus API of systemd|url=http://0pointer.net/blog/the-new-sd-bus-api-of-systemd.html|date=19 June 2015|accessdate=21 October 2015}}</ref>
<ref name="Poettering 2015 q1">{{웹 인용|last1=Poettering|first1=Lennart|title=The new sd-bus API of systemd|url=http://0pointer.net/blog/the-new-sd-bus-api-of-systemd.html|date=19 June 2015|accessdate=21 October 2015|quote="we are working on moving things to a true user bus, of which there is only one per user on a system, regardless how many times that user happens to log in"}}</ref>
<ref name="gdbus">{{웹 인용|title=gdbus|url=https://developer.gnome.org/gio/stable/gdbus.html|website=GNOME developer|accessdate=4 January 2015}}</ref>
<ref name="qtdbus">{{웹 인용|title=QtDBus module|url=http://doc.qt.io/qt-5/qtdbus-index.html|website=Qt Project|accessdate=1 June 2015}}</ref>
<ref name="dbus-java">{{웹 인용|title=DBus-Java Documentation|url=http://dbus.freedesktop.org/doc/dbus-java/|website=FreeDesktop.org|accessdate=4 January 2015}}</ref>
}}

== 외부 링크 ==
* [http://www.freedesktop.org/Software/dbus D-Bus] home page at Freedesktop.org
* [http://dbus.freedesktop.org/doc/dbus-specification.html D-Bus specification]
* [http://www.freedesktop.org/wiki/IntroductionToDBus Introduction to D-Bus] on the Freedesktop.org wiki
* [http://dbus.freedesktop.org/doc/dbus-tutorial.html D-Bus Tutorial]
* [https://pythonhosted.org/txdbus/dbus_overview.html DBus Overview]

{{Freedesktop.org}}

[[분류:응용 계층 프로토콜]]
[[분류:C++ 라이브러리]]
[[분류:Freedesktop.org]]
[[분류:프로세스 간 통신]]
[[분류:원격 프로시저 호출]]