본문 바로가기

Maker Movement

구글 클라우드 프린트(1) - 들어가기

어떤 일을 하다 뒤늦게 구글 클라우드 프린트라는 기술을 알게 되었다. 이미 2010년 부터 구축이 되었는데, 이제서야 알게 되었다. 업무에 필요했기 때문에 기술 검토를 했는데, 몇가지 중요한 기술들을 알게 되었고, 다양하게 응용할 수 있는 아이디어들이 떠오르게 되었다. 


Cloud Printer

구글 클라우드 프린트는 프린터를 구글 클라우드 환경에 등록하면 언제 어디서든 프린트 작업시 이 프린터를 이용할 수 있다. 이런 서비스는 구글 뿐만 아니라 삼성등에서도 제공하고 있다. 예를 들면 집 혹은 사무실의 일반 프린터를 클라우드 서비스에 연결해두면, 바깥에서 이동하면서 핸드폰에서 문서를 앞서 연결한 프린터로 인쇄할 수 있다. 이런걸 이제야 알다니...


사용할 수 있는 프린터는 이론상 모든 프린터가 가능하다. 구글 클라우드 프린트 서비스에 따라 프린터들은 두가지로 분류될 수 있다. 하나는 구글 클라우드 프린트 서비스 연동 기능이 내장된 것들로 '클라우드 프린터'라고 부른다. 다른 하나는 흔히 쓰고 있는 일반 프린터인데 'GCP Connector'로 불려지는 하드웨어 혹은 소프트웨어의 도움을 받아야 서비스에 연동된다. 예를 들면, 클롬 브라우저가 대표적인 'GCP Connector'인데, 일반 프린터를 크롬브라우저에서 등록을 하면 클라우드를 통한 인쇄작업이 가능해지는데, 대신 크롬브라우저를 실행된 상태여야 한다.


여기서 'GCP'는 구글 클라우드 프린트(Google Cloud Print)의 약어인데, 요새 많이 쓰여지고 있는 'Google Cloud Platform'의 약어도 GCP로 쓰는 경향이 있어 헷갈리는 약어이다. 


프린터 드라이버

구글 클라우드 서비스와 연동되는 프린터의 드라이버를 자바로 제작해보고자 한다. 이미 클라우드 프린터로 PDF프린터가 서비스 되고 있지만, 다양한 응용이 가능하다고 본다.


구글 프린터 드라이버를 제작하기 위해서는 아래의 사항들이 처리되어야 한다.

  • mDNS 쿼리에 대한 응답
  • 구글에서 정의한 Web API 구현
  • XMPP기반 GTalk 지원
먼저 관련 항목들이 어떻게 동작하는지 간단히 그림을 그려봤다. 


mDNS는 'Multicast DNS'로 로컬망에서 네임서버에 등록되지 않고도 약속된 이름으로 특정 장치를 찾을 때 사용한다. 구글 클라우드 프린트의 경우 보통 크롬브라우저가(사용자가 요청시) mDNS쿼리를 로컬망에 뿌리고 응답된 메시지들을 분석해서 클라우드 프린터를 자동으로 찾아 사용자에게 프린터들을 보여준다.


WebAPI는 프린터를 구글 서비스에 등록, 프린터를 제어, 프린터 정보 조회등을 지원한다. 구글은 해당 API 규약을 정하고 공유했다. 규약에 따라 구현을 해주면 된다.


클라우드 프린터는 반드시 XMP기반 GTalk와 통신을 지원해야 한다. GTalk는 카톡처럼 인스턴트 메시징 및 VoIP기반 음성/화상 통화를 제공하는 구글 서비스이다. GTalk는 XMPP 통신규약을 바탕으로 만들어졌다. 어쩌면 XMPP가 클라우드 프린트의 핵심기술이라 할 수 있다. 예를 들면, 어떤 사무실에서 등록된 프린터가 있는데 해당 사무실의 인터넷 서비스가 고정IP가 아니라면, 바깥 스마트폰에서 인쇄 요청을 하면 이 메시지가 어떻게 전달될 수 있을까? 바로 이러한 문제들을 해결해주는게 XMPP 통신 규약이다. 


mDNS

먼저 mDNS 쿼리문에 대한 적절한 응답을 할 모듈을 구현해야 한다. mDNS 통신규약, 특히 메시지 구조는 DNS의 것을 그대로 따른다. 그리고 Multicast/UDP통신이다. 자세한 구현은 다음에...