Eli의 여백

바쁜 나날들 사이에서 생각났던 이런저런 것들을 적어봅니다.

프로그래밍

[Python]GCM개론 - 컴퓨터에서 핸드폰에 메시지를 보내보자.

Eli♪ 2015. 1. 19. 18:53

 

 

 

1. 개요

간략한 설명

개인 프로젝트를 진행하면서, 모바일 기기로 컴퓨터를 관리할 수 있으면 얼마나 좋을까? 라고 생각했어요. 전 이미 노트북에 SFTP 서버를 열어 파일전송도 하고, 원격 데스크톱 앱을 통해 모바일에서 노트북에 접속도 할 수 있지만, 이걸로는 부족해요. 

제가 생각하는 진정한 목표는 모바일에서 버튼 하나만 누르면 노트북에서 이를 인식해서 알아서 일을 처리해 주는 프로그램을 개발하는 거에요.

일단 이번에는 그 전초 단계로 구글 클라우드 메시징(Google Cloud Messaging; GCM)을 이용해서 노트북에서 메시지를 보내볼 거에요. 약간은 복잡하지만, 시작해 볼까요?

 

준비물

구글 플레이스토어 접속이 가능한 안드로이드 기기

윈도우가 깔려 있는 컴퓨터

Python 프로그램.

 

참고로 저는 LG optimus LTE II(젤리빈 4.1.2), Windows 8.1이 깔린 노트북을 사용했답니다.

 

특징

그림을 곁들인 알기 쉬운 설명!최신 개발 툴을 이용한 코드 작성!

 

 

2. 전송원리

그림으로 보는 전송원리

기본적으로 구글 서버를 이용하기 때문에, 보내는 쪽과 받는 쪽 모두 구글 서버에 등록이 되어 있어야 해요. 그리고 등록할 때 받은 정보를 이용해서 보내는 사람이 누구인지, 받는 사람은 누구인지를 구별할 수 있어요.

 

보내는 쪽 등록절차

 

 

 

구글 클라우드 메시징(GCM)을 이용하기 위해서는 등록을 해야 해요. 등록을 하면 API key와 프로젝트 번호를 받을 수 있어요.

그리고 이 프로젝트 번호를 넣어서 안드로이드 앱을 개발해요. 개발한 다음에 안드로이드 기기에 설치해요.

그러면 보내는 나를 인증하는 API key는 나만 갖고 있고, 프로젝트 번호는 보내는 나와 받는 나가 공유하게 되요.

 

 

받는 쪽 등록절차

 

 

이제 단말기에 설치된 앱에서 앱이 갖고 있는 프로젝트 번호를 이용해서 구글 서버에 받는 나를 등록해요. 그러면 Register ID를 받을 수 있어요.

받은 Register ID를 보내는 나에게 전달해요.

그러면 받는 나와 보내는 나는 Register ID를 공유하게 되요.

 

 

전송과정

 

 

각각이 갖고 있는 정보를 살펴볼게요. 보내는 나는 API key와 프로젝트 번호, Register ID를 갖고 있어요. 받는 나는 Register ID와 프로젝트 번호를 갖고 있어요.

이제 메시지와 함께, 보내는 나를 인증하는 API key와 받을 사람을 정하는 Register ID를 넣어서 보내요. 그러면 구글 서버가 Register ID를 이용해서 받을 기기를 찾아요. 그리고 메시지와 함께 프로젝트 번호를 보내요. 정보를 받은 단말기는 설치된 수많은 앱 중에 프로젝트 번호가 일치하는 앱을 찾아서 메시지를 전달해요.

 

이렇게 컴퓨터에서 내가 보낸 메시지를 핸드폰에서 받을 수 있어요. 당연히 무선으로도 전송 가능해요. 내가 어디에 있든, API key와 Register ID만 알고 있으면 전 세계 어디에서나 메시지를 보내고 받을 수 있어요.

 

 

 

3. 구현방법

보내는 쪽 등록

일단 구글에서 API key와 프로젝트 번호를 받기 위해 인터넷 브라우저를 이용할 거에요.그리고 안드로이드 앱 개발에는 Android Studio를 사용할 거에요.메시지를 보내기 위한 Python 프로그램 개발에는 PyCharm을 사용할 거에요.
안드로이드 기기에 개발된 앱을 설치하기 위해 Android Studio에 있는 자체 기능을 사용할 거에요. 핸드폰마다 다른 USB 드라이버를 설치하고 USB를 연결하면 Android Studio에서 Android 기기로 앱을 바로 설치할 수 있어요.

 

받는 쪽 등록

구글에서 Register ID를 받기 위해 안드로이드 앱을 개발할 때 등록하는 코드를 작성할 거에요.받은 Register ID를 보내는 컴퓨터로 전달하기 위해 Android Studio의 자체 기능을 사용할 거에요. LogCat에 Register ID를 출력할 거에요.

 

전송

메시지를 보내는 프로그램은 Python으로 작성할 거에요.메시지를 받는 안드로이드 앱은 핸드폰에 항상 구동되게 할 거에요. 우리는 적은 양의 메세지만 보낼 거기 때문에 배터리 소모는 걱정 안해도 되요.메시지를 받은 걸 알기 위해 안드로이드 앱에 받은 메시지를 표시해 주는 코드를 작성할 거에요.

 

보안

모든 전송 과정은 Secure http protocol(https)을 이용해서 이루어져요. 자동으로 암호화를 해 주니 우리는 암호화에 대해서 걱정할 필요가 없어요.

그리고 보내는 쪽에서 메시지의 유효기간을 정할 수 있어서 그 기간이 지나면 구글 서버에 메시지가 저장될 일도 없어요.

 

 

오늘은 일단 여기까지 쓸래요.