[[TableOfContents]] ì´ë¦„ê³¼ ì„¤ëª…ì€ ê±°ì°½í•´ë³´ì´ì§€ë§Œ, 실ìƒì€ ê´€ë ¨ëœ ì •ë³´ë¥¼ 모바ì¼í˜•태로 ì œê³µí•˜ê³ ìžˆìœ¼ë¯€ë¡œ 안드로ì´ë“œ ë° iOS ì–´í”Œì œìž‘ì´ ì£¼ê°€ ë˜ëŠ” 프로ì 트입니다. (난ì´ë„는 [CAUScheduler]와 ë¹„ìŠ·í• ê²ƒìœ¼ë¡œ 예ìƒí•©ë‹ˆë‹¤.) ë†í˜‘장학관(ë†í˜‘재단)ì˜ íŒ€ìž¥ë‹˜ìœ¼ë¡œë¶€í„° ë¶€íƒ(~~ëª…ë ¹~~)ì„ ë°›ì•„ ì§„í–‰í•˜ê²Œëœ í”„ë¡œì 트ì´ê³ , ì•„ì§ êµ¬ë‘로만 필요한 ê¸°ëŠ¥ì„ ì „ë‹¬ë°›ì•„ ì œìž‘ì„ ì§„í–‰í•˜ê³ ìžˆìŠµë‹ˆë‹¤. 추후 대면하여 ë…¼ì˜í•˜ê²Œ ë˜ë©´ ì ì ˆí•œ 보수가 ìžˆì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 혹시나 프로ì 트 ì§„í–‰ ê²½í—˜ì„ ìŒ“ê³ ì‹¶ê±°ë‚˜ í˜¹ì€ (실시간 채팅(푸쉬))앱 ì œìž‘ ë° ì„œë²„ì— ê´€ì‹¬ì´ ìžˆìœ¼ì‹ ë¶„ë“¤ì€ ìžìœ ë¡ê²Œ 참여하시면 ì¢‹ì„ ê²ƒ 같습니다. (단, 너무 ë§Žì€ ì¸ì›ìœ¼ë¡œëŠ” ì§„í–‰ì´ ì–´ë ¤ìš¸ 듯하여 ì ì ˆí•œ ì¸ì›ì´ 모ì´ê²Œ ë˜ë©´, ë” ì´ìƒ ëª¨ì§‘í• ìˆ˜ ì—†ì„ ê²ƒ 같습니다.) == 참가하는 사람 == [ì´ìŠ¹í˜„], [민준í™] == 앱 ì œìž‘ì˜ ë°°ê²½ ë° ëª©ì == ë†í˜‘ìž¥í•™ê´€ì˜ í˜„ìž¬ 공지(행사 ë° ì†Œì‹)ì „ë‹¬ ë°©ì‹ì€ 현재 (대부분)벽보 ë° (중요한 ë‚´ìš©ì€)문ìžë©”세지(MMS)로 ì•Œë¦¬ê³ ìžˆìŠµë‹ˆë‹¤. ë˜í•œ, ì¸í„°ë„· 사ì´íЏ(http://jaedan.nonghyup.com/site/mobile )ì˜ ê³µì§€ì‚¬í•ì„ í†µí•´ì„œë„ ì „ë‹¬í•˜ê³ ëŠ” 있습니다. 하지만, ìž¥í•™ê´€ë‚´ì˜ ì‚¬ìƒë“¤ì—게 효율ì 으로 ì „ë‹¬ì´ ì•ˆë˜ëŠ” 탓ì¸ì§€ ê³µì§€ëœ ë‚´ìš©ì„ ì´í–‰í•˜ì§€ 않는 경우가 ë§Žì´ ë°œìƒí•˜ê³ 있습니다. ë”°ë¼ì„œ ì´ëŸ¬í•œ ë¬¸ì œë¥¼ 해결하기 위한 한가지 방안으로, ë†í˜‘ìž¥í•™ê´€ì˜ ì–´í”Œë¦¬ì¼€ì´ì…˜ì„ ì œìž‘í•˜ì—¬ 좀 ë” íš¨ìœ¨ì 으로 ê³µì§€ì‚¬í• ì „ë‹¬ 수단으로 ì‚¬ìš©í• ì˜ˆì •ìž…ë‹ˆë‹¤. == ì§„í–‰ ìƒí™© == ** 3ì›” 17ì¼ê¹Œì§€ì˜ ì§„í–‰ìƒí™© 1. express, passport를 통해서 Dashboard 로그ì¸êµ¬í˜„ ë° ê¸°ë³¸ì ì¸ ì„¤ì •ì´ ê°€ëŠ¥í•˜ê²Œ 만들어ë‘었습니다. (테스트해보실 분들ì€, http://leesnhyun.iptime.org ì— test/test 로 ë¡œê·¸ì¸ ê°€ëŠ¥í•©ë‹ˆë‹¤. 추후ì‚ì œ ë° css ì ìš©ì˜ˆì • ã… ã… ) 2. githubì— ì˜¬ë¼ê°€ìžˆëŠ” 소스ì—서 확ì¸í• 수 있듯ì´, 현재 MQTTService는 êµ¬í˜„ì„ ì™„ë£Œí–ˆìœ¼ë©°, 대쉬보드ì—서 í‘¸ì‰¬ì „ì†¡ì„ í•˜ë©´ 받아볼 수 있습니다. 3. 현재 'test' í† í”½(topic)ë§Œì„ êµ¬ë…(subscribe)하게 í•´ë‘었지만, 나중ì—는 í† í”½ì„ ìž˜ê²Œ ì„¸ë¶„í™”í• ì˜ˆì •ìž…ë‹ˆë‹¤. 소스ìƒì—서는 subscribe ë¿ë§Œì•„ë‹ˆë¼ publish, unsubscribeë„ êµ¬í˜„ì´ ë˜ì–´ìžˆìœ¼ë©°, ìƒí™©ì—ë”°ë¼ í˜¸ì¶œí• ìˆ˜ 있ë„ë¡ í• ì˜ˆì •ìž…ë‹ˆë‹¤. 4. DexClassLoader (Java ì—ì„œì˜ ClassLoader)를 ì´ìš©í•˜ì—¬, main apkì—서 sub apk파ì¼ì˜ 함수를 í˜¸ì¶œí• ìˆ˜ 있ë„ë¡ í•´ë‘었습니다. ì´ëŠ” 어플ìžì²´ì˜ ì—…ë°ì´íŠ¸ë¥¼ í”¼í•˜ê³ , stealth update를 위한 장치ì´ê³ , 보안과 ê´€ë ¨ëœ ë¶€ë¶„ì€ íŒŒì¼ì˜ 무결성검사(hashê°’)를 통해서 í•´ê²°í•´ë³¼ ìƒê°ìž…니다. === 3ì›” 17ì¼ê¹Œì§€ì˜ ì§„í–‰ìƒí™© === 1. express, passport를 통해서 Dashboard 로그ì¸êµ¬í˜„ ë° ê¸°ë³¸ì ì¸ ì„¤ì •ì´ ê°€ëŠ¥í•˜ê²Œ 만들어ë‘었습니다. (테스트해보실 분들ì€, http://leesnhyun.iptime.org ì— test/test 로 ë¡œê·¸ì¸ ê°€ëŠ¥í•©ë‹ˆë‹¤. 추후ì‚ì œ ë° css ì ìš©ì˜ˆì • ã… ã… ) 2. githubì— ì˜¬ë¼ê°€ìžˆëŠ” 소스ì—서 확ì¸í• 수 있듯ì´, 현재 MQTTService는 êµ¬í˜„ì„ ì™„ë£Œí–ˆìœ¼ë©°, 대쉬보드ì—서 í‘¸ì‰¬ì „ì†¡ì„ í•˜ë©´ 받아볼 수 있습니다. 3. 현재 'test' í† í”½(topic)ë§Œì„ êµ¬ë…(subscribe)하게 í•´ë‘었지만, 나중ì—는 í† í”½ì„ ìž˜ê²Œ ì„¸ë¶„í™”í• ì˜ˆì •ìž…ë‹ˆë‹¤. 소스ìƒì—서는 subscribe ë¿ë§Œì•„ë‹ˆë¼ publish, unsubscribeë„ êµ¬í˜„ì´ ë˜ì–´ìžˆìœ¼ë©°, ìƒí™©ì—ë”°ë¼ í˜¸ì¶œí• ìˆ˜ 있ë„ë¡ í• ì˜ˆì •ìž…ë‹ˆë‹¤. === 서버 === 현재 ê¸°ìˆ™ì‚¬ë‚´ì— ë¼ì¦ˆë² 리파ì´2(B+모ë¸, sdCard:16GB)를 통해 서버를 구축해ë‘었습니다. (http://leesnhyun.iptime.org (DDNSì„¤ì •)) 1. 현재 ì„œë²„ì˜ êµ¬ì„±ì€ Nginx(proxy server, static file) + NodeJS(WAS, api server(DB 등..)) 를 ì´ìš©í•˜ì—¬ 구성ë˜ì–´ 있으며 추가ì 으로 Mosquitto brokerê°€ 설치ë˜ì–´ìžˆìŠµë‹ˆë‹¤. (DBMS로는 MySQLì„ ì„¤ì¹˜í•´ë‘었습니다.) 2. NodeJSì˜ Express framework를 사용하여 RESTful API서버를 ì œìž‘í• ê³„íšìž…니다. 3. ë˜í•œ 웹 ìƒì—서 푸쉬를 보낼 수 있ë„ë¡, 간단한 관리ìžíŒ¨ë„(Dashboard)ì„ ì œìž‘í•´ì•¼í•©ë‹ˆë‹¤. 4. Mosquitto broker는 MQTT Protocolì„ ì§€ì›í•˜ëŠ” 대표ì ì¸ ì˜¤í”ˆì†ŒìŠ¤ Broker입니다. ìžì„¸í•œ ë‚´ìš©ì€ êµ¬ê¸€ë§í•˜ì…”ë„ ì¢‹ê³ í˜¹ì€ ì´ íŽ˜ì´ì§€ì— 주소를 ì¶”ê°€í•˜ê² ìŠµë‹ˆë‹¤. 5. 푸쉬는 GCM,APNì„ ì‚¬ìš©í•˜ì§€ ì•Šê³ , MQTT Protocolì„ ì‚¬ìš©í•˜ì—¬ í‘¸ì‰¬í• ìƒê°ìž…니다. 6. 공지사í•ì´ ë‚˜ì™€ìžˆëŠ” 페ì´ì§€ë¥¼ 주기ì 으로 파싱하여, 새로운 ê¸€ì´ ë“±ë¡ë 경우 Push메세지를 보내야 합니다. (현재 15분간격으로 Polling하ë„ë¡ ë˜ì–´ 있으나, Long-polling으로 구현하면 ë” ì¢‹ê² ë‹¤ëŠ” ìƒê°ìž…니다.) 7. 한 서버ì—서 ëª¨ë“ ê²ƒì„ ì²˜ë¦¬í•˜ëŠ” ê²ƒì€ ë¬¸ì œê°€ ìžˆì„ ê²ƒ 같지만, ì—¬ê±´ì´ ì•ˆë˜ì–´ 한군ë°ì—서 다 처리합니다. === í´ë¼ì´ì–¸íЏ === ==== 공통 ==== 안드로ì´ë“œì™€ iOS 어플리케ì´ì…˜ì„ ì œìž‘í•´ì•¼í•©ë‹ˆë‹¤. 현재 ë†í˜‘ìž¥í•™ê´€ì˜ ì´ ì¸ì›ì€ 500ëª…ì •ë„로, ì•„ì´í° ìœ ì €ê°€ ë” ë§Žì„ ê²ƒìœ¼ë¡œ 예ìƒí•©ë‹ˆë‹¤. ==== 안드로ì´ë“œ ==== 사실 ì´ì „ì— ì œìž‘í–ˆë˜ 'ë†í˜‘장학관 ì‹ë‹¨ì¡°íšŒ'ë¼ëŠ” ì–´í”Œì´ êµ¬ê¸€Playì— ë“±ë¡ì´ ë˜ì–´ìžˆìŠµë‹ˆë‹¤. 하지만, ì´ ì–´í”Œë¦¬ì¼€ì´ì…˜ì˜ 내부구조가 매우 좋지 않아 ë¦¬íŒ©í† ë§ê²¸ 그냥 새로 만들어서 ë°°í¬í• ìƒê°ìž…니다. ë¬¼ë¡ í•„ìš”í•œ ë¶€ë¶„ì€ ìœ ì§€í• ìƒê°ìž…니다.(기존 사용ìžì˜ UIì €í• ë°©ì§€) ìš°ì„ , ê¸°ì¡´ì˜ ì–´í”Œë¦¬ì¼€ì´ì…˜ì˜ 구현방ì‹ì— 대해서 소개하ìžë©´ 다ìŒê³¼ 같습니다. 0. Splash화면ì—서 ë²„ì „ì²´í¬. (ì„œë²„ì˜ ë²„ì „ê³¼ í´ë¼ì´ì–¸íŠ¸ì˜ ë²„ì „ì´ ë‹¤ë¥¼ê²½ìš°, ì—…ë°ì´íЏ ìœ ë„) 1. http://jaedan.nonghyup.com/site/mobile ì— ìžë™ë¡œê·¸ì¸ í• ìˆ˜ 있는 기능.(SharedPreferenceì— ê°’ ì €ìž¥) 2. id & pw 를 POSTì „ì†¡í•˜ì—¬ 나온 cookieë„ ì—시 SharedPreference ì— ì €ìž¥í•˜ì—¬, ì„¸ì…˜ìœ ì§€. 3. ì‹ë‹¨íŽ˜ì´ì§€, ì™¸ë°•ì‹ ì²íŽ˜ì´ì§€, ìƒë²Œì 페ì´ì§€ë¥¼ ì½ì–´(Asynctask) ì •ê·œì‹ìœ¼ë¡œ 필요한 ë‚´ìš© 파싱. 4. View를 꾸며서 ì´ì˜ê²Œ 보여줌. 5. GingerBread(2.3, API:10)부터 사용가능하ë„ë¡ ë§Œë“¦. 하지만 ìœ„ì˜ ë°©ì‹ìœ¼ë¡œ êµ¬í˜„í–ˆì„ ê²½ìš°, ìž‘ì—…ì˜ íš¨ìœ¨ì„±ì €í•˜ ë° ë³´ì•ˆë¬¸ì œë„ ë¤ìœ¼ë¡œ ê°€ì§€ê³ ìžˆê¸° ë•Œë¬¸ì— í•„ìš”í•œ ë¶€ë¶„ì€ ì™¸ë¶€ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 통해서 í•´ê²°í• ìƒê°ìž…니다. ë”°ë¼ì„œ 새로운 어플리케ì´ì…˜ì€ 다ìŒê³¼ ê°™ì€ ê¸°ëŠ¥ì„ ê°–ë„ë¡ êµ¬í˜„í• ìƒê°ìž…니다. 1. 호환성(android) : GingerBread(API 10) ~ MashMellow(API 23) 2. 주로 ì‚¬ìš©í• ë¼ì´ë¸ŒëŸ¬ë¦¬(예ìƒ) : Volley Framework, Jericho Parser, Paho MQTT v3 3. 푸쉬구현 (Google GCM 사용X, ì´ìœ 는 아래 ì„œìˆ ì˜ˆì •) 4. 간단한 게시íŒì„ 통해서, 사ìƒë“¤ê°„ 소통ì˜ìž¥ ë§ˆë ¨. (새글알람 푸쉬구현) 5. 열람실 ë° ë…ì„œì‹¤ì˜ ì—¬ì„안내. 6. Reflection API를 통해서 간단한 실시간 ì—…ë°ì´íЏ ì§„í–‰. ë””ìžì¸ì€ [ì´ìŠ¹í˜„]ì´ í•˜ê² ìŠµë‹ˆë‹¤ (ã… ã… ) ==== iOS ==== iOSê°œë°œì€ ì²˜ìŒì´ë¯€ë¡œ 공부해나가면서 ê°œë°œí• ìƒê°ìž…니다. (Objective-C) ë°¤ì´ ê¹Šì–´ì„œ, ë‚´ì¼ ì¤‘ìœ¼ë¡œ 다시 ìˆ˜ì •í•˜ê² ìŠµë‹ˆë‹¤. ê°ì‚¬í•©ë‹ˆë‹¤. == 댓글 == [ì´ìŠ¹í˜„] ìƒˆë²½ì— ìž ê²°ì— ì¨ì„œ ë‚´ìš©ì´ ë’¤ì£½ë°•ì£½ìž…ë‹ˆë‹¤. ë˜í•œ, 현재 ì•Œê³ ìžˆëŠ” ì§€ì‹ì´ 얼마 없어서 조언과 ë„ì›€ì´ ë§Žì´ í•„ìš”í•©ë‹ˆë‹¤. ê°ì‚¬í•©ë‹ˆë‹¤. * ì´ê±° 완성ë˜ë©´ ìž¬ë‹¨í•˜ê³ ê³„ì•½ ㄱㄱ - [kerokim]