바인더의 한계와 전망

현재 바인더가 제공하는 기능을 사용하는 가장 생산성 있는 환경은, AIDL 도구를 사용하여 서비스(Service)를 제작하는 것이다. 이 작업에 필요한 도구는 SDK에서 제공되고 있지만, NDK 에서는 제공되고 있지 못하다. 즉 자바환경에서 서비스를 제작하거나 서비스를 사용하는 환경에 대한 지원은 충분하다. 하지만 NDK에서 C++환경에 대한 지원은 전무한 상황이다. 드라이버 사용을 위한 헤더파일 정도만 제공될 뿐, 서비스의 제작은 고사하고 서비스를 사용하기 위한 라이브러리도 제공되지 않는다. (사실 드라이버를 위한 헤더 파일도 지원되고 있다고 보기는 힘들다. 단지 파일이 NDK에 포함되어 있을 뿐, 지속적인 지원이 확정된 상태는 아니다.) 이는 PDK까지 내려가면 C++클래스들이 일부 존재하기 때문에 조금 개선되기는 하지만, 여전히 AIDL 과 같은 도구의 혜택으로부터는 격리되어 있는 형편이다. JNI를 통한 자바와 C++의 혼용이라는 대안이 존재하기 때문에 C++에 대한 직접적인 지원은 우선 순위가 떨어질 수밖에 없다. 하지만 언젠가는 NDK환경에 C++을 위한 AIDL및 클래스 라이브러리 지원이 이루어지리라는 기대는 해볼 수 있다. 오픈바인더에 포함되어 있는 바인더 쉘(Binder Shell)은 구현되지 않았다. 바인더 쉘이 당장 구현되어야 할 이유가 없다고 하더라도, 바인더 쉘을 통해 보여지는 스크립팅(Scripting)에 대한 전망은 수용할 필요가 있다. 가령 인터페이스 들여다보기(Introspection)는 스크립팅 환경에서 글루(Glue) 코드의 자동생성을 위해 유용한 기능이다. 오픈바인더에서는 이를 IDL 파일을 관리함으로써 해결하고 있다. ASE(Android Scripting Environment) 라는 설계가 나온 적이 있으나, 너무 제한된 전망만을 갖고 있어 그다지 쓸모가 없다. 바인더는 프로세스간에 예외(Exception)를 전달하지 않는다. 따로 오류를 전달할 수 있기 때문에, 예외라는 개념이 바인더 IPC수준에서 꼭 필요하지는 않다. 클래스 라이브러리 수준에서 예외를 취급하고 있지 않다는 뜻이다. 예외를 반드시 지원해야 하는가에 대해서는 의견이 일치하지 않을 수 있다. 필자로 말할 것 같으면 지원하지 말아야 한다는 쪽이다. 예외를 일관성 있게 지원하기 위해서는 AIDL 까지 손을 보아야 할뿐만 아니라, 예외 객체들 역시 Parcel 프로토콜을 제공해야 한다. 하지만 현재 자바만이 지원되고 있는 상황에서만 생각할 문제는 아니다. 위에서 언급한 스크립트 환경을 포함할 때 어떤 영향이 있는지 고려해야 할 필요가 있다. NDK 에서 C++이 예외를 지원하지 않음도 상기하자. 많은 RPC 시스템에서는 APC(Asynchronous Procedure Call)이라는 개념이 제공되고 있다. 이는 비동기 입출력(AIO - Asynchronous IO)이 제공하는 장점들을 수용하자는 의도에서 비롯된 것이다. 직접적으로 얻을 수 있는 혜택은 하나의 쓰레드에서 여러 개의 요청을 보낸 후에 먼저 완료되는 요청부터 처리할 수 있다는 것으로, 쓰레드를 많이 만들지 않고도 병렬화를 제공할 수 있다는 장점을 갖는다. 가령 CCR(Concurrency and Coordination Runtime) 과 같은 시스템에서, 쓰레드 대신에 비동기 입출력을 사용하여 성능을 개선하기도 한다. 하지만 현재 안드로이드에서 비동기 입출력이 체계적으로 수용되고 있지 않은 만큼, APC 지원을 논하는 것은 시기 상조로 보인다. APC가 제공하는 대부분의 장점은 Interface 를 재설계하는 것으로 대신할 수 있는 경우가 많다. 바인더의 자연스러운 확장은 네트워킹(Networking)을 도입하는 것이다. 원격 호출을 같은 단말에 있는 다른 프로세스까지만 허락하는 것이 아니라, 다른 단말이나 서버에 있는 프로세스까지 허락하는 것이다. 이런 방향으로 바인더를 확장하는데 근본적인 장애물은 없는 것으로 보인다. 단말이나 서버간의 바이트순서(Endian)의 차이를 처리하는 코드들이 Parcel 에 포함되어야 하겠지만 사소한 문제다. 지금까지 살펴본 바인더는 일련의 설계목표를 달성하고 있지만, 앞으로도 많은 가능성을 남겨두고 있다. 이 전망을 실현하고 확장하는데 이 문서가 기여할 수 있기를 기대해본다. 큰 성취 있기를 바란다.