본문 바로가기

Maker Movement

구글 클라우드 프린트(3) - 프린터인식

구글 클라우드 프린트 기술에 대한 구글에서 제공하는 privet관련 자료(출처:https://developers.google.com/cloud-print/docs/privet) 를 따라 크롬브라우저에서 프린터를 인식하도록 간단한 코드를 만들어 봤다. 등록까지 해보려 했으나 아직 모르는 것이 많아  실패했다.


JmDNS

mDNS 혹은 DNS-SD와 관련해서 각 프로그램 개발 언어마다 오픈 소스 라이브러리가 있는 듯 했다. JAVA에는 JmDNS라이브러리(홈페이지:https://github.com/jmdns/jmdns) 가 대표적인 것으로 보인다. 크롬 브라우저에서 임시로 제작한 프린터(프로그램)을 인식되도록 하는 코딩은 간단히 되었다.


PTR 정보

String name = "ZCUBE";

String typePrivet = "._privet._tcp.local";

String typePrinter = "._printer._sub._privet._tcp.local";


프린터는 아래 두개 항목에 대한 PTR정보를 제공해야 한다.

  • _privet._tcp.local
  • _printer._sub._privet._tcp.local

TXT 레코드

Map<String,String> txts = new HashMap();

txts.put("txtvers", "1");

txts.put("ty", "ZCUBE PRINTER");

txts.put("url", "https://www.google.com/cloudprint");

txts.put("type", "printer");

txts.put("id", "");

txts.put("cs", "online");


필수항목만 구현했다. TXT레코드는 Key-Value값으로 구성되는데, 'ty'키값에 해당하는 값이 프린터 이름으로 크롬 브라우저에 표시된다.


서비스 알림

ServiceInfo svc = ServiceInfo.create(typePrivet, name, typePrinter, 5353, 1, 1, txts);

JmDNS jmdns = JmDNS.create(InetAddress.getLocalHost());


jmdns.registerService(svc);


'ServiceInfo' 객체에 제공할 정보를 담고 이 정보를 mDNS사양에 따라 망에 뿌린다. 아주 간단히 구현이 되었다. 


크롬브라우저 

크롬브라우저는 일반 프린터가 클라우드 프린터처럼 동작하게 해주는 역할뿐만 아니라, 클라우드 지원 프린터를 등록하는 기능도 제공한다. 버전마다 다를 수 있지만, "설정 > 고급 > 인쇄:구글 클라우드 프린트" 화면으로 이동해서 "클라우드 프린트 기기 관리" 화면을 열면 된다. 아니면 URL입력 창에서 "chrome://devices/" 로 이동해도 된다.

 

위의 코드를 이용해서 간단한 프로그램을 구현/구동 후 크롬브라우저의 해당 화면을 보면 아래 그림처럼 구현된 프린터가 표시된다.




마치며

이 간단한 작업을 하는데도 시행착오가 있었다. TXT레코드에 대한 정확한 인식없이 작업을 하다보니 장치는 인식되지만 이름이 표시되지 않아 헤맸고, 무엇보다도 등록되는 것까지 하려 했는데, 실패했다.