Mรกs contenido relacionado
Similar a Androidpn guide-0.5.0-ko (20)
Androidpn guide-0.5.0-ko
- 1. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
Android Push Notification System
Project Guide v0.5
2010.10
Moduad Co., Ltd.
โ 2010 Moduad 1
- 2. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
๋ชฉ ์ฐจ
1 ํ๋ก์ ํธ ๊ฐ์...................................................................................................................... 3
1.1 ํ๋ก์ ํธ ๋ชฉ์ ............................................................................................................................... 3
1.2 ํ๋ก์ ํธ ๊ฐ๋ฐ ๋ฐฐ๊ฒฝ ...................................................................................................................... 3
2 ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
........................................................................................... 3
2.1 ์์คํ
๊ตฌ์ฑ ................................................................................................................................... 3
2.2 ํธ์ ํต๋ณด ๊ณผ์ .............................................................................................................................. 4
3 ํ๋ก์ ํธ ๊ตฌ์ฑ...................................................................................................................... 4
3.1 ์๋ฒ (androidpn-server).............................................................................................................. 4
3.2 ํด๋ผ์ด์ธํธ (androidpn-client) ................................................................................................... 7
3.3 ๋ฐ๋ชจ ์ ํ๋ฆฌ์ผ์ด์
(androidpn-demoapp) .............................................................................. 9
4 ํ๋ก์ ํธ ์ปดํ์ผ ๋ฐ ๋น๋ ................................................................................................... 9
4.1 ์๋ฒ ์ปดํ์ผ ๋ฐ ๋น๋ .................................................................................................................... 9
4.2 ํด๋ผ์ด์ธํธ ์ปดํ์ผ ๋ฐ ๋น๋ ...................................................................................................... 10
5 ์๋ฒ ์ค์น ๋ฐ ๊ตฌ๋ ............................................................................................................. 11
5.1 ์๋ฒ ์ค์น ..................................................................................................................................... 11
5.2 ์๋ฒ ๊ตฌ๋ ..................................................................................................................................... 12
6 ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ ...................................................................................... 13
6.1 ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ .................................................................................................... 13
6.2 ํด๋ผ์ด์ธํธ ํ๊ฒฝ ์ค์ ํ์ผ ...................................................................................................... 13
6.3 ํด๋ผ์ด์ธํธ ์๋น์ค ์์ ์ฝ๋ .................................................................................................. 13
7 ํ๋ก์ ํธ ์คํฌ๋ฆฐ์ท............................................................................................................ 14
7.1 ์๋ฒ (๊ด๋ฆฌ์ ์น ์ฝ์) ................................................................................................................ 14
7.2 ํด๋ผ์ด์ธํธ (์๋๋ก์ด๋ ์ ํ๋ฆฌ์ผ์ด์
).................................................................................. 17
8 ์ฃผ์ ๊ด๋ จ ๊ธฐ์ .................................................................................................................. 20
8.1 ํธ์ ํต๋ณด (Push Notification)๋? ............................................................................................ 20
8.2 Push vs. Pull ................................................................................................................................ 21
8.3 XMPP (eXtensible Message and Presence Protocol) .......................................................... 21
8.4 ์๋๋ก์ด๋(Android).................................................................................................................. 22
9 ๊ฐ๋ฐ ํ๊ฒฝ............................................................................................................................ 23
9.1 ์๋ฒ ๊ฐ๋ฐ ํ๊ฒฝ ............................................................................................................................ 23
9.2 ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ ํ๊ฒฝ ................................................................................................................ 23
10 ๋ฐ์ ๋ฐฉํฅ............................................................................................................................ 23
10.1 ์ํํธ์จ์ด ํ์ง ํฅ์ ............................................................................................................ 23
10.2 ์๋ฒ ๋ฐ ํด๋ผ์ด์ธํธ ์์คํ
ํ์ฅ ......................................................................................... 24
10.3 ๋ค์ํ ๋ถ์ผ์ ์์ฉ ................................................................................................................ 24
10.4 ์คํ์์ค ์ปค๋ฎค๋ํฐ ํ๋์ ๊ธฐ์ฌ .......................................................................................... 24
โ 2010 Moduad 2
- 3. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
1 ํ๋ก์ ํธ ๊ฐ์
1.1 ํ๋ก์ ํธ ๋ชฉ์
๋ณธ ํ๋ก์ ํธ๋ ์๋๋ก์ด๋ ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ์์ ๋ง์ ํ์์ฑ๊ณผ ๋ค์ํ ๋ถ์ผ์ ์์ฉ๋ ์ ์๋ ์๋๋ก์ด๋
๊ธฐ๋ฐ์ ํธ์ ํต๋ณด (Push Notification) ์๋น์ค๋ฅผ ์ํ ์๋ฒ ์์คํ
๋ฐ ํด๋ผ์ด์ธํธ ์๋ฃจ์
์ ์คํ์์ค๋ก
์ ๊ณตํ์ฌ, ๊ตญ๋ด์ธ ์๋๋ก์ด๋ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ๋ฐ ๊ณต๊ฐ SW ์ปค๋ฎค๋ํฐ ํ์ฑํ์ ๊ธฐ์ฌ๋ฅผ ํ๊ณ ์
ํ๋ค.
๋ณธ ํ๋ก์ ํธ๋ ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ๋ชจ๋์ ์ ๊ณตํ๋ค.
๏ฌ ํธ์ ํต๋ณด ์๋ฒ ์์คํ
๏ฌ ์๋๋ก์ด๋ ํธ์ ํต๋ณด ํด๋ผ์ด์ธํธ ๋ชจ๋
๏ฌ ์๋๋ก์ด๋ ์ํ ์ ํ๋ฆฌ์ผ์ด์
1.2 ํ๋ก์ ํธ ๊ฐ๋ฐ ๋ฐฐ๊ฒฝ
์๋๋ก์ด๋ ๊ธฐ๋ฐ์ ์ ํ๋ฆฌ์ผ์ด์
์ด ๊ธ๊ฒฉํ ์ฆ๊ฐํ๊ณ ์์ง๋ง, ํ์ฌ Google์์ ์ ์์ ์ธ ์๋๋ก์ด๋ ๊ธฐ๋ฐ
ํธ์ ํต๋ณด ์๋น์ค๋ฅผ ์ง์์ ํ๊ณ ์์ง ์์ ์ํฉ์ด๋ค. ์๋๋ก์ด๋ 2.2 (Froyo)๋ถํฐ ๋ฑ์ฅํ Cloud To Device
Messaging (C2DM) ์๋น์ค๋ ํ์ฌ Lab ํ
์คํธ ๋ฒ์ ์ผ๋ก ์ ์ ์๋น์ค๊ฐ ๋๊ณ ์์ง ์์ ์ํฉ์ด๋ฉฐ, ์ด์
์๋๋ก์ด๋ OS ๋ฒ์ ์ ์ง์ํ์ง ์๋๋ค.
์ด์ ๋ฐํด BlackBerry๋ 2002๋
Push Email ์๋น์ค์ ์์์ผ๋ก ํธ์ ํต๋ณด ์๋น์ค๋ฅผ ์์ํ์ผ๋ฉฐ, Apple๋
2009๋
iPhone 3.0 ์ดํ๋ถํฐ Apple Push Notification Service (APNS)๋ฅผ ์ง์ํ๊ณ ์๋ค. ๋ํ Microsoft๋
์ถ์ ์์ ์ธ Windows Phone 7์์ Microsoft Push Notification Service (MPNS) ์ง์๊ณผ ํจ๊ป ์ถ์
์์ ์ด๋ค.
2 ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
2.1 ์์คํ
๊ตฌ์ฑ
์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
์ XMPP ํ๋กํ ์ฝ์ ์ง์ํ๋ ์์ผ ์๋ฒ ์์คํ
๊ณผ ์๋๋ก์ด๋ ๊ธฐ๋ฐ
ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์
์ผ๋ก ๊ตฌ์ฑ๋๋ค.
์๋ฒ Java ๊ธฐ๋ฐ ์์ผ ์๋ฒ๋ก XMPP ํ๋กํ ์ฝ์ ์ง์ํ๋ฉฐ, ๊ด๋ฆฌ์์ฉ ์น ์ฝ์ ์ง์์
ํฌํจํ๊ณ ์๋ค. ๊ด๋ฆฌ์ ์น ์ฝ์์ ์ด์ฉํ์ฌ ํด๋ผ์ด์ธํธ ์ ์ ์ ๋ณด ๋ชจ๋ํฐ๋ฆฟ ๋ฐ Push
๋ฉ์์ง๋ฅผ ์ ์กํ ์ ์๋ค.
ํด๋ผ์ด์ธํธ ์๋๋ก์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ผ๋ก ์๋ฒ๋ก๋ถํฐ Push๋ ๋ฉ์์ง๋ฅผ ์์ํ์ฌ
์ฌ์ฉ์์๊ฒ ํต๋ณดํ๋ค.
โ 2010 Moduad 3
- 4. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
2.2 ํธ์ ํต๋ณด ๊ณผ์
์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
์ ๊ธฐ๋ณธ์ ์ธ ํธ์ ํต๋ณด ๊ณผ์ ์ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.
โ ํด๋ผ์ด์ธํธ๋ ํธ์ ํต๋ณด ์๋ฒ์ ์ ์ํ์ฌ, ๋จ๋ง ๊ธฐ๋ณธ ์ ๋ณด๋ฅผ ์๋ฒ์ ๋ฑ๋กํ๊ณ ์ฐ๊ฒฐ ์ํ๋ฅผ
์ ์งํ๋ค.
โก ์๋ฒ๋ ๋ฉ์์ง ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ํด๋ผ์ด์ธํธ์ Push ๋ฐฉ์์ผ๋ก ๋ฉ์์ง๋ฅผ ์ ์กํ๋ค.
โข ํด๋ผ์ด์ธํธ๋ ์๋ฒ๋ก๋ถํฐ ์ ์ก๋ ๋ฉ์์ง๋ฅผ ์ฌ์ฉ์์๊ฒ ํต๋ณด๋ฅผ ํ๋ค.
3 ํ๋ก์ ํธ ๊ตฌ์ฑ
์๋ฒ์ ํด๋ผ์ด์ธํธ ๋ชจ๋์ ๋ชจ๋ ์ดํด๋ฆฝ์ค ๊ธฐ๋ฐ์ ์๋ฐ ํ๋ก์ ํธ์ด๋ค.
๊ตฌ๋ถ ํ๋ก์ ํธ๋ช
์ค๋ช
์คํ์์ค ๋ผ์ด์ ์ค
์๋ฒ androidpn-server Java ๊ธฐ๋ฐ ์์ผ์๋ฒ ํํ์ ํธ์ ํต๋ณด GPL 2.0
์๋ฒ ์ ํ๋ฆฌ์ผ์ด์
ํด๋ผ์ด์ธํธ androidpn-client ์๋๋ก์ด๋ ํ๋ซํผ์ฉ ํธ์ํต๋ณด Apache License 2.0
ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐฐํฌ ๋ชจ๋
androidpn-demoapp ๊ฐ๋ฐ์์ฉ ์ํ ์ ํ๋ฆฌ์ผ์ด์
3.1 ์๋ฒ (androidpn-server)
ํธ์ ํต๋ณด ์๋ฒ๋ ๊ตฌ๋์ ์ํด Java SE 6 ๋ฎํ์์ ํ์๋ก ํ๋ฉฐ, Spring ํ๋ ์์ํฌ๋ฅผ ์ด์ฉํด ํด๋์ค๊ฐ
์์กด์ฑ ์ฃผ์
์ ํ๊ณ MINA ํ๋ ์์ํฌ๋ฅผ ์ด์ฉํ์ฌ ๊ตฌ์ฑํ ์์ผ ์๋ฒ์ด๋ค. ๋ฐ์ดํฐ ํต์ ๋ฐฉ์์ XML
์คํธ๋ฆฌ๋ฐ ๋ฐฉ์์ XMPP ํ๋กํ ์ฝ์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ, XMPP ์๋ฒ ์คํ์ ๊ตฌํํ๊ณ ์๋ค. ๋ํ Jetty ์๋ธ๋ฆพ
์ปจํ
์ด๋๋ฅผ ๋ด์ฅํ์ฌ ๊ด๋ฆฌ์ ์น์ฝ์ ์ ํ๋ฆฌ์ผ์ด์
์ ํฌํจํ๊ณ ์๋ค.
โ 2010 Moduad 4
- 5. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
3.1.1 ์๋ฒ ์ํคํ
์ณ
3.1.2 ์๋ฒ ์ฃผ์ ๋ชจ๋
๏ฌ IO Handler
- XML ํฌ๋งท์ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ํถ๋ค๋ฆฟ
๏ฌ Stanza Handler
- XMPP ๊ธฐ๋ณธ ํต์ ๋จ์์ธ Stanza ๋ฐ ํด๋ผ์ด์ธํธ์์ ์ฐ๊ฒฐ ํน์ง์ ํถ๋ค๋ฆฟ
๏ฌ IQ Handler
- IQ Stanza ๋ฐ์ดํฐ๋ฅผ ํด์ํ๊ณ ํ์
๋ณ ๋ฐ์ดํฐ๋ฅผ ํถ๋ค๋ฆฟ
๏ฌ Session Manager
- ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ ์ธ์
๋ค์ ์ ๋ฐ์ ์ผ๋ก ๊ด๋ฆฌ
๏ฌ Auth Manager
- ํด๋ผ์ด์ธํธ ์ฌ์ฉ์ ๋ฑ๋ก ๋ฐ ๋ก๊ทธ์ธ ๋ฑ ์ธ์ฆ ๊ด๋ฆฌ
๏ฌ Presence Manager
- ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ ์ํ(Presence) ์ ๋ณด๋ฅผ ๊ด๋ฆฌ
๏ฌ Notification Manager
- ์๋ฒ ์ด๋ฒคํธ์ ๋ฐ๋ผ ํด๋ผ์ด์ธํธ๋ก Push ๋ฉ์์ง ์ ์ก์ ๋ด๋น
๏ฌ Admin Console
- ํด๋ผ์ด์ธํธ์ ๋ฑ๋ก ์ ๋ณด, ์ ์ ์ํ ๋ชจ๋ํฐ๋ฆฟ ๋ฐ Push ๋ฉ์์ง ์ ์ก UI๋ฅผ ๊ฐ์ง ๊ด๋ฆฌ์์ฉ
์น์ ํ๋ฆฌ์ผ์ด์
๋ชจ๋
3.1.3 ์๋ฒ ๊ฐ๋ฐ ํ๋ซํผ ๋ฐ ๋๊ตฌ
๏ฌ Java SE 6
- ์๋ฐ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์
๊ตฌ๋์ ์ํ ๋ฎํ์ ์์ง
๏ฌ Spring Framework
- ์๋ฐ ํด๋์ค๊ฐ ์์กด์ฑ์ ์ฐ๊ฒฐํด์ฃผ๋ DI (Dependency Injection) ์ปจํ
์ด๋ ํ๋ ์์ํฌ
โ 2010 Moduad 5
- 6. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
๏ฌ MINA
- ์๋ฐ NIO ๋คํธ์ํฌ ์๋ฒ ๊ตฌํ์ ์ํ ๋คํฌ์ํฌ ํ๋ ์์ํฌ
๏ฌ Jetty
- ๊ด๋ฆฌ์ ์น์ฝ์ ๋ชจ๋์ ์ํ ์๋ฐ ๋ด์ฅํ ์๋ธ๋ฆพ ์ปจํ
์ด๋
๏ฌ Hibernate
- ๋ฐ์ดํฐ ์์์ฑ์ ์ํ ORM (Object-Relational Mapping) ํ๋ ์์ํฌ
๏ฌ HSQLDB
- ์ฌ์ฉ์ ๋ฐ์ดํฐ ์ ์ฅ์ ์ํ ์๋ฐ ๋ด์ฅํ DB (MySQL ๋ฑ ๋ค๋ฅธ DB๋ ์ฌ์ฉ ๊ฐ๋ฅ)
๏ฌ Ant / Maven
- ํ๋ก์ ํธ ์์ค ์ปดํ์ผ ๋ฐ ๋น๋ ๋๊ตฌ
๏ฌ JUnit
- ์๋ฐ ํด๋์ค ๋จ์ ํ
์คํธ ํ๋ ์์ํฌ
3.1.4 ๋๋ ํ ๋ฆฌ ๋ฐ ์๋ฐ ํจํค์ง ๊ตฌ์ฑ
๏ฌ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ
์๋ฒ ํ๋ก์ ํธ ์์ค๋ Maven 2.0 ๊ธฐ๋ฐ์ ๋ฉํฐ ๋ชจ๋ ํ๋ก์ ํธ์ด๋ฉฐ ๋ค์๊ณผ ๊ฐ์ 3๊ฐ์ ์ฃผ์ ๋ชจ๋๋ก ๋๋ ์
์์ผ๋ฉฐ, ๋๋ ํ ๋ฆฌ๋ช
๊ณผ ๋์ผํ๋ค.
๋๋ ํ ๋ฆฌ๋ช
์ค๋ช
๋น๋ ํ์ผ
console ๊ด๋ฆฌ์ ์ฝ์ ๋ชจ๋์ด๋ฉฐ ์น์ ํ๋ฆฌ์ผ์ด์
์ด๋ฉฐ, ์คํ๋ฆฟ MVC console.war
๊ธฐ๋ฐ์ ๊ตฌ์กฐ๋ก ๋์ด์๋ค.
Server ํธ์ ํต๋ณด ์๋ฒ ํต์ฌ ๋ชจ๋์ด๋ฉฐ, Spring + MINA ํตํฉ๋ androidpn-server-0.4.x.jar
์์ผ ์๋ฒ์ด๋ฉฐ, XMPP ์๋ฒ๋ฅผ ๊ตฌํํ๊ณ ์๋ค.
starter ์๋ฒ์ ์์์ํค๊ธฐ ์ํ ๋ชจ๋๋ก, ํด๋์ค ๋ก๋ฉ์ ๋ด๋นํ๋ค. starter.jar
๏ฌ ์๋ฐ ํจํค์ง
์๋ฒ ํ๋ก์ ํธ์ ์๋ฐ ํด๋์ค๋ ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ํจํค์ง๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
ํจํค์ง๋ช
์ค๋ช
org.androidpn.server.container ๊ด๋ฆฌ์ ์ฝ์ ์น๋ชจ๋์ ์์ํ๊ธฐ ์ํ ์ปจํ
์ด๋ ํด๋์ค
org.androidpn.server.dao Data Access Object ์ธํฐํ์ด์ค
org.androidpn.server.dao.hibernate Data Access Object ๊ตฌํ ํด๋์ค
org.androidpn.server.model DB ์ํฐํฐ๋ฅผ ํํํ๋ ๋๋ฉ์ธ ๊ฐ์ฒด ๋ชจ๋ธ ํด๋์ค
org.androidpn.server.service ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๋ ์๋น์ค ์ธํฐํ์ด์ค
org.androidpn.server.service.impl ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๋ ์๋น์ค ๊ตฌํ ํด๋์ค
org.androidpn.server.starter ์๋ฒ ์์์ ์ํ ํด๋์ค
org.androidpn.server.util ์ ํธ๋ฆฌํฐ ํด๋์ค
org.androidpn.server.xmpp XMPP ์๋ฒ๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ๋ด์ ๋ฒ ์ด์ค ํจํค์ง
org.androidpn.server.xmpp.auth ์ฌ์ฉ์ ์ธ์ฆ์ ๋ด๋นํ๋ ํด๋์ค
org.androidpn.server.xmpp.codec MINA ๊ธฐ๋ฐ์ XMPP ๋ฉ์์ง ์ฝ๋ฑ ํด๋์ค
โ 2010 Moduad 6
- 7. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
org.androidpn.server.xmpp.handler XMPP Stanza๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ฐ์ข
ํถ๋ค๋ฌ
org.androidpn.server.xmpp.net MINA ๊ธฐ๋ฐ์ ํต์ฌ ์์ผ ๋คํธ์ํน์ ๋ด๋นํ๋ ํด๋์ค
org.androidpn.server.xmpp.presence XMPP์ ์ฌ์ฉ์ ์ํ์ ๋ณด(Presence)๋ฅผ ์ฒ๋ฆฌํ๋ ํด๋์ค
org.androidpn.server.xmpp.push ํด๋ผ์ด์ธํธ๋ก ํธ์ ๋ฉ์์ง๋ฅผ ์ ์ก์ ์ฒ๋ฆฌํ๋ ํด๋์ค
org.androidpn.server.xmpp.router ์์๋ Stanza ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ํถ๋ค๋ฌ๋ก ๋ณด๋ด๋ ํด๋์ค
org.androidpn.server.xmpp.session ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ ์ธ์
์ ๊ด๋ฆฌํ๊ธฐ ์ํ ํด๋์ค
3.2 ํด๋ผ์ด์ธํธ (androidpn-client)
ํธ์ ํต๋ณด ํด๋ผ์ด์ธํธ ๋ชจ๋์ ์๋๋ก์ด๋ OS 1.5 ์ด์์ ํ๋ซํผ์ ํ์๋ก ํ๋ฉฐ, XMPP ํด๋ผ์ด์ธํธ ํํ๋ก์
์๋ฒ์ XML ์คํธ๋ฆฌ๋ฐ ๊ธฐ๋ฐ ํต์์ ํ๋ค.
3.2.1 ํด๋ผ์ด์ธํธ ์ํคํ
์ณ
3.2.2 ํด๋ผ์ด์ธํธ ์ฃผ์ ๋ชจ๋
๏ฌ Service Manager
- ํด๋ผ์ด์ธํธ ํ๊ฒฝ ์ค์ ๋ก๋ฉ ๋ฐ ํต์ง ์๋น์ค๋ฅผ ์์/์ข
๋ฃ๋ฅผ ๋ด๋นํ๋ ๊ธฐ๋ณธ ๊ด๋ฆฌ์ ํด๋์ค
๏ฌ Notification Service
- ์๋ฒ๋ก๋ถํฐ ๋ฉ์์ง ์์์ ์ํด ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด ์ข
๋ฃ๋์ด๋ ๋ฐฑ๊ทธ๋ผ์ฒ๋๋ก ์ํ๋๋
์๋๋ก์ด๋ Service๋ฅผ ์์ํ ์๋น์ค
๏ฌ XMPP Manager
- XMPP ํด๋ผ์ด์ธํธ ๋ชจ๋๋ก ํธ์ ํต๋ณด ์๋ฒ๋ก์ ์ฐ๊ฒฐ, ์ฌ์ฉ์ ๋ฑ๋ก, ๋ก๊ทธ์ธ ๋ฑ์ ๋ด๋น
๏ฌ Connection Listener
- ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์ฐ๊ฒฐ์ ์ง์์ฑ์ ์ ์งํ๊ธฐ ์ํ ์ฐ๊ฒฐ ์ํ๋ฅผ ๋ชจ๋ํฐ๋ฆฟ
๏ฌ Notification Packet Listener
- ์๋ฒ๋ก๋ถํฐ์ Notification ํจํท์ ์์์ ๋ด๋นํ๊ณ , ํต์ง๋ฅผ ์ํ ๋ธ๋ก๋์บ์คํธ ์ํ
โ 2010 Moduad 7
- 8. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
๏ฌ Notification Receiver
- ์๋ฒ๋ก๋ถํฐ ์์ ํ ๋ธ๋ก๋์บ์คํธ๋ Notification ๋ฉ์์ง ์ ๋ณด๋ฅผ ๋ฐ์ ์ฒ๋ฆฌ
๏ฌ Notifier
- Notification Manager๋ฅผ ์ด์ฉํ์ฌ ์์๋ ๋ฉ์์ง๋ฅผ ์ฌ์ฉ์์๊ฒ ํต๋ณด
๏ฌ Connectivity Receiver
- ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์ฐ๊ฒฐ์ ์ง์์ฑ์ ์ํด ๋คํธ์ํฌ ์ํ๋ฅผ ๋ชจ๋ํฐ๋ฆฟ
๏ฌ Phone State Listener
- ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์ฐ๊ฒฐ์ ์ง์์ฑ์ ์ํด ์ ํ๊ธฐ ๋ฐ์ดํฐ ์ฐ๊ฒฐ ์ํ๋ฅผ ๋ชจ๋ํฐ๋ฆฟ
๏ฌ Notification Details Activity
- ์ฌ์ฉ์์๊ฒ ํต๋ณด๋ ๋ฉ์์ง์ ์์ธ ์ ๋ณด ๋ทฐ๋ฅผ ์ํ Activity
๏ฌ Notification Settings Activity
- ํด๋ผ์ด์ธํธ์ ๋ฉ์์ง ์์, ์๋ฆฌ, ์ง๋ ์ฌ๋ถ ๋ฑ์ ์ค์ ๋ทฐ๋ฅผ ์ ๊ณตํ๋ Activity
3.2.3 ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ ํ๋ซํผ ๋ฐ ๋๊ตฌ
๏ฌ Android SDK
- ์๋๋ก์ด๋ ์ ํ๋ฆฌ์ผ์ด์
๊ตฌ๋ ํ๋ซํผ (์๋๋ก์ด๋ OS 1.5 ์ด์ ์ง์)
- Service, NotificaitonManager, BroadcastReceiver ๋ฑ
๏ฌ Smack
- XMPP ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๏ฌ Ant
- ํ๋ก์ ํธ ์์ค ์ปดํ์ผ ๋ฐ ๋น๋ ๋๊ตฌ
3.2.4 ๋๋ ํ ๋ฆฌ ๋ฐ ์๋ฐ ํจํค์ง ๊ตฌ์ฑ
๏ฌ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ
ํด๋ผ์ด์ธํธ ํ๋ก์ ํธ๋ ์ดํด๋ฆฝ์ค ๊ธฐ๋ฐ์ ์๋๋ก์ด๋ ํ๋ก์ ํธ๋ก ๊ธฐ๋ณธ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ์ ๋์ผํ๋ค.
๋๋ ํ ๋ฆฌ๋ช
์ค๋ช
src ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ค์ ๋ฐ๋ชจ ์ ํ๋ฆฌ์ผ์ด์
์์ค ํฌํจ
lib ํ๋ก์ ํธ ์ฐธ์กฐ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก XMPP ํด๋ผ์ด์ธํธ smack ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌํจ
res ์๋๋ก์ด๋ ๋ฆฌ์์ค ํ์ผ๋ค๋ก ํด๋ผ์ด์ธํธ ์ค์ ํ์ผ์ธ android.properties ๋ ํฌํจ
Assets ์๋๋ก์ด๋ assets ๋๋ ํ ๋ฆฌ (์ฌ์ฉ๋์ง ์์)
๏ฌ ์๋ฐ ํจํค์ง
ํด๋ผ์ด์ธํธ ํ๋ก์ ํธ์ ์๋ฐ ํด๋์ค๋ ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ํจํค์ง๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
ํจํค์ง๋ช
์ค๋ช
org.androidpn.client ํธ์ ํต๋ณด ํด๋ผ์ด์ธํธ ํด๋์ค. XMPP ํด๋ผ์ด์ธํธ ๋ฐ ์๋๋ก์ด๋ Service,
Activity ๋ฑ์ ํฌํจ
org.androidpn.demoapp ๋ฐ๋ชจ์ฉ ์ ํ๋ฆฌ์ผ์ด์
ํด๋์ค
โ 2010 Moduad 8
- 9. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
3.3 ๋ฐ๋ชจ ์ ํ๋ฆฌ์ผ์ด์
(androidpn-demoapp)
ํธ์ ํต๋ณด ํด๋ผ์ด์ธํธ ๋ชจ๋์ ์ด์ฉํ์ฌ ์๋๋ก์ด๋ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐ์ ์ํ ๊ฐ์ด๋์ฉ ์ํ
์๋๋ก์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ด๋ค. ํด๋ผ์ด์ธํธ ํ๋ก์ ํธ์์ ์์ฑ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋(androidpn-client.jar)์
ํฌํจํ๊ณ ์๋ค.
4 ํ๋ก์ ํธ ์ปดํ์ผ ๋ฐ ๋น๋
4.1 ์๋ฒ ์ปดํ์ผ ๋ฐ ๋น๋
์๋ฒ ์ ํ๋ฆฌ์ผ์ด์
์์ค๋ฅผ ์ปดํ์ผํ๊ธฐ ์ํด์๋ JDK 1.5 ์ด์๊ณผ Maven 2.0์ ํ์๋ก ํ๋ค. ๋ค์๊ณผ ๊ฐ์
์ ์ฐจ๋ก ์ํํ๋ค.
โ ํ๋ก์ ํธ ์๋ฒ ์์ค ๋ฐฐํฌ ํ์ผ(androidpn-server-0.4.x.zip ํํ)์ ์ค๋นํ๊ณ , ์์ถ์ ํผ๋ค.
โก ์ ํ๋กํํธ์์ mvn install ๋ช
๋ น์ ์ํํ์ฌ ๊ธฐ๋ณธ ๋ชจ๋๋ค์ ์ปดํ์ผ, ํ
์คํธ ๋ฐ ๋น๋ํ๋ค. ๋ค์๊ณผ
์ ์ฌํ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์๋ค.
C:projectsandroidpn-server-0.5.0>mvn install
[INFO] Scanning for projects...
[INFO] Reactor build order:
[INFO] Andorid Push Notification
[INFO] Unnamed - org.androidpn:server:jar:0.5.0
[INFO] Unnamed - org.androidpn:starter:jar:0.5.0
[INFO] Unnamed - org.androidpn:console:war:0.5.0
[INFO] ------------------------------------------------------------------------
โฆ ์ค๋ต โฆ
[INFO] Reactor Summary:
[INFO] ------------------------------------------------------------------------
[INFO] Andorid Push Notification ............................. SUCCESS [1.562s]
[INFO] Unnamed - org.androidpn:server:jar:0.5.0 .............. SUCCESS [9.109s]
[INFO] Unnamed - org.androidpn:starter:jar:0.5.0 ............. SUCCESS [0.812s]
[INFO] Unnamed - org.androidpn:console:war:0.5.0 ............. SUCCESS [2.109s]
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 13 seconds
[INFO] Finished at: Wed Oct 13 02:15:18 KST 2010
[INFO] Final Memory: 47M/114M
[INFO] ------------------------------------------------------------------------
โข ์ ํ๋กํํธ์์ mvn assembly:assembly ๋ช
๋ น์ ์ํํ์ฌ, ์๋ฒ ํ๋ก๊ทธ๋จ ๋ฐ์ด๋๋ฆฌ ๋ฐ ์์ค ๋ฐฐํฌ
ํ์ผ์ ์์ฑํ๋ค.
โ 2010 Moduad 9
- 10. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
C:projectsandroidpn-server-0.5.0>mvn assembly:assembly
[INFO] Scanning for projects...
[INFO] Reactor build order:
[INFO] Andorid Push Notification
[INFO] Unnamed - org.androidpn:server:jar:0.5.0
[INFO] Unnamed - org.androidpn:starter:jar:0.5.0
[INFO] Unnamed - org.androidpn:console:war:0.5.0
[INFO] Searching repository for plugin with prefix: 'assembly'.
[INFO] ------------------------------------------------------------------------
โฆ ์ค๋ต โฆ
[INFO] Building zip: C:projectsandroidpn-server-0.5.0targetandroidpn-server-0.5.0-bin.zip
[INFO] Building zip: C:projectsandroidpn-server-0.5.0targetandroidpn-server-0.5.0-src.zip
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14 seconds
[INFO] Finished at: Wed Oct 13 02:23:30 KST 2010
[INFO] Final Memory: 27M/64M
[INFO] ------------------------------------------------------------------------
โฃ ์ ์์ ์ผ๋ก ์ํ์ด ๋๋ฉด target ๋๋ ํ ๋ฆฌ์ 2๊ฐ์ zip ํ์ผ์ด ์์ฑ๋๋ค. ์ด์ค ์๋ฒ ๋ฐ์ด๋๋ฆฌ ์คํ
ํ๋ก๊ทธ๋จ์ androidpn-server-0.4.x-bin.zip ํํ๋ก ๋น๋๋ ํ์ผ์ด๋ค.
4.2 ํด๋ผ์ด์ธํธ ์ปดํ์ผ ๋ฐ ๋น๋
ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์
์์ค๋ฅผ ์ปดํ์ผํ๊ธฐ ์ํด์๋ JDK 1.5 ์ด์๊ณผ Android 1.5 ์ด์ SDK ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋ฐ ๋น๋๋ฅผ ์ํด์ Ant 1.7 ์ด์์ ํ์๋ก ํ๋ค. ๋ค์๊ณผ ๊ฐ์ ์ ์ฐจ๋ก ์ํํ๋ค.
โ ํ๋ก์ ํธ ํด๋ผ์ด์ธํธ ์์ค ๋ฐฐํฌ ํ์ผ(androidpn-client-0.4.x.zip ํํ)์ ์ค๋นํ๊ณ , ์์ถ์ ํผ๋ค.
โก Ant ๋น๋์ ์ฌ์ฉ๋๋ build.properties ํ์ผ์ ์ด์ด, Android SDK ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์น๋ฅผ ํ๊ฒฝ์ ๋ง๊ฒ
์์ ํด์ค๋ค.
# Android SDK
android.sdk.jar=c:/Android/android-sdk/platforms/android-3/android.jar
โข ์ ํ๋กํํธ์์ ant build ๋ช
๋ น์ ์ํํ์ฌ, ํด๋ผ์ด์ธํธ ๋ฐ์ด๋๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ์์ค ๋ฐฐํฌ ํ์ผ์
์์ฑํ๋ค.
C:projectsandroidpn-client-0.5.0>ant build
Buildfile: build.xml
clean:
compile:
โ 2010 Moduad 10
- 11. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
[mkdir] Created dir: C:projectsandroidpn-client-0.5.0targetclasses
[javac] Compiling 16 source files to C:projectsandroidpn-client-0.5.0targetclasses
build:
[jar] Building jar: C:projectsandroidpn-client-0.5.0targetandroidpn-client-0.5.0.jar
[mkdir] Created dir: C:projectsandroidpn-client-0.5.0targetandroidpn-client-0.5.0
[copy] Copying 33 files to C:projectsandroidpn-client-0.5.0targetandroidpn-client-0.5.0
[copy] Copied 15 empty directories to 1 empty directory under C:projectsandroidpn-
client-0.5.0targetandroidpn-client-0.5.0
[zip] Building zip: C:projectsandroidpn-client-0.5.0targetandroidpn-client-0.5.0.zip
[delete] Deleting directory C:projectsandroidpn-client-0.5.0targetandroidpn-client-0.5.0
BUILD SUCCESSFUL
Total time: 1 second
โฃ ์ ์์ ์ผ๋ก ์ํ์ด ๋๋ฉด target ๋๋ ํ ๋ฆฌ์ 1๊ฐ์ jar ํ์ผ๊ณผ 1๊ฐ์ zip ํ์ผ์ด ์์ฑ๋๋ค. ์ด์ค
ํด๋ผ์ด์ธํธ ๋ฐ์ด๋๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ androidpn-client-0.4.x.jar ํํ๋ก ๋น๋๋ ํ์ผ์ด๋ฉฐ, ์ด๋
์๋๋ก์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐ์ ์ฌ์ฉ๋๋ค.
5 ์๋ฒ ์ค์น ๋ฐ ๊ตฌ๋
5.1 ์๋ฒ ์ค์น
์๋ฒ ์ ํ๋ฆฌ์ผ์ด์
์ ๋น๋ ์ ํ๋์ zip ํํ์ ์์ถํ์ผ๋ก ์์ฑ์ด ๋๋ฉฐ, ์ํ๋ ์์น์ ํ๋ฉด ์ค์น๊ฐ ๋๋ค.
5.1.1 ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
์๋ฒ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค์๊ณผ ๊ฐ์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๋๋ ํ ๋ฆฌ ์ค๋ช
bin ์๋ฒ ์คํ ์คํฌ๋ฆฝํธ๊ฐ ์์ผ๋ฉฐ, Windows ๋ฐ Unix ์ฉ 2๊ฐ์ ์คํฌ๋ฆฝํธ๊ฐ ์๋ค.
conf ๊ฐ์ข
ํ๊ฒฝ ์ค์ ํ์ผ๋ค์ด ์์ผ๋ฉฐ, ์ผ๋ถ ํ์ผ๋ค์ ์ฌ์ฉ์ ์๋ฒ ํ๊ฒฝ์ ๋ง๊ฒ ์์ ์
ํด์ค์ผ ํ๋ค.
console ๊ด๋ฆฌ์ ์ฝ์ ์น์ ํ๋ฆฌ์ผ์ด์
๋ชจ๋์ด๋ค.
lib ํต์ฌ anroidpn ์๋ฒ ๋ชจ๋์ ๋น๋กฏํ์ฌ, ๊ฐ์ข
์ฐธ์กฐ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์์นํ๋ค.
5.1.2 ์๋ฒ ํ๊ฒฝ ์ค์
์ค์น๋ ์๋ฒ๋ฅผ ์ ์์ ์ผ๋ก ๊ตฌ๋ํ๊ธฐ ์ํด์๋ ๋ช ๊ฐ์ง ํ๊ฒฝ ์ค์ ์ด ํ์ํ๋ค. ํ๊ฒฝ์ค์ ํ์ผ์ conf ๋๋ ํ ๋ฆฌ
์์ ์์ผ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ์ค์ ์ด ํ์ํ๋ค.
๏ฌ ์๋ฒ ๊ธฐ๋ณธ ์ค์ (config.properties)
์๋ฒ ๊ด๋ฆฌ์ ์ฝ์์ ์ ์์ ์ผ๋ก ๊ตฌ๋ํ๊ธฐ ์ํด์ ์๋ฒ ํธ์คํธ๋ช
๊ณผ ํฌํธ๋ฒํธ๋ฅผ ์ง์ ํ๋ค.
โ 2010 Moduad 11
- 12. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
admin.console.host=127.0.0.1
admin.console.port=7070
๏ฌ DB ์ ๋ณด ์ค์ (jdbc.properties, hibernate.xml)
๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ๋ฐ ํ๊ฒฝ์ ์ํด HSQLDB๋ฅผ ์ด์ฉํ๋, ์ฌ์ฉ ์๋น์ค๋ฅผ ์ํด์ MySQL, Oracle ๋ฑ์ผ๋ก
๋ฐ๊ฟ ์ ์๋ค.
# JDBC Configuration
jdbcDriverClassName=org.hsqldb.jdbcDriver
jdbcUrl=jdbc:hsqldb:db/androidpn;shutdown=true
jdbcUsername=sa
jdbcPassword=
DB ์ ๋ณด๊ฐ ๋ฐ๋ ๊ฒฝ์ฐ, ORM ํ๋ ์์ํฌ์ธ Hibernate ์ค์ ํ์ผ์ DB ์ ๋ณด๋ ๋ง์ถฐ์ค๋ค.
<!-- Database connection settings -->
<property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>
<property
name="hibernate.connection.url">jdbc:hsqldb:db/androidpn;shutdown=true</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
5.2 ์๋ฒ ๊ตฌ๋
์๋ฒ ์์์ ์ํ ์์ ์คํฌ๋ฆฝํธ๋ bin ๋๋ ํ ๋ฆฌ์ ์๋์ฐ ๋ฐ ์ ๋์ค์ฉ ์คํฌ๋ฆฝํธ๊ฐ ์๋ค. ์๋ฒ ๊ตฌ๋์
์ํด์๋ Java ๋ฎํ์ 6.0 ์ด์์ด ์์คํ
์ ์ค์น๋์ด ์์ด์ผ ํ๋ค. JAVA_HOME ๊ฐ์ ์คํฌ๋ฆฝํธ ์์ ๋ง๊ฒ
์ค์ ํด ์ฃผ๊ฑฐ๋ ์์คํ
ํ๊ฒฝ์ ๋ณด์ ์ค์ ํด ์ฃผ์ด์ผ ํ๋ค.
์๋๋ ์๋์ฐ ํ๊ฒฝ์์ ์๋ฒ ์์์ ๊ตฌ๋ ์์ด๋ค.
C:androidpn-server-0.5.0bin>run
{DEBUG} [2010-10-14 13:00:06,187] <org.androidpn.server.xmpp.XmppServer> : base.dir=..
{DEBUG} [2010-10-14 13:00:06,312] <org.apache.commons.configuration.ConfigurationUtils> :
ConfigurationUtils.locate(): b
ase is C:androidpn-server-0.5.0bin, name is config.xml
{DEBUG} [2010-10-14 13:00:06,343] <org.apache.commons.configuration.ConfigurationUtils> :
Loading configuration from the context classpath (config.xml)
...์ค๋ต...
{INFO } [2010-10-14 13:00:14,562] <org.mortbay.log> : Started
SelectChannelConnector@127.0.0.1:7070
โ 2010 Moduad 12
- 13. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
{DEBUG} [2010-10-14 13:00:14,562] <org.androidpn.server.container.AdminConsole> : Admin
console started.
{INFO } [2010-10-14 13:00:14,562] <org.androidpn.server.xmpp.XmppServer> : Admin console
listening at http://127.0.0.1:7070
{INFO } [2010-10-14 13:00:14,562] <org.androidpn.server.xmpp.XmppServer> : XmppServer
started: 127.0.0.1
{INFO } [2010-10-14 13:00:14,562] <org.androidpn.server.xmpp.XmppServer> : Androidpn Server
v0.5.0
์๋ฒ๊ฐ ์ ์์ ์ผ๋ก ๊ตฌ๋๋์์ผ๋ฉฐ, ์น๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด์ http://ํธ์คํธ๋ช
:ํฌํธ๋ฒํธ ์ฃผ์๋ฅผ ์ ์ํ์ฌ ๊ด๋ฆฌ์
์ฝ์์ ๋ณผ ์ ์์ ๊ฒ์ด๋ค. (์คํฌ๋ฆฎ์ท ์ฐธ์กฐ).
6 ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ
์๋๋ก์ด๋ ํธ์ ํต๋ณด ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ๊ธฐ ์ํด์๋ ์ํ
์ ํ๋ฆฌ์ผ์ด์
(androidpn-demoapp) ํ๋ก์ ํธ๋ฅผ ๋ณด๋ฉด ๋น ๋ฅด๊ฒ ์ฐธ์กฐํ ์ ์๋ค.
6.1 ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ
์ดํด๋ฆฝ์ค IDE์์ ์๊ท ์๋๋ก์ด๋ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ํ, ํธ์ ํต๋ณด ํด๋ผ์ด์ธํธ ํ๋ก์ ํธ(androidpn-
client)์์ ๋น๋ํ ํด๋ผ์ด์ธํธ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(androidpn-client.jar)๋ฅผ ํ๋ก์ ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ถ๊ฐํ๋ค.
6.2 ํด๋ผ์ด์ธํธ ํ๊ฒฝ ์ค์ ํ์ผ
์๋๋ก์ด๋ ํ๋ก์ ํธ์ ๊ธฐ๋ณธ ํด๋์ธ res ํด๋ ๋ฐ์ raw ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑ ํ ๊ทธ๊ณณ์ adroidpn.peoperties
ํ์ผ์ ์์ฑํ๋ค. ์ด ํ๋กํผํฐ ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ ์๋ฒ์ ํธ์คํธ์ ํฌํธ๋ฒํธ(๊ธฐ๋ณธ:5222) ์ ๋ณด๋ฅผ
์
๋ ฅํ์ฌ ํธ์งํ๋ค.
xmppHost=192.168.0.5
xmppPort=5222
6.3 ํด๋ผ์ด์ธํธ ์๋น์ค ์์ ์ฝ๋
๏ฌ ํด๋ผ์ด์ธํธ ๋ฉ์ธ Activity ํด๋์ค ํ์ผ์ onCreate() ๋ฉ์๋ ์์ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
public void onCreate(Bundle savedInstanceState) {
Log.d("DemoAppActivity", "onCreate()...");
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
โ 2010 Moduad 13
- 14. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
// Start the service
ServiceManager serviceManager = new ServiceManager(this);
serviceManager.setNotificationIcon(R.drawable.notification);
serviceManager.startService();
}
๏ฌ ํธ์ ํต๋ณด ์์ ์ฌ๋ถ ๋ฐ ์ฌ์ฒ๋, ์ง๋์ ์ค์ ํ๋ Settings Activity๋ฅผ ํ์ํ๊ธฐ ์ํด์๋ ๋ฒํบ ๋ฑ์
ํด๋ฆญ ์ด๋ฒคํธ์ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์ฝ์
ํ๋ฉด ๋๋ค.
Button okButton = (Button) findViewById(R.id.btn_settings);
okButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
ServiceManager.viewNotificationSettings(DemoAppActivity.this);
}
});
๏ฌ AndroidManifest.xml ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ์๋น์ค ๋ฐ Activity ํด๋์ค๋ฅผ ๋ฑ๋กํด ์ค๋ค.
<activity android:name="org.androidpn.client.NotificationDetailsActivity"
android:label="Notification Details">
</activity>
<activity android:name="org.androidpn.client.NotificationSettingsActivity"
android:label="Notification Settings">
</activity>
<service android:enabled="true"
android:name="org.androidpn.client.NotificationService"
android:label="NotificationService">
<intent-filter>
<action android:name="org.androidpn.client.NotificationService" />
</intent-filter>
</service>
7 ํ๋ก์ ํธ ์คํฌ๋ฆฐ์ท
7.1 ์๋ฒ (๊ด๋ฆฌ์ ์น ์ฝ์)
๏ฌ ํธ์ ํต๋ณด ์๋ฒ์ ๊ด๋ฆฌ์ ์ฝ์ ์ด๊ธฐํ๋ฉด์ด๋ค.
โ 2010 Moduad 14
- 15. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
๏ฌ ์๋ฒ์ ๋ฑ๋ก๋ ํด๋ผ์ด์ธํธ ์ฌ์ฉ์ ๋ชฉ๋ก์ด๋ค.
๏ฌ ํ์ฌ ์ ์๋ ํด๋ผ์ด์ธํธ ์ธ์
๋ชฉ๋ก์ด๋ค.
โ 2010 Moduad 15
- 16. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
๏ฌ ๋ชจ๋ ํด๋ผ์ด์ธํธ์ ํธ์ ๋ฉ์์ง ๋ธ๋ก๋์บ์คํธ๋ฅผ ํ ์ ์๋ค.
๏ฌ Username์ ์ง์ ํ์ฌ ํน์ ํด๋ผ์ด์ธํธ์๋ง ํธ์ ๋ฉ์์ง ์ ์กํ ์ ์๋ค.
โ 2010 Moduad 16
- 17. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
7.2 ํด๋ผ์ด์ธํธ (์๋๋ก์ด๋ ์ ํ๋ฆฌ์ผ์ด์
)
๏ฌ Android 1.5 (Cupcake) ์๋ฎฌ๋ ์ดํฐ์์ ํธ์ ๋ฉ์์ง๋ฅผ ์์ํ ํ๋ฉด์ด๋ค.
โ 2010 Moduad 17
- 18. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
๏ฌ Android 2.1 (รclair) ์๋ฎฌ๋ ์ดํฐ์์ ํธ์ ๋ฉ์์ง๋ฅผ ์์ํ ํ๋ฉด์ด๋ค.
๏ฌ ๋ฐ๋ชจ ์ ํ๋ฆฌ์ผ์ด์
๊ตฌ๋ ์ด๊ธฐํ๋ฉด ๋ฐ ๋ฉ์์ง ์์์ ์ํ Ticker ํ์ฑ ํ๋ฉด์ด๋ค.
๏ฌ ๋ฉ์์ง ์์ ๋ชฉ๋ก ํ๋ฉด ๋ฐ ์ด๋ฅผ ํฐ์นํ์ ๊ฒฝ์ฐ ์ ์ฒด ๋ฉ์์ง ์์ธ ๋ด์ฉ์ ๋ณผ ์ ์๋ค.
โ 2010 Moduad 18
- 19. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
๏ฌ ํธ์ ํต๋ณด ์ค์ ํ๋ฉด์์ ๋ฉ์์ง ์์์ฌ๋ถ ๋ฐ ์ฌ์ฒ๋, ์ง๋ ์ฌ๋ถ ์ค์ ํ ์ ์๋ค.
๏ฌ ์๋ฒ์์ URI ์ ๋ณด๋ฅผ ์ถ๊ฐ๋ก ์ ์กํ์ ๊ฒฝ์ฐ, ๋ฉ์์ง ๋ด์ฉ ํ์ธ ํ ํน์ ์นํ์ด์ง ๋ฐ ์ง๋ ์์น,
๊ฑธํ๊ฑธ๊ธฐ ๋ฑ์ ํ์ํ ์ ์๋ค. ์๋ ํ๋ฉด์ URI ์ ๋ณด์ http://www.dokdocorea.com,
geo:37.24,131.86, tel:111-222-333 ๊ฐ์ ๊ฐ๊ฐ ์ ์กํ ๊ฒฝ์ฐ์ด๋ค.
โ 2010 Moduad 19
- 20. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
8 ์ฃผ์ ๊ด๋ จ ๊ธฐ์
8.1 ํธ์ ํต๋ณด (Push Notification)๋?
8.1.1 ํธ์ ํต๋ณด๋?
๏ฌ ํธ์ ํต๋ณด๋ ๋จ๋ง ์์คํ
์์ ์ ํ๋ฆฌ์ผ์ด์
์ด ๋์ ์ค์ด์ง ์์
์ํ์์๋ ์๋ฒ๋ก๋ถํฐ โPushโ๋๋ ๋ฉ์์ง๋ฅผ Listenํ์ฌ ์์ํ ์
์๋ ๊ธฐ์ ์ด๋ค.
๏ฌ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์
์์ ๋ฐ์ํ๋ ์ฃผ์ ๋ด์ค ๋ฐ ์ด๋ฒคํธ ๋ฑ์
์ฌ์ฉ์์๊ฒ ์ ๋ฌํด ์ค ์ ์๋ ์๋จ์ด๋ค.
๏ฌ ์์์ ๋ง์ด ์๋นํ๋ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ง์์ ์ธ Polling์
ํ๋ Pull ๊ธฐ์ ์ ๋นํด ํจ์จ์ ์ธ ๊ธฐ์ ์ด๋ค.
8.1.2 ๋ชจ๋ฐ์ผ ํธ์ ํต๋ณด ์๋น์ค
๋ชจ๋ฐ์ผ ํ๋ซํผ ์
์ฒด ํํฉ
BlackBerry RIM 2002๋
๋ถํฐ Push Email ์๋น์ค๋ฅผ ์์์ผ๋ก ์์ฒด์ ์ผ๋ก ํธ์ ํต๋ณด
์๋น์ค๋ฅผ ์ง์
iPhone OS (iOS) Apple 2009๋
iPhone OS 3.0๋ถํฐ Apple Push Notification Service
(APNS)๋ฅผ ์ง์
Android Google Android 2.2 (Froyo)๋ถํฐ Cloud To Device Messaging (C2DM)์
ํตํด ์ง์ ์์
Windows Phone 7 Microsoft Microsoft Push Notification Service (MPNS) ์ง์๊ณผ ํจ๊ป ์ถ์ ์์
โ 2010 Moduad 20
- 21. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
8.2 Push vs. Pull
๋คํธ์ํฌ ์์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ํต์ ๋ฐฉ์์์ ์์ฒญํ๋ ์ฃผ์ฒด๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด Push ์ Pull
๋ฐฉ์์ผ๋ก ๋๋ ์ ์๋ค.
8.2.1 Push Technology (Server Push)
๏ฌ ๋ฉ์์ง ์ ์ก ํธ๋์ญ์
์ด ์๋ฒ์์ ์์๋์ด ํด๋ผ์ด์ธํธ๋ก ์ ์ก๋๋ ํต์
๋ฐฉ์์ด๋ค.
๏ฌ XMPP, SMTP, HTTP Server Push (HTTP Streaming), Long Polling ๋ฑ
8.2.2 Pull Technology (Client Pull)
๏ฌ ํด๋ผ์ด์ธํธ์์ ๋ฐ์ดํฐ ์ ์ก ์์ฒญ์ด ์์๋์ด ์๋ฒ๋ก๋ถํฐ ์๋ต์ ๋ฐ๋
ํํ์ ํต์ ๋ฐฉ์์ด๋ค.
๏ฌ HTTP, POP3, IMAP, RSS Feeds ๋ฑ
8.3 XMPP (eXtensible Message and Presence Protocol)
8.3.1 XMPP๋?
๏ฌ ์ธํฐ๋ท ์์ ๋ ์ง์ ๊ฐ์ ํ์ฅ ๊ฐ๋ฅํ ๋ฉ์์ง์ ์ํ์ ๋ณด(Presence)๋ฅผ
์ค์๊ฐ์ผ๋ก ํต์ํ๊ธฐ ์ํ XML ๊ธฐ๋ฐ์ ์คํ ํ์ค ๊ธฐ์ ์ด๋ค.
๏ฌ 1999๋
Jabber ์คํ์์ค ์ปค๋ฎค๋ํฐ์ ์ํด ๊ฐ๋ฐ ๋์๊ณ , 2000๋
~2004๋
์ ๊ฑธ์ณ
IETF์ ์ํด ํ์คํ ๋์๋ค.
๏ฌ XMPP Standard Foundation (XSF)์ ํ์คํ ์์
์ ์ํด ์ง์์ ํ์ฅ๋๊ณ ์์ผ๋ฉฐ, XMPP Extension
Protocols (XEP)๋ก ๋ณ๋๋ก ํ์ฅ ์คํ์ ๊ด๋ฆฌํ๊ณ ์๋ค.
๏ฌ http://xmpp.org/ ์ธ์ดํธ์์ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค.
8.3.2 XMPP vs. HTTP
XMPP ํ๋กํ ์ฝ์ Push ๊ธฐ์ ์ ํต์๋ฐฉ์์ผ๋ก ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก๋ถํฐ์ ์ ๋ณด๋ฅผ ์
๋ฐ์ดํธํ๊ณ ์ ํ ๋,
HTTP ๊ธฐ๋ฐ์ Polling ๋ฐฉ์์ ๋นํด ํจ์ฌ ํด๋ผ์ด์ธํธ์ ์์ ์๋ชจ๊ฐ ์ ๊ณ ํจ์จ์ ์ด๋ค.
โ 2010 Moduad 21
- 22. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
8.3.3 XMPP๋ ๋คํฅํ ๋ถ์ผ์์ ์์ฉ๋๋ ํ๋กํ ์ฝ
๏ฌ Instant Messaging (IM)
๏ฌ Multi-User Chat
๏ฌ Voice and Video Conferencing
๏ฌ Real-time Collaboration
๏ฌ Social Networking
๏ฌ Microblogging
๏ฌ Lightweight Middleware
๏ฌ Content Syndication
8.4 ์๋๋ก์ด๋(Android)
8.4.1 ์๋๋ก์ด๋๋?
๏ฌ ์ฒ์์ฒด์ , ๋ฏธ๋ค์จ์ด ๋ฐ ํต์ฌ ์์ฉํ๋ก๊ทธ๋จ์ ํฌํจํ๋ ํด๋๊ธฐ๊ธฐ์ฉ ์ํํธ์จ์ด
์คํ
๏ฌ Google์ ์ํด ๊ฐ๋ฐ๋๊ณ ์คํ ์์คํ (2008๋
)
๏ฌ Linux ์ปค๋ ๊ธฐ๋ฐ์ ์ฒ์์ฒด์
๏ฌ Dalvik ๊ฐ์๋จธ์๊ณผ Java ์ธ์ด ๊ธฐ๋ฐ์ SDK ์ง์
๏ฌ Android Market์ ํตํด ์ ํ๋ฆฌ์ผ์ด์
๋ฐฐํฌ
โ 2010 Moduad 22
- 23. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
8.4.2 ์๋๋ก์ด๋๋ ์งํ ์ค
๏ฌ Cupcake(v1.5) ๏ Donut(v1.6) ๏ รclair(v2.0,v2.1) ๏ Froyo(v2.2) ๏ Gingerbread(3.0)
๏ฌ ํ์ฌ Andorid 2.2 (Froyo)๊น์ง ๋ฐํ๋์์ผ๋ฉฐ, ์ด OS ๋ฒ์ ๋ถํฐ C2DM(Cloud to Device Messaging)
๊ธฐ์ ์ด ์ ์ฉ๋์์ผ๋ฉฐ, ์กฐ๋ง๊ฐ ๊ตฌ๊ธ์์ ์ ์ ์๋น์ค ์์ ์ด๋ค.
9 ๊ฐ๋ฐ ํ๊ฒฝ
ํ๋ก์ ํธ ๊ธฐ๋ณธ ๊ฐ๋ฐ ํ๊ฒฝ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๋ชจ๋ Java ์ธ์ด๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ JDK 5.0 ์ด์๊ณผ Eclipse
(3.5 ๊ถ์ฅ)๋ฅผ ํ์๋ก ํ๋ค. ์์ธ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ค์๊ณผ ๊ฐ๋ค.
9.1 ์๋ฒ ๊ฐ๋ฐ ํ๊ฒฝ
๊ตฌ๋ถ ์ค๋ช
์์คํ
ํ๋ซํผ Linux ๋๋ Windows
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด Java (JDK 1.5 ์ด์)
IDE Eclipse 3.5
๋น๋ ๋๊ตฌ Ant 1.7.1, Maven 2.0
Database HSQLDB ๋๋ MySQL
Servlet Container Jetty 6.1
J2EE ์คํ Servlet 2.4, JSP 2.0
ํต์ฌ ํ๋ ์์ํฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ Spring 2.5, MINA 2.0, Hibernate 3.3.1, SiteMesh 2.4
9.2 ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ ํ๊ฒฝ
๊ตฌ๋ถ ์ค๋ช
๋๋ฐ์ด์ค ๋จ๋ง๊ธฐ ์ผ์ฑ ๊ฐค๋ญ์S
๋ชจ๋ฐ์ผ ํ๋ซํผ Android SDK r07
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด Java (JDK 1.5 ์ด์)
IDE Eclipse 3.5
๋น๋ ๋๊ตฌ Ant 1.7.1
ํต์ฌ ํ๋ ์์ํฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ Smack 3.1
10 ๋ฐ์ ๋ฐฉํฅ
10.1 ์ํํธ์จ์ด ํ์ง ํฅ์
๏ฌ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ SSL/TSL ๋ณด์ ์ฑ๋ ์ ์ฉ์ผ๋ก ์์ฉํ ์๋น์ค๊ฐ ๊ฐ๋ฅํ ์์ค์ผ๋ก ํ์ง ํฅ์.
(XMPP ํ๋กํ ์ฝ์์ ๊ถ์ฅํ๋ ๋ฐฉ์์ ์ฑํ).
โ 2010 Moduad 23
- 24. ์๋๋ก์ด๋ ํธ์ ํต๋ณด ์์คํ
ํ๋ก์ ํธ ๊ฐ์ด๋
๏ฌ Wi-Fi, 3G, HSDPA ๋ง ๊ตฌ๋ถ๊ณผ ์์๋ก ๋ณํ ์ ๋ชจ๋ฐ์ผ ๋คํธ์ํฌ ํ๊ฒฝ์์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ์
์ฐ๊ฒฐ ์ง์์ฑ์ ์ํ ํ์ง ํฅ์ ๋ฐ ๋ค์ํ ํ๊ฒฝ์์ ํ
์คํธ.
10.2 ์๋ฒ ๋ฐ ํด๋ผ์ด์ธํธ ์์คํ
ํ์ฅ
๏ฌ ์๋ฒ ์์คํ
์ ํ์ฅํ์ฌ ์ฌ๋ฌ ๊ฐ์ ์๋๋ก์ด๋ ์ ํ๋ฆฌ์ผ์ด์
๋ค์ ๋์์ ์ง์ํ๋ ํ๋ซํผ ์๋น์ค์
์์ฉ๋ ์ ์์. ์ฌ๋ฌ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋์์ ์ง์ํ๊ธฐ ์ํ ๊ฐ๋ณ ์ ํ์ผ์ด์
์ธ์ฆ๊ณผ ์ฌ๋ฌ
๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์
์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฅ์ ํ์.
๏ฌ ํด๋ผ์ด์ธํธ๋ ์๋๋ก์ด๋ OS ์ด์ธ์ ํ ๋ชจ๋ฐ์ผ OS ์ ํ๋ฆฌ์ผ์ด์
์ ์ง์์ ์ํด ํด๋ผ์ด์ธํธ
๋ชจ๋์ ํ์ฅํ ์ ์์.
10.3 ๋ค์ํ ๋ถ์ผ์ ์์ฉ
๏ฌ ๋ฉ์์ง ํ๋กํ ์ฝ ํ์ฅ์ ํตํด ์ด๋ฏธ์ง, ์ฌ์ฒ๋, ๋น๋์ค ๋ฑ ๋ฉํฐ๋ฏธ๋์ด ๋ฉ์์ง ์ ๋ฌํ๋ ๋ฑ ๋์ฑ๋
์๋๊ฐ ์๋ ๋ด์ค ์ ๋ฌํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฉ๋ ์ ์์.
๏ฌ ์ฌ์ฉ์์ ์์น์ ๋ฐ๋ฅธ ์ง์ญ ๊ด๊ณ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ์์น๊ธฐ๋ฐ ์๋น์ค(LBS, Location Based
Service)๋ฅผ ์ ๊ณตํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ด์ฉ๋ ์ ์์.
๏ฌ SMS(Short Message Service)๋ฅผ ๋์ํ๋ ๊ฐ์
์๊ฐ ์ค์๊ฐ์ผ๋ก ๋จ๋ฌธ ๋ฉ์์ง ์ ๋ฌํ๋ ์๋น์ค ๋ฑ์
์์ฉ๋ ์ ์์.
10.4 ์คํ์์ค ์ปค๋ฎค๋ํฐ ํ๋์ ๊ธฐ์ฌ
๏ฌ SourceForge, Google Code, KLDP ๋ฑ ๋ค์ํ ์คํ์์ค ์ปค๋ฎค๋ํฐ๋ฅผ ํตํด ๊ตญ๋ด์ธ ๋ค์ํ ๊ฐ๋ฐ์ ์ฐธ์ฌ
์ ๋ ๋ฐ ์ด๋ฅผ ํตํ ํ์ง ํฅ์.
๏ฌ ๊ตญ๋ด ๊ฐ๋ฐ์๋ค ๊ฐ๋ฐ์๋ค์๊ฒ ์คํ์์ค๋ฅผ ํตํ ๊ฐ๋ฐ์ ์ญ๋ ํฅ์์ ๊ฝคํ๊ณ , ๋ค์ํ ์๋๋ก์ด๋
์ ํ๋ฆฌ์ผ์ด์
์ ์์ฉ๋ ์ ์๋ ๊ธฐํ๋ฅผ ์ ๊ณต.
โ 2010 Moduad 24