안드로이드 플랫폼기반의 푸시서버 아키텍처
Upcoming SlideShare
Loading in...5
×
 

안드로이드 플랫폼기반의 푸시서버 아키텍처

on

  • 25,576 views

2010 한국 자바 개발자 페스티벌

2010 한국 자바 개발자 페스티벌

Statistics

Views

Total Views
25,576
Views on SlideShare
24,716
Embed Views
860

Actions

Likes
21
Downloads
824
Comments
3

17 Embeds 860

http://l2j.co.kr 494
http://nom3203.egloos.com 242
http://show.ideatree.kr 65
http://seaboy.tistory.com 15
http://duraboys.tistory.com 14
http://nayablue.cafe24.com 7
http://technet.nexgens.com 6
http://www.techgig.com 4
http://192.168.0.12 3
http://www.l2j.co.kr 2
http://blog.naver.com 2
http://twitter.com 1
http://www.hanrss.com 1
http://th.nexgens.com 1
http://wildfire.gigya.com 1
http://localhost 1
http://www.slideshare.net 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

안드로이드 플랫폼기반의 푸시서버 아키텍처 안드로이드 플랫폼기반의 푸시서버 아키텍처 Presentation Transcript

  • Ar Artszen Jav Comm r rtszen Jav Comm 2010 JCO Festival 안드로이드 기반의 푸시 서버 기술 n va n va Android Based Push Server Technology munity munity 아첸자바커뮤니티 artszen java community j y y 1
  • 발표 주제 • 안드로이드 기반의 푸시 서버 기술 Ar Ar rtszen Java Community rtszen Jav Comm – Android Based Push Server Technology n v n va munity m y y 2
  • Mobile Market Growth • 모바일 시장의 성장 Ar Ar rtszen Jav Comm rtszen Jav Comm • 네트워크 기술이 모바일 장비로 확대 n va n va • 일상 생활과 기업의 업무 환경에서 스마트 폰의 활용도가 높아짐 • 모바일 시장 확장에 따른 전문화된 개발 기술과 개발 인력 필요 • 스마트 폰의 많은 보급으로 C2B, C2C, B2B, C2C, C2G 등의 다 양한 비즈니스 모델의 변화 • 모바일 환경의 비즈니스 모델에 적용하기 쉬운 개방형 안드로이드 플랫폼 munity munity • 모바일 장비 활용 시 배터리의 사용 이슈를 고려한 푸시 기술 y y
  • Mobile Phone Trend • 모바일 폰 트랜드 Ar Ar iPhone iPh rtszen Jav Community rtszen Jav Comm BlackBerry y n va n va Android munity m 출처 : www.google.com/trend g g y y 4
  • Mobile Phone SDK Trend • 모바일 폰 개발 SDK 트랜드 Ar Ar rtszen Jav Community rtszen Jav Comm Android SDK n va n va Objective C munity m 출처 : www.google.com/trend g g y y 5
  • Mobile Phone Push Notification Trend • 모바일 폰 Push Notification 트랜드 Ar Ar rtszen Jav Community rtszen Jav Comm iPhone Push n va n va Android Push munity m 출처 : www.google.com/trend g g y y 6
  • Java based Android Platform • 자바 기반의 안드로이드 플랫폼 Ar Ar rtszen Jav Comm rtszen Jav Comm • 기존 자바 개발자에게 새로운 모바일 환경의 개발 기술 n va n va • 모바일 환경에서 필요한 서버 개발 기술 필요 Java Android munity munity y y 7
  • 모바일 디바이스의 네트워크 특성 Private Network Ar Ar 과징 대상 SMS Server rtszen Jav Comm rtszen Jav Comm Access Point Server Internet Application n va n va s Base - 주소가 변경된다. Station - 내 IP 주소이다. 내부 이다 - 서버로서 사용할 수 없다. DBMSs 연결불가 munity munity - 폴링 기술을 사용해야 한다. - 배터리 효율이 떨어진다. *need push server - 데이터를 실시간으로 가져오는 부담이 증가한다. y y 8
  • APNs (Apple Push Notification Service) 고찰 하나의 Provider가 Ar Ar rtszen Java Comm rtszen Jav Comm 하나의 클라이언트 애플리케이션에게 Notification 푸시 n v n va Client Provider P id notification APNs APN notification notification Application munity munity iPhone y y 9
  • APNs (Apple Push Notification Service) 고찰 다중 Provider가 Ar Ar rtszen Jav Comm rtszen Jav Comm 다중 클라이언트 애플리케이션에게 Notification 푸시 n va n va notification notification Provider A APNs Provider B munity munity y y 10
  • APNs (Apple Push Notification Service) 고찰 • APNs 는 Apple iPhone의 Push Notification의 주요 기능 Ar Ar rtszen Jav Comm rtszen Jav Comm • APNs 는 iPhone, iPad, iPod 과 같은 장비에게 정보를 전파하기위 한 매우 효율적인 서비스이다서비스이다. n va n va • 각 장비들은 서비스와 인증되고 암호화된 IP 커넥션을 구축하고 인증되고, 구축하고, 이 연결을 통해서 Notification을 전송 받는다. APNs 암호화된 채널 연결 (TLS) munity munity iPhone y y 11
  • APNs (Apple Push Notification Service) 고찰 • Notification이 도착했을 때, 애플리케이션이 구동 중이 아니라면, Ar Ar rtszen Jav Comm rtszen Jav Comm 장비는 사용자에게 애플리케이션을 대기중인 데이터를 가지고 있 음을 알린다. n va n va • Provider는 암호화된 채널을 통해 APNs에 연결한다. Provider 암호화된 채널 연결 (TLS) munity munity APNs y y 12
  • APNs (Apple Push Notification Service) 고찰 • APNs는 클라이언트 애플리케이션에게 줄 데이터가 들어오는지 모 Ar Ar rtszen Jav Comm rtszen Jav Comm 니터링한다. 니터링한다 • Provider가 보낸 새로운 데이터를 전송받고 애플리케이션에 대한 전송받고, n va n va 새로운 데이터가 도착하면, APNs는 대상 장비에게 푸시한다. • Notification은 token과 payload로 구성되는 2개의 조각으로 구성 된다. 장비의 소재를 파악하기 위한 정보 token munity munity Notification payload 실제 데이터 : Json 프로퍼티 목록 y y 13
  • APNs (Apple Push Notification Service) 고찰 • device token 은 전화번호와 유사한 것으로, APNs가 클라이언트 Ar Ar rtszen Jav Community rtszen Jav Comm 애플리케이션이 설치된 장비의 소재를 파악하기 위한 정보를 포함 한다. n va n va • payload는 장비 상의 애플리케이션 사용자에게 알리는 방식을 정 의한 Json 프로퍼티 목록이다. • Notification 데이터의 흐름은 단 방향이다. munity m y y 14
  • APNs (Apple Push Notification Service) 고찰 • Provider는 클라이언트 애플리케이션에 대한 device token과 Ar Ar rtszen Jav Comm rtszen Jav Comm payload를 작성한다. pa load를 작성한다 • 이를 APNs에게 전송하고 APNs는 장비에게 Notification을 푸시한 전송하고, n va n va 다. Provider iPhone token notification payload munity munity APNs APN y y 15
  • APNs (Apple Push Notification Service) 고찰 • Provider는 APNs에게 자신을 인증하기 위해 topic을 준비한다 Ar Ar rtszen Jav Comm rtszen Jav Comm • topic은 데이터를 제공할 애플리케이션을 구분할 때 사용된다. n va n va • topic은 iPhone OS 상의 대상 애플리케이션의 identifier이다. Provider 인증 topic munity munity 애플리케이션의 identifier APNs y y 16
  • Service to Device Connection Trust • APNs는 TLS peer-to-peer 인증을 통해 장비와 연결한다. Ar Ar rtszen Jav Comm rtszen Jav Comm – iPh iPhone OS가 연결 신뢰성에 대한 작업을 직접 다룬다 n va n va APNs Device TLS initiation Server certificate Validate server certificate Device certificate munity munity Validate device certificate TLS established y y 17
  • TLS 개요 • TLS : Transport Layer Security Ar Ar rtszen Jav Comm rtszen Jav Comm • TLS는 암호 규약이다. n va n va • TLS는 SSL이 표준화 되면서 바뀐 이름이다. • TCP/IP 네트워크을 사용하는 통신에 적용된다. • 통신 과정에서 전송계층 종단간 보안과 데이터 무결성을 보장한다. munity munity • 웹 브라우징, 전자메일, 인스턴스 메시지, VoIP(Voice-over-IP) 같 은 응용부분에 적용되고 있다. y y
  • TLS 개요 • TLS는 IETF 표준 규약이다. Ar Ar rtszen Jav Comm rtszen Jav Comm • TLS는 클라이언트/서버 응용프로그램이 네트워크로 통신하는 과 정에서 도청/간섭/위조를 방지하기 위하여 설계되었다 설계되었다. n va n va • TLS 의 3단계 기본 절차 – 1. 지원 가능한 알고리즘 상호 교환 – 2. 키 교환, 인증 – 3. 대칭 키 암호로 암호화하고, 메시지 인증 munity munity • 첫 단계에서 서버와 클라이언트는 암호 스위트를 교환한다 교환한다. y y
  • TLS 개요 • 이 단계에서 키 교환과 인증에 사용할 암호화 방법, 메시지 인증 Ar Ar rtszen Jav Community rtszen Jav Comm 코드(MAC)가 결정된다 결정된다. • 키 교환과 인증 알고리즘은 공개 키 방법을 사용하거나 사전에 공 사용하거나, n va n va 유된 키(TLS-PSK)를 사용할 수 도 있다. • 메시지 인증코드는 HMAC 해시 함수로 만든다. – SSL에서는 비표준 무작위 함수를 사용한다. munity m y y
  • Provider to Service Connection Trust • Provider와 Service 사이의 연결 역시 TLS peer-to-peer 인증을 Ar Ar rtszen Jav Comm rtszen Jav Comm 사용한다. 사용한다 n va n va Provider APNs TLS initiation Server certificate Validate server certificate Provider certificate munity munity Validate provider certificate TLS established y y 21
  • Token 생성 및 분배 • iPhone 애플리케이션은 push notification을 받기 위해서 등록되어 Ar Ar rtszen Jav Comm rtszen Jav Comm 야 한다 한다. • 애플리케이션은 장비에 설치된 후 위 방법을 사용한다 사용한다. n va n va • iPhone OS는 애플리케이션으로부터 등록 요청을 받은 후 APNs 후, 에 연결하고, 이 요청을 포워딩한다. • APNs는 유일한 device certificate 안에 포함되어 있는 정보를 사 용하여 device token을 생성한다. munity munity y y 22
  • Token 생성 및 분배 • device token은 device에 대한 고유 인증 값을 포함한다. Ar Ar rtszen Jav Community rtszen Jav Comm • 다음 token key를 가지고 device token을 암호화하고, 이를 장비에 게 되돌려 준다준다. n va n va munity m y y 23
  • Ar Artszen Jav Comm r rtszen Jav Comm n va n va Token 생성 및 분배 Provider Device APNs Connect(Token, ...) Generate token package Generate Device ID from Device certificate munity munity Encrypt token with token Token key Token y y 24
  • Token 생성 및 분배 • 장비는 device token을 요청 애플리케이션에게 NSData 객체로 되 Ar Ar rtszen Jav Community rtszen Jav Comm 돌려 보낸다 보낸다. • 다음 애플리케이션은 device token을 바이너리 또는 헥사 포맷으 n va n va 로 Provider에게 보낸다. munity m y y 25
  • Ar Artszen Jav Comm r rtszen Jav Comm Device Token 분배 1 SSL Connection APNs APN n va n va device token 3 2 device token Client 4 device token Provider munity munity Application y y 26
  • Ar Ar Android Architecture Applications pp rtszen Jav Comm rtszen Jav Comm Home Contacts Phone Browser ... Application Framework Java J n va n va Activity Manager Window Manager Content Providers View System Package Manager Telephony Manager Resource Manager Notification Manager Location Manager Libraries Android Runtime JNI Core Libraries Surface Manager Media Framework SQLite Dalvik Virtual Machine OpenGL | ES FreeType WebKit C++/C SGL SSL libc munity munity Linux Kernel Display Driver Camera Driver Flash Memory Driver Binder (IPC) Driver C Keypad Driver WiFi Driver Audio Driver Power Management y y 27
  • 안드로이드 개발 환경 구축 JDK 설치 Ar Ar • rtszen Jav Comm rtszen Jav Comm • Eclipse 설치 • 안드로이드 SDK 설치 • 환경변수 설정 : Path 에 안드로이드 SDK의 t l 디렉터리 추가 P th tools n va n va • Eclipse용 ADT(Android Development Tools) 플러그인 설치 및 설정 • 디버깅을 위한 안드로이드 하드웨어 설정 – 해당 안드로이드 기기에서 USB 연결을 통한 디버깅을 활성화 한다. – Settings > Applications > Development > USB debugging 활성화 • 안드로이드 장비 디버깅을 위한 운영체제 설정 – 안드로이드 하드웨어에 안드로이드 응용프로그램을 설치하고 디버깅하기 위 munity munity 해 USB를 통해 운영체제가 안드로이드 장비에 연결할 수 있게 설정해야 한다 한다. – 운영체제 마다 방법이 다름 – 윈도우즈 : 안드로이드 USB 드라이버를 설치 y y 28
  • Ar Ar 안드로이드 SDK 주요 패키지 패키지 설명 rtszen Jav Comm rtszen Jav Comm andoird.* 안드로이드 응용프로그램 기본 요소 com.google.android.maps 구글 지도 인터페이스 n va n va dalvik.* 디버깅 등을 위한 Dalvik 가상 머신 지원 java.* 코어 클래스, 네트워크, 보안 등의 일반 유틸리티 javax.* 암호화 지원 junit.* 단위 검사 지원 org.apache.http. org apache http * HTTP 프로토콜 지원 org.json Json 지원 munity munity org.w3c.dom DOM 코어를 위한 W3C Java 바인딩 org.xml.sax.* XML 지원을 위한 SAX org.xmlpull.* 고성능 XML 파싱 y y 29
  • 안드로이드 주요 개발 도구 • 안드로이드 에뮬레이터 Ar Ar rtszen Jav Comm rtszen Jav Comm – 안드로이드 가상머신으로 PC에서 실행되는 실제 장비와 흡사하게 작동 – 안드로이드 응용프로그램을 에뮬레이터에 설치, 실행/디버깅을 할 수 있음 • DDMS : Dalvik Debug Monitor Service n va n va – 안드로이드 플러그인 (ADT)를 통해 Eclipse에 통합 – 안드로이드 기기에 직접 접근하여 실행 프로세스와 스레드 관리, Heap data 조회, 조회 프로세스를 디버거에 붙이는 다양한 작업 가능 • ADB : Android Debug Bridge – 개발자가 Eclipse와 같은 표준 자바 IDE를 이용하여 에뮬레이터나 실제 장비 p 용 장 상의 안드로이드 코드를 디버깅할 수 있게 해주는 도구 – DDMS, Eclipse용 안드로이드 개발 플러그인 모두 ADB를 통해 장비와 상호 munity munity 작용 • AHV : Android Hierarchy Viewer – 레이아웃 구성 요소들의 관계를 보여주는 시각적 도구 y y 30
  • 안드로이드 AVD 생성 • AVD : Android Virtual Device (안드로이드 가상 장비) Ar Ar rtszen Jav Community rtszen Jav Comm • 명령 행에서 생성 – 안드로이드 설치 디렉터리tools 로 이동 – android create avd -n myAvd2 1 -t 7 -c 1024M n myAvd2.1 t c n va n va • Eclipse ADT 플러그인의 AVD Manager를 이용한 방법 munity m y y 31
  • Ar Artszen Jav Comm r rtszen Jav Comm 안드로이드 응용프로그램 구조 Activity Main Activity : set in AndroidManifest.xml Activity y n va n va Android Application Activity Service Activity without UI Activity transition startActivity(new Intent(getApplicaitonContext(), Activity2.class); munity munity Activity1 Intent Activity2 y y 32
  • Ar Ar rtszen Jav Comm rtszen Jav Comm 안드로이드 응용프로그램의 수명 주기 request start onCreate onRestoreInstanceState n va n va foreground onStart full onResume background g lifetime visible delete from lifetime memory onSaveInstanceState onRestart active background foreground lifetime onPause foreground munity munity onStop onDestroy y y 33
  • 안드로이드 응용프로그램의 수명 주기 • onCreate() Ar Ar rtszen Jav Comm rtszen Jav Comm – A i i 가 시작되면 호출 Activity가 – Activity의 정적자원 초기화에 적합 • onResume() n va n va – Activity가 ActivityStack의 최상위에 놓이고, 전경 프로세스가 되면 호출 – Activity의 실행에 필요한 자원 준비에 적합 – 오디오 동영상 시작에 적합한 곳 오디오, • onPause() – 다른 Activity가 ActivityStack 최상단에 놓이면 현 Activity는 백그라운드로 놓이면, 밀린다. 이 때 호출 – onResume()에서 시작한 자원의 비활성화해야한다 munity munity • onDestroy() D t () – Activity가 종료되기 직전에 호출. (자발적 종료, 안드로이드가 종료) – Activity의 정적 데이터 해제에 적합 y의 y y 34
  • Ar Ar rtszen Jav Comm rtszen Jav Comm 안드로이드 프로젝트 구성 AndroidManafest.xml AndroidManafest xml 응용프로그램의 전역 설정 default.properties 빌드 대상과 적절한 빌드시스템 옵션 정의 src 응용프로그램 소스 n va n va Android Project xxx.xxx.Main.java gen 자원관리자 소스 : 수정 불가 xxx.xxx.R.java res 모든 자원 이미지 레이아웃 , 문자열 등 이미지, drawable icon.png munity munity layout l main.xml i l values stirngs.xml y y 35
  • Ar Ar 안드로이드 기반 푸시 아키텍처 구상 Android Mobile Device Push Server rtszen Jav Community rtszen Jav Comm Monitoring Module Push Notification Client Service monitoring (Android Service) n va n va Network Module push notification Network Module Android Notifica tion Service notify munity m Android Push Client Application Android Push Client Application HTTP, TCP/IP, ... activate Android Push Client Application Content Server y y 36
  • 안드로이드 네트워크 프로그래밍 데모 안드로이드 네트워크 프로그래밍을 위한 구성 Ar Ar • rtszen Jav Comm rtszen Jav Comm Android Mobile Device Push Server Push Notification Client Service Java Application pp n va n va Network Module Thread Network Module Thread Android Notification Handler Service Network Module Thread notify Android Push Client Application activate Activity update view munity munity Handler Network Module Thread y y 37
  • 안드로이드 네트워크 프로그래밍 데모 • 네트워크 서버 구성 Ar Ar rtszen Jav Community rtszen Jav Comm 자바 클래스 설명 n va n va PushSvr.java 네트워크 메인 애플리케이션 SManager.java 클라이언트 연결정보 관리를 위한 Vector 상속 클래스 ClientInfo.java 클라이언트 연결 정보 munity m y y 38
  • 안드로이드 네트워크 프로그래밍 데모 • SManager.java 구성 (extends Vector) Ar Ar rtszen Jav Comm rtszen Jav Comm 구분 이름 설명 n va n va add(clientInfo) 클라이언트 정보 추가 remove(clientInfo) 클라이언트 정보 삭제 메소드 findById(id) ID 값에 해당하는 클라이언트 정보 반환 findBySocket(socket) 소켓 값에 해당하는 클라이언트 정보 반환 sendToDevice(id, message) ID 값을 가진 모든 소켓에 메시지 전송 munity munity y y 39
  • 안드로이드 네트워크 프로그래밍 데모 • PushSvr.java 구성 Ar Ar rtszen Jav Comm rtszen Jav Comm 구분 이름 설명 n va n va port: int 서버의 리스닝 포트 번호 (8999) 프로퍼티 server: ServerSocket 서버용 소켓 객체 socketManager: SManager 클라이언트 연결 정보 서버를 시작하는 작업 담당 start() 메소드 클라이언트가 연결될 때 마다 쓰레드 생성 main() 메인 엔트리 메소드 NetworkThread 네트워크 담당 쓰레드 클래스 munity munity - socket . 클라이언트 소켓 내부 - reader . 입력 스트림 클래스 - writer . 출력 스트림 + run() . 쓰레드 시작 메소드 y y 40
  • 안드로이드 네트워크 프로그래밍 데모 • ClientInfo.java 구성 Ar Ar rtszen Jav Community rtszen Jav Comm 구분 이름 설명 n va n va socket: Socket 클라이언트 소켓 프로퍼티 id: String 애플리케이션 키 munity m y y 41
  • 안드로이드 네트워크 프로그래밍 데모 • 안드로이드 애플리케이션 구성 Ar Ar rtszen Jav Comm rtszen Jav Comm 액티비티 설명 n va n va 안드로이드 애플리케이션 메인 액티비티 클래 Main.java 스 MessageBox.java MessageBox java AlertDialog Wrapper 클래스 PushService.java 푸시 클라이언트 서비스 부팅 완료 브로드캐스팅을 받을 리시버 클래 StartupIntentReceiver.java 스 AndroidManifest.xml 전역 설정 xml 파일 munity munity 안드로이드 애플리케이션 메인 레이아웃 xml main.xml 파일 y y 42
  • 안드로이드 네트워크 프로그래밍 데모 • AndroidManifest.xml Ar Ar rtszen Jav Comm rtszen Jav Comm <?xml version="1.0" encoding="utf-8"?> <manifest n va n va xmlns:android="http://schemas.android.com/apk/res/a ndroid" p package="org.artszen.pushclient" g g p android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:icon @drawable/icon android:label="@string/app_name"> munity munity y y 43
  • 안드로이드 네트워크 프로그래밍 데모 • AndroidManifest.xml Ar Ar rtszen Jav Comm rtszen Jav Comm <activity android:name=".Main" android:label="@string/app_name"> n va n va <intent-filter> <action android:name ="android.intent.action.MAIN"/> <category android:name ="android.intent.category.LAUNCHER"/> </intent filter> </intent-filter> </activity> munity munity y y 44
  • 안드로이드 네트워크 프로그래밍 데모 • AndroidManifest.xml Ar Ar rtszen Jav Comm rtszen Jav Comm <receiver android:name="StartupIntentReceiver"> <intent-filter> n va n va <action android:name ="android.intent.action.BOOT_COMPLETED" /> <category android:name g y ="android.intent.category.HOME" /> </intent-filter> </receiver> munity munity y y 45
  • 안드로이드 네트워크 프로그래밍 데모 • AndroidManifest.xml Ar Ar rtszen Jav Comm rtszen Jav Comm <service android:name="PushService"> <intent-filter> n va n va <action android:name ="org.artszen.pushclient.PushService" /> </intent-filter> </service> </application> <uses-sdk android:minSdkVersion="7" /> munity munity y y 46
  • 안드로이드 네트워크 프로그래밍 데모 • AndroidManifest.xml Ar Ar rtszen Jav Comm rtszen Jav Comm <uses-permission android:name ="android.permission.INTERNET" /> n va n va <uses-permission android:name ="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name p ="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name ="android.permission.VIBRATE" /> android.permission.VIBRATE <uses-permission android:name ="android.permission.RECEIVE_BOOT_COMPLETED" /> munity munity </manifest> y y 47
  • 데모 시연 48 Ar Artszen Java Community r rtszen Jav Comm n v n va munity m y y