IPC는 무엇일까요?
IPC는 프로세스와 프로세스가 서로 주고받는 행위를 말합니다.
프로세스와 프로세스가 소통하기위한 방법은 복잡합니다(그러니 이를 정의한 언어가 나왔겠죠?)
전통적으로 IPC는 몇가지 방식이 있습니다.
Memory Share방식이라던지, Pipe방식, Socket방식 등등
다시 안드로이드로 와서 IPC를 왜 공부해야 할까요?
우리는 앱을 개발할때 단순하게 하나의 프로세스를 만든다고 생각하지만 시스템 내부에서는 IPC가 수도없이 일어나기 때문입니다.
안드로이드 내부구조를 쳤을때 많이 나오는 계층표인데요.
간단하게 Activity에 TextView하나만을 그려도, Android에서는 ViewSystem 과 ActivityManager에게 IPC로 데이터를 주고받기 때문입니다.
그렇다면 Android에서는 어떤 IPC방식으로 서로 데이터를 주고받고 있을까요?
Android에서는 Binder라는 메커니즘을 통해 서로 데이터를 주고 받습니다.
Android의 내부 프로세스는 Binder를 통해 통신합니다.
Binder는 (BeOS)라는 운영체제에서 다이언 핵본이 주도 아래에 개발 되었습니다.
Binder의 개념은 A프로세스와 B프로세스 사이의 함수 및 데이터를 바인딩하는것입니다.
💡 왜 하필 Binder일까?
안드로이드는 개발자들사이에서 리눅스 dbus를 사용하지 않고 Binder를 사용한것에 많은 지탄을 받았었습니다.
Binder의 다양한 장점이 있기도 하겠지만 가장 큰 이유는 다이언 핵본이 안드로이드 프레임워크 개발 리더였기 떄문이라고 합니다.(역시 인맥이 최고야)
원리는 프로세스가 공유하는 커널 공간에 요청내용과 응답내용을 쓰자는 것인데 이를 통해 RPC(Remote Produce) 처럼 작동하게 됩니다.
RPC(Remote Procedure Call)은 원격제어를 위한 코딩없이 다른주소에 있는 함수를 실행할수 있게 하는 기술을 말합니다.
RPC또한 다른 프로세스와 통신하기위해 사용되는거니 IPC의 종류중 하나라고 할수 있습니다.
예를들면, Android에서 Camera를 호출하면 Camera를 찍는 화면으로 넘어가는데요.
이는 Camera의 프로세스 함수를 호출했기 때문입니다.
아까전에 설명한거와 같이 Android 또한 Binder가 알아서 다른 프로세스의 함수를 실행하는 RPC를 C++ FrameWork로 제공하여, 이를 통해 Android 의 각 서비스들이 서로 함수를 호출할 수 있게 됩니다.
좋은 글 감사합니다~