SlideShare a Scribd company logo
모바일 메신저 아키텍쳐
2015.03.31
정효기(hyogij@gmail.com)
Contents
• 모바일 메신저 서비스 현황
• XMPP 소개
• LINE, Kakao Talk 아키텍쳐 소개
• 메신저를 만든다면?
2
모바일 메신저 점유율 (2014년 12월)
월간 사용자(백 만명)
Reference : http://www.statista.com/statistics/258749/most-popular-global-mobile-messenger-apps/
6 억
5 억
1.7 억
4.8 천만
3
Instant Messaging 서비스 표준화 동향
• IETF’s Session Initiation Protocol (SIP)
• Henning Schulzrinne와 Mark Handley가 1996년 고안, 2000년 표준으로 채택
• IP network 상에서 음성, 화상 전화와 같은 multimedia 통신을 제어하기 위해 정의된
signaling protocol
• SIP for Instant Messaging and Presence Leveraging Extensions (SIMPLE)
• SIP를 기반으로 instant messaging, presence protocol 을 명세
• the open XML-based Extensible Messaging and Presence Protocol (XMPP)
• 1998년 Jeremie Miller에 의해 만들어져 2004년 IETF 표준이 됨
• Instant Messaging and Presence Protocol (IMPP)
• Application Exchange (APEX)
Reference : http://en.wikipedia.org/wiki/Comparison_of_instant_messaging_protocols
4
eXtensible Messaging and
Presence Protocol (XMPP)
• XML에 기반한 실시간 메시지 지향 공개 표준 통신 프로토콜
• 두 네트워크 피어 간에 실시간으로 메시지를 주고 받고, 

부재 여부를 파악하며, 구조화된 정보들 전달
• Google Talk, Facebook chat, WhatsApp, 

Windows Live Messenger 등에 이용







Reference : http://www.ibm.com/developerworks/library/x-xmppintro/,
http://xmpp.org/
XML DocumentClient Server
XMPP 프로토콜 특징
특징 설명
Open free, open, public 프로토콜
Standard IETF(국제 인터넷 표준화 기구) 표준
Proven 수천 개의 서버, 수백만의 사용자 확보
Decentralized Email과 유사한 방식으로 확장
Secure
SASL(Simple Authentication Security Layer), 

TLS(Transport Layer Security) 등 규격 지원
Extensible XML namespace에 의해 자신만의 프로토콜을 코어위에 확장
Flexible IM 위에 네트워크 관리, 콘텐츠 동기화, 협업 도구, 파일공유, 게임 등 확장 가능
Diverse 수많은 회사 또는 오픈소스 프로젝트에서 다양한 응용서비스들을 출시하고 있음
6
XML 메시징 구분 (1/2)
• 스트림 (Stream)
• 두 피어 간에 XML 요소를 주고 받기 위해 미리 주고 받는 XML 문서
• 포함 요소 : 서버 주소, 프로토콜 버전, 네임스페이스
• 스탠자 (Stranza)
• 열려진 XML 스트림 내에 포함되어 전달되는 XML 문서
• 3가지 타입 존재 : message, iq, presence
• 로스터 (Roster) : 친구 리스트
• JID(Jabber Identifier) 유일한 식별자들로 구성
• 예 : romeo@gmail.com, juliet@gmail.com
7
XML 메시징 구분 (2/2)
<stream:stream to='example.com‘
xmlns='jabber:client‘
xmlns:stream='http://etherx.jabber.org/streams’
version='1.0'>
<message …..> …. </message>
………….
<presence …> … </presence>
………….
<iq … > … </iq>
</stream:stream>
<stream:stream
from='example.com‘
id='someid‘
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams‘
version='1.0'>
<message …..> …. </message>
………….
<presence …> … </presence>
………….
<iq … > … </iq>
</stream:stream>Client Server
8
스탠자 종류 (1/3)
• 메시지 (Message) : 메시지를 전송하기 위해 사용
• 구성 요소 : to, from, type, lang, body 등
• Presence : 온라인, 자리 비움 등의 상태 표시
• 구성 요소 : lang, show, status 등
• IQ (Info/Query) : 친구 리스트 받기 등의 정보 요청
• 종류 : get, set, result, error
9
스탠자 종류 (2/3)
메시지 스탠자
Presence 스탠자
Reference : http://btsweet.blogspot.kr/2014/09/google-talk-xmpp-2.html
10
스탠자 종류 (3/3)
Reference : http://btsweet.blogspot.kr/2014/09/google-talk-xmpp-2.html
“get” 타입의 IQ 스탠자
“result” 타입의 IQ 스탠자
11
Single Server
XML
Client
XMPP
ServerXMLClient
Client
Client Client
Client
Client
XML
XML
XML
XML
XML
Host.com
12
Multiple Servers
XML
XML
XML
XML
XML
Client
XMPP App
Client
XMPP
Server
XMPP
Server
XMPP
Server
XMPP
Server
Client
XML
XML
XML
Client
XML
Client
Client
Internet
XML
XML
XML
XML
Client
13
LINE, Kakao Talk 등은?
• 표준 프로토콜(XMPP) 가 아닌 자체 프로토콜 사용
• 대부분 자료를 공개하지 않음
• 어디서 자료를 얻을 수 있을까?
• 해당 서비스 홈페이지 또는 기술 블로그
• Reverse Engineering : 패킷 분석 등을 통한 사용 프로토
콜 분석
14
LINE
• 메시지 전송 : SPDY, Apache Thrift
• 서버 : nginx
• 데이터베이스 : Redis -> HBase

















Reference : http://developers.linecorp.com/blog/?p=1420
15
기존 HTTP 프로토콜 문제
• 하나의 커넥션에서 한 번에 하나만의 요청을 처리
• 요청에 대한 응답이 순차적
• 매 요청마다 동일한 Header를 중복으로 전송 : 압축하지 않음















Reference : http://www.slideshare.net/oddpoet/spdy-13231459
16
SPDY 특징
• Multiplexing : 하나의 커넥션 안에서 다수의 독립적인 

스트림을 동시에 처리
• Server Push : 클라이언트 요청 없이 서버에서 콘텐츠를 직
접 push 가능
• HTTP 헤더 압축







17
Apache Thrift (1/2)
• 페이스북이 개발한 규모 가변적인(scalable) 이종 언어 서비스 개발을
위한 소프트웨어 프레임워크
• 데이터 교환을 쉽게 하기 위한 목적 : XML, JSON, Protocol Buffers
등과 유사
• 최소의 부하로 이기종 언어간 Serialization 지원
• Thrift 도구를 통해 다양한 언어의 코드 자동 생성
• C++, Java, C#, PHP, Python
• Ruby, Erlang, Perl, Haskell, Cocoa, Smalltalk, Ocaml 등
18
Apache Thrift (2/2)
19
메시지 크기 (Bytes) 비교
20
CPU 부하 (%) 비교
21
nginx
• 트래픽이 많은 웹사이트를 위해 네트워크 확장성을 주목적으로 설계
한 경량 HTTP 서버
• 아파치 웹 서버를 대체할 대안으로 급부상 중
• 비동기 이벤트 기반 구조 (아파치는 스레드/프로세스 기반)
• 사용하는 곳
• Facebook, NetFlix, WordPress, GitHub, Zynga, Sourceforge 등
• 한국에서는 네이버 첫 페이지, 카카오톡 공지사항 서버
Reference : http://nginx.org/en/docs/
22
Web Server 점유율 (2014년)
아파치 39%, IIS 29%, nginx 15%
Reference : http://news.netcraft.com/archives/2014/05/07/may-2014-web-server-survey.html
23
이벤트 기반 구조 (1/2)
Reference : http://www.iij.ad.jp/en/company/development/tech/mighttpd/
24
이벤트 기반 구조 (2/2)
• 아파치 웹 서버
• 스레드/프로세스 기반 구조
• 클라이언트의 요청이 들어오면 스레드를 생성
• 사용자가 많으면 많은 스레드 생성 : 메모리 및 CPU 낭비, Context-Switching
Overhead 발생
• nginx
• 비동기(async) 이벤트(ioctl, send, recv, epoll) 기반 구조
• 다수의 연결을 효과적으로 처리
• 대부분의 코어 모듈이 Apache보다 적은 리소스로 더 빠르게 동작
Reference : http://opentutorials.org/module/384/3462
25
Redis
• "REmote DIctionary System"의 약자로 메모리 기반의 

Key/Value Store
• 빠른 처리(read/write) 속도와 검증된 소프트웨어 안정성 

제공
• 다양한 데이터 구조 저장 : String, hash, lists, sets, sorted
set, bitmap 등
• 사용하는 곳 : 트위터, 핀터레스트, 인스타그램, 텀블러 등
Reference : http://redis.io/
26
HBase
• 기존 Redis NoSQL 의 한계
• 많은 Memory 공간을 필요, 분산 저장 시스템이 아님
• 다양한 NoSQL 비교 : HBase, Cassandra, MongoDB
• Benchmark 도구 : YCSB(Yahoo! Cloud Serving
Benchmark), 자체 Benchmark 도구 이용
• 요구사항 : 각 시나리오에 따른 시간 제약, 

read/write O(1), random reads O(n) 등
Reference : http://developers.linecorp.com/blog/?p=1420
27
Kakao Talk
• 메시지 전송 : HTTP 기반 json
전송 -> LOCO Protocol
• 서버 : 루비온레일즈 -> C++
• 데이터베이스 : MySQL,
MariaDB, TokuDB, 멤캐시드, 카
산드라





Reference : http://blog.kakao.com/311
2011년 4월 ‘겁나빠른황소’ 프로젝트
28
LOCO Procotol (1/2)
• 3가지 타입의 패킷
• LocoSecureHandShakePacket : 서버와 통신을 위해 세
션을 여는 패킷(LOGIN 커맨드 패킷)
• LocoSecureNormalPacket : LOGIN 커맨드 패킷을 AES
encrypt 한 후 서버와 통신(세션 유지)
• LocoPacket : 암호화가 적용되지 않는 패킷
Reference : https://www.bpak.org/blog/2012/12/
29
LOCO Procotol (2/2)
• 패킷 아이디 : 패킷 구분
• 상태 코드 : 커맨드/패킷 상태 코드
• Method : 메시지 전달, 대화 상대 추
가, 차단, 채팅방 리스트 등
• Body Type, 길이, 내용
Reference : https://www.bpak.org/blog/2012/12/
30
DB 구성도 (1/2)
•RDBMS
•MySQL : 출시 초기 사용한 데이터베이스
•TokuDB : 로그를 쌓는데 활용
•NoSQL
•MariaDB
•MySQL과 동일한 코드 기반, 사용 방법과 구조가 동일,
•MySQL과 99.99%의 바이너리 호환성을 제공
•초당쿼리처리 속도 2~10% 빠름
•쿼리 최적화, 서브쿼리 지원, 조인 작업 시 색인 사용률 등에서 성능 향상 효과
•memcached : 데이터 요청을 캐시에서 직접 서비스, 데이터베이스에 연결된 디스크 스토리지에 대
한 접근을 줄임
•Cassandra : 분석 데이터베이스로 활용
31
Reference : http://www.oss.kr/oss_repository10/517682
DB 구성도 (2/2)
32
Reference : http://www.oss.kr/oss_repository10/517682
메신저를 만든다면?
33
메신저 서버/클라이언트 구현 (1/3)
• XMPP 기반 서버/클라이언트
• 서버 : Openfire, MySQL, JDK
• 클라이언트 : Spark(PC client), 

Smack(Java library), 

aSmack(Smack on Android) 등







Reference : http://www.igniterealtime.org/
34
메신저 서버/클라이언트 구현 (2/3)
References : http://www.igniterealtime.org/,http://nekomimi.tistory.com/660
PC 클라이언트 안드로이드 클라이언트
35
메신저 서버/클라이언트 구현 (3/3)
Reference : http://www.oss.kr/index.php?document_srl=100642&category=69425&mid=oss_repository14
36
모바일 메신저 아키텍쳐 소개

More Related Content

What's hot

Apache kafka performance(throughput) - without data loss and guaranteeing dat...
Apache kafka performance(throughput) - without data loss and guaranteeing dat...Apache kafka performance(throughput) - without data loss and guaranteeing dat...
Apache kafka performance(throughput) - without data loss and guaranteeing dat...
SANG WON PARK
 
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
NAVER D2
 
Apache kafka 확장과 응용
Apache kafka 확장과 응용Apache kafka 확장과 응용
Apache kafka 확장과 응용
JANGWONSEO4
 
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
Amazon Web Services Korea
 
데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...
데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...
데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...
Amazon Web Services Korea
 
Log management system for Microservices
Log management system for MicroservicesLog management system for Microservices
Log management system for Microservices
Võ Duy Tuấn
 
Building Microservices with Apache Kafka
Building Microservices with Apache KafkaBuilding Microservices with Apache Kafka
Building Microservices with Apache Kafka
confluent
 
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Yongho Ha
 
KSQL: Streaming SQL for Kafka
KSQL: Streaming SQL for KafkaKSQL: Streaming SQL for Kafka
KSQL: Streaming SQL for Kafka
confluent
 
카프카, 산전수전 노하우
카프카, 산전수전 노하우카프카, 산전수전 노하우
카프카, 산전수전 노하우
if kakao
 
[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud
PgDay.Seoul
 
5 things you didn't know nginx could do
5 things you didn't know nginx could do5 things you didn't know nginx could do
5 things you didn't know nginx could do
sarahnovotny
 
Cassandra 101
Cassandra 101Cassandra 101
Cassandra 101
Nader Ganayem
 
엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나
종민 김
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정
Arawn Park
 
[2019] 바르게, 빠르게! Reactive를 품은 Spring Kafka
[2019] 바르게, 빠르게! Reactive를 품은 Spring Kafka[2019] 바르게, 빠르게! Reactive를 품은 Spring Kafka
[2019] 바르게, 빠르게! Reactive를 품은 Spring Kafka
NHN FORWARD
 
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
if kakao
 
Amazon DynamoDB Under the Hood: How We Built a Hyper-Scale Database (DAT321) ...
Amazon DynamoDB Under the Hood: How We Built a Hyper-Scale Database (DAT321) ...Amazon DynamoDB Under the Hood: How We Built a Hyper-Scale Database (DAT321) ...
Amazon DynamoDB Under the Hood: How We Built a Hyper-Scale Database (DAT321) ...
Amazon Web Services
 
Change data capture with MongoDB and Kafka.
Change data capture with MongoDB and Kafka.Change data capture with MongoDB and Kafka.
Change data capture with MongoDB and Kafka.
Dan Harvey
 
MongoDB World 2015 - A Technical Introduction to WiredTiger
MongoDB World 2015 - A Technical Introduction to WiredTigerMongoDB World 2015 - A Technical Introduction to WiredTiger
MongoDB World 2015 - A Technical Introduction to WiredTiger
WiredTiger
 

What's hot (20)

Apache kafka performance(throughput) - without data loss and guaranteeing dat...
Apache kafka performance(throughput) - without data loss and guaranteeing dat...Apache kafka performance(throughput) - without data loss and guaranteeing dat...
Apache kafka performance(throughput) - without data loss and guaranteeing dat...
 
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
 
Apache kafka 확장과 응용
Apache kafka 확장과 응용Apache kafka 확장과 응용
Apache kafka 확장과 응용
 
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
 
데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...
데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...
데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...
 
Log management system for Microservices
Log management system for MicroservicesLog management system for Microservices
Log management system for Microservices
 
Building Microservices with Apache Kafka
Building Microservices with Apache KafkaBuilding Microservices with Apache Kafka
Building Microservices with Apache Kafka
 
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
 
KSQL: Streaming SQL for Kafka
KSQL: Streaming SQL for KafkaKSQL: Streaming SQL for Kafka
KSQL: Streaming SQL for Kafka
 
카프카, 산전수전 노하우
카프카, 산전수전 노하우카프카, 산전수전 노하우
카프카, 산전수전 노하우
 
[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud
 
5 things you didn't know nginx could do
5 things you didn't know nginx could do5 things you didn't know nginx could do
5 things you didn't know nginx could do
 
Cassandra 101
Cassandra 101Cassandra 101
Cassandra 101
 
엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정
 
[2019] 바르게, 빠르게! Reactive를 품은 Spring Kafka
[2019] 바르게, 빠르게! Reactive를 품은 Spring Kafka[2019] 바르게, 빠르게! Reactive를 품은 Spring Kafka
[2019] 바르게, 빠르게! Reactive를 품은 Spring Kafka
 
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
 
Amazon DynamoDB Under the Hood: How We Built a Hyper-Scale Database (DAT321) ...
Amazon DynamoDB Under the Hood: How We Built a Hyper-Scale Database (DAT321) ...Amazon DynamoDB Under the Hood: How We Built a Hyper-Scale Database (DAT321) ...
Amazon DynamoDB Under the Hood: How We Built a Hyper-Scale Database (DAT321) ...
 
Change data capture with MongoDB and Kafka.
Change data capture with MongoDB and Kafka.Change data capture with MongoDB and Kafka.
Change data capture with MongoDB and Kafka.
 
MongoDB World 2015 - A Technical Introduction to WiredTiger
MongoDB World 2015 - A Technical Introduction to WiredTigerMongoDB World 2015 - A Technical Introduction to WiredTiger
MongoDB World 2015 - A Technical Introduction to WiredTiger
 

Viewers also liked

[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발
NAVER D2
 
URQA 삼성 컨퍼런스 발표
URQA 삼성 컨퍼런스 발표 URQA 삼성 컨퍼런스 발표
URQA 삼성 컨퍼런스 발표
YoungSu Son
 
Android Push Server & MQTT
Android Push Server & MQTTAndroid Push Server & MQTT
Android Push Server & MQTT
광운 이
 
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발 모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발 Jay JH Park
 
클라우드 인프라 기반 서비스 개발 - ChatON
클라우드 인프라 기반 서비스 개발 - ChatON클라우드 인프라 기반 서비스 개발 - ChatON
클라우드 인프라 기반 서비스 개발 - ChatON
Jay JH Park
 
중남미 모바일 플랫폼 (Go Global)
중남미 모바일 플랫폼 (Go Global)중남미 모바일 플랫폼 (Go Global)
중남미 모바일 플랫폼 (Go Global)
Andrew Kim
 
위챗 매니저 소개 (wechat manager sales kit)
위챗 매니저 소개 (wechat manager sales kit)위챗 매니저 소개 (wechat manager sales kit)
위챗 매니저 소개 (wechat manager sales kit)
imperator21
 
[newsletter 10월] 글로벌 모바일 매신저앱
[newsletter 10월] 글로벌 모바일 매신저앱[newsletter 10월] 글로벌 모바일 매신저앱
[newsletter 10월] 글로벌 모바일 매신저앱
MezzoMedia
 
최종본 위챗 마케팅 제안서_이형민 마케터
최종본 위챗 마케팅 제안서_이형민 마케터최종본 위챗 마케팅 제안서_이형민 마케터
최종본 위챗 마케팅 제안서_이형민 마케터Hyungmin Lee
 
161024 aTCHINA 위챗 모바일 쇼핑몰 제안서_extract
161024 aTCHINA 위챗 모바일 쇼핑몰 제안서_extract161024 aTCHINA 위챗 모바일 쇼핑몰 제안서_extract
161024 aTCHINA 위챗 모바일 쇼핑몰 제안서_extractHyungmin Lee
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
Heungsub Lee
 
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
OpenStack Korea Community
 

Viewers also liked (12)

[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발
 
URQA 삼성 컨퍼런스 발표
URQA 삼성 컨퍼런스 발표 URQA 삼성 컨퍼런스 발표
URQA 삼성 컨퍼런스 발표
 
Android Push Server & MQTT
Android Push Server & MQTTAndroid Push Server & MQTT
Android Push Server & MQTT
 
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발 모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
 
클라우드 인프라 기반 서비스 개발 - ChatON
클라우드 인프라 기반 서비스 개발 - ChatON클라우드 인프라 기반 서비스 개발 - ChatON
클라우드 인프라 기반 서비스 개발 - ChatON
 
중남미 모바일 플랫폼 (Go Global)
중남미 모바일 플랫폼 (Go Global)중남미 모바일 플랫폼 (Go Global)
중남미 모바일 플랫폼 (Go Global)
 
위챗 매니저 소개 (wechat manager sales kit)
위챗 매니저 소개 (wechat manager sales kit)위챗 매니저 소개 (wechat manager sales kit)
위챗 매니저 소개 (wechat manager sales kit)
 
[newsletter 10월] 글로벌 모바일 매신저앱
[newsletter 10월] 글로벌 모바일 매신저앱[newsletter 10월] 글로벌 모바일 매신저앱
[newsletter 10월] 글로벌 모바일 매신저앱
 
최종본 위챗 마케팅 제안서_이형민 마케터
최종본 위챗 마케팅 제안서_이형민 마케터최종본 위챗 마케팅 제안서_이형민 마케터
최종본 위챗 마케팅 제안서_이형민 마케터
 
161024 aTCHINA 위챗 모바일 쇼핑몰 제안서_extract
161024 aTCHINA 위챗 모바일 쇼핑몰 제안서_extract161024 aTCHINA 위챗 모바일 쇼핑몰 제안서_extract
161024 aTCHINA 위챗 모바일 쇼핑몰 제안서_extract
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
 

Similar to 모바일 메신저 아키텍쳐 소개

Node.js 첫걸음
Node.js 첫걸음Node.js 첫걸음
Node.js 첫걸음
SeungHyun Lee
 
[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드
[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드
[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드
Sanghun Yun
 
API Management Reference Architecture
API Management Reference ArchitectureAPI Management Reference Architecture
API Management Reference Architecture
Seong-Bok Lee
 
서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...
서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...
서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...
Jemin Huh
 
20160414 ROS 2차 강의 (for 아스라다 팀)
20160414 ROS 2차 강의 (for 아스라다 팀)20160414 ROS 2차 강의 (for 아스라다 팀)
20160414 ROS 2차 강의 (for 아스라다 팀)
Yoonseok Pyo
 
웹을 지탱하는 기술
웹을 지탱하는 기술웹을 지탱하는 기술
웹을 지탱하는 기술
JungHyuk Kwon
 
웹을 지탱하는 기술
웹을 지탱하는 기술웹을 지탱하는 기술
웹을 지탱하는 기술
정혁 권
 
Spring 4.x Web Application 살펴보기
Spring 4.x Web Application  살펴보기Spring 4.x Web Application  살펴보기
Spring 4.x Web Application 살펴보기
Ji Heon Kim
 
웹 2.0 기술 소개 (2006)
웹 2.0 기술 소개 (2006)웹 2.0 기술 소개 (2006)
웹 2.0 기술 소개 (2006)Channy Yun
 
하이퍼레저 프로젝트 개요
하이퍼레저 프로젝트 개요하이퍼레저 프로젝트 개요
하이퍼레저 프로젝트 개요
TIMEGATE
 
하이퍼레저 프로젝트 개요
하이퍼레저 프로젝트 개요하이퍼레저 프로젝트 개요
하이퍼레저 프로젝트 개요
Seung-Woo Kang
 
한국청소년정보과학회 1회 세미나 - RestFul API Basic
한국청소년정보과학회 1회 세미나 - RestFul API Basic한국청소년정보과학회 1회 세미나 - RestFul API Basic
한국청소년정보과학회 1회 세미나 - RestFul API Basic
한국청소년정보과학회
 
웹소켓 (WebSocket)
웹소켓 (WebSocket)웹소켓 (WebSocket)
웹소켓 (WebSocket)
jeongseokoh
 
Amazon kinesis와 elasticsearch service로 만드는 실시간 데이터 분석 플랫폼 :: 박철수 :: AWS Summi...
Amazon kinesis와 elasticsearch service로 만드는 실시간 데이터 분석 플랫폼 :: 박철수 :: AWS Summi...Amazon kinesis와 elasticsearch service로 만드는 실시간 데이터 분석 플랫폼 :: 박철수 :: AWS Summi...
Amazon kinesis와 elasticsearch service로 만드는 실시간 데이터 분석 플랫폼 :: 박철수 :: AWS Summi...
Amazon Web Services Korea
 
NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템tcaesvk
 
Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos
uEngine Solutions
 
MongoDB 신제품 및 신기능 소개
MongoDB 신제품 및 신기능 소개MongoDB 신제품 및 신기능 소개
MongoDB 신제품 및 신기능 소개
MongoDB
 
build a linux webhosting server
build a linux webhosting serverbuild a linux webhosting server
build a linux webhosting server
정현 윤
 
Browsing With Firefox
Browsing With FirefoxBrowsing With Firefox
Browsing With Firefox
Matt Shin
 

Similar to 모바일 메신저 아키텍쳐 소개 (20)

Node.js 첫걸음
Node.js 첫걸음Node.js 첫걸음
Node.js 첫걸음
 
[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드
[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드
[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드
 
CouchDB - Introduction - Korean
CouchDB - Introduction - KoreanCouchDB - Introduction - Korean
CouchDB - Introduction - Korean
 
API Management Reference Architecture
API Management Reference ArchitectureAPI Management Reference Architecture
API Management Reference Architecture
 
서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...
서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...
서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...
 
20160414 ROS 2차 강의 (for 아스라다 팀)
20160414 ROS 2차 강의 (for 아스라다 팀)20160414 ROS 2차 강의 (for 아스라다 팀)
20160414 ROS 2차 강의 (for 아스라다 팀)
 
웹을 지탱하는 기술
웹을 지탱하는 기술웹을 지탱하는 기술
웹을 지탱하는 기술
 
웹을 지탱하는 기술
웹을 지탱하는 기술웹을 지탱하는 기술
웹을 지탱하는 기술
 
Spring 4.x Web Application 살펴보기
Spring 4.x Web Application  살펴보기Spring 4.x Web Application  살펴보기
Spring 4.x Web Application 살펴보기
 
웹 2.0 기술 소개 (2006)
웹 2.0 기술 소개 (2006)웹 2.0 기술 소개 (2006)
웹 2.0 기술 소개 (2006)
 
하이퍼레저 프로젝트 개요
하이퍼레저 프로젝트 개요하이퍼레저 프로젝트 개요
하이퍼레저 프로젝트 개요
 
하이퍼레저 프로젝트 개요
하이퍼레저 프로젝트 개요하이퍼레저 프로젝트 개요
하이퍼레저 프로젝트 개요
 
한국청소년정보과학회 1회 세미나 - RestFul API Basic
한국청소년정보과학회 1회 세미나 - RestFul API Basic한국청소년정보과학회 1회 세미나 - RestFul API Basic
한국청소년정보과학회 1회 세미나 - RestFul API Basic
 
웹소켓 (WebSocket)
웹소켓 (WebSocket)웹소켓 (WebSocket)
웹소켓 (WebSocket)
 
Amazon kinesis와 elasticsearch service로 만드는 실시간 데이터 분석 플랫폼 :: 박철수 :: AWS Summi...
Amazon kinesis와 elasticsearch service로 만드는 실시간 데이터 분석 플랫폼 :: 박철수 :: AWS Summi...Amazon kinesis와 elasticsearch service로 만드는 실시간 데이터 분석 플랫폼 :: 박철수 :: AWS Summi...
Amazon kinesis와 elasticsearch service로 만드는 실시간 데이터 분석 플랫폼 :: 박철수 :: AWS Summi...
 
NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템
 
Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos
 
MongoDB 신제품 및 신기능 소개
MongoDB 신제품 및 신기능 소개MongoDB 신제품 및 신기능 소개
MongoDB 신제품 및 신기능 소개
 
build a linux webhosting server
build a linux webhosting serverbuild a linux webhosting server
build a linux webhosting server
 
Browsing With Firefox
Browsing With FirefoxBrowsing With Firefox
Browsing With Firefox
 

모바일 메신저 아키텍쳐 소개

  • 2. Contents • 모바일 메신저 서비스 현황 • XMPP 소개 • LINE, Kakao Talk 아키텍쳐 소개 • 메신저를 만든다면? 2
  • 3. 모바일 메신저 점유율 (2014년 12월) 월간 사용자(백 만명) Reference : http://www.statista.com/statistics/258749/most-popular-global-mobile-messenger-apps/ 6 억 5 억 1.7 억 4.8 천만 3
  • 4. Instant Messaging 서비스 표준화 동향 • IETF’s Session Initiation Protocol (SIP) • Henning Schulzrinne와 Mark Handley가 1996년 고안, 2000년 표준으로 채택 • IP network 상에서 음성, 화상 전화와 같은 multimedia 통신을 제어하기 위해 정의된 signaling protocol • SIP for Instant Messaging and Presence Leveraging Extensions (SIMPLE) • SIP를 기반으로 instant messaging, presence protocol 을 명세 • the open XML-based Extensible Messaging and Presence Protocol (XMPP) • 1998년 Jeremie Miller에 의해 만들어져 2004년 IETF 표준이 됨 • Instant Messaging and Presence Protocol (IMPP) • Application Exchange (APEX) Reference : http://en.wikipedia.org/wiki/Comparison_of_instant_messaging_protocols 4
  • 5. eXtensible Messaging and Presence Protocol (XMPP) • XML에 기반한 실시간 메시지 지향 공개 표준 통신 프로토콜 • 두 네트워크 피어 간에 실시간으로 메시지를 주고 받고, 
 부재 여부를 파악하며, 구조화된 정보들 전달 • Google Talk, Facebook chat, WhatsApp, 
 Windows Live Messenger 등에 이용
 
 
 
 Reference : http://www.ibm.com/developerworks/library/x-xmppintro/, http://xmpp.org/ XML DocumentClient Server
  • 6. XMPP 프로토콜 특징 특징 설명 Open free, open, public 프로토콜 Standard IETF(국제 인터넷 표준화 기구) 표준 Proven 수천 개의 서버, 수백만의 사용자 확보 Decentralized Email과 유사한 방식으로 확장 Secure SASL(Simple Authentication Security Layer), 
 TLS(Transport Layer Security) 등 규격 지원 Extensible XML namespace에 의해 자신만의 프로토콜을 코어위에 확장 Flexible IM 위에 네트워크 관리, 콘텐츠 동기화, 협업 도구, 파일공유, 게임 등 확장 가능 Diverse 수많은 회사 또는 오픈소스 프로젝트에서 다양한 응용서비스들을 출시하고 있음 6
  • 7. XML 메시징 구분 (1/2) • 스트림 (Stream) • 두 피어 간에 XML 요소를 주고 받기 위해 미리 주고 받는 XML 문서 • 포함 요소 : 서버 주소, 프로토콜 버전, 네임스페이스 • 스탠자 (Stranza) • 열려진 XML 스트림 내에 포함되어 전달되는 XML 문서 • 3가지 타입 존재 : message, iq, presence • 로스터 (Roster) : 친구 리스트 • JID(Jabber Identifier) 유일한 식별자들로 구성 • 예 : romeo@gmail.com, juliet@gmail.com 7
  • 8. XML 메시징 구분 (2/2) <stream:stream to='example.com‘ xmlns='jabber:client‘ xmlns:stream='http://etherx.jabber.org/streams’ version='1.0'> <message …..> …. </message> …………. <presence …> … </presence> …………. <iq … > … </iq> </stream:stream> <stream:stream from='example.com‘ id='someid‘ xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams‘ version='1.0'> <message …..> …. </message> …………. <presence …> … </presence> …………. <iq … > … </iq> </stream:stream>Client Server 8
  • 9. 스탠자 종류 (1/3) • 메시지 (Message) : 메시지를 전송하기 위해 사용 • 구성 요소 : to, from, type, lang, body 등 • Presence : 온라인, 자리 비움 등의 상태 표시 • 구성 요소 : lang, show, status 등 • IQ (Info/Query) : 친구 리스트 받기 등의 정보 요청 • 종류 : get, set, result, error 9
  • 10. 스탠자 종류 (2/3) 메시지 스탠자 Presence 스탠자 Reference : http://btsweet.blogspot.kr/2014/09/google-talk-xmpp-2.html 10
  • 11. 스탠자 종류 (3/3) Reference : http://btsweet.blogspot.kr/2014/09/google-talk-xmpp-2.html “get” 타입의 IQ 스탠자 “result” 타입의 IQ 스탠자 11
  • 14. LINE, Kakao Talk 등은? • 표준 프로토콜(XMPP) 가 아닌 자체 프로토콜 사용 • 대부분 자료를 공개하지 않음 • 어디서 자료를 얻을 수 있을까? • 해당 서비스 홈페이지 또는 기술 블로그 • Reverse Engineering : 패킷 분석 등을 통한 사용 프로토 콜 분석 14
  • 15. LINE • 메시지 전송 : SPDY, Apache Thrift • 서버 : nginx • 데이터베이스 : Redis -> HBase
 
 
 
 
 
 
 
 
 Reference : http://developers.linecorp.com/blog/?p=1420 15
  • 16. 기존 HTTP 프로토콜 문제 • 하나의 커넥션에서 한 번에 하나만의 요청을 처리 • 요청에 대한 응답이 순차적 • 매 요청마다 동일한 Header를 중복으로 전송 : 압축하지 않음
 
 
 
 
 
 
 
 Reference : http://www.slideshare.net/oddpoet/spdy-13231459 16
  • 17. SPDY 특징 • Multiplexing : 하나의 커넥션 안에서 다수의 독립적인 
 스트림을 동시에 처리 • Server Push : 클라이언트 요청 없이 서버에서 콘텐츠를 직 접 push 가능 • HTTP 헤더 압축
 
 
 
 17
  • 18. Apache Thrift (1/2) • 페이스북이 개발한 규모 가변적인(scalable) 이종 언어 서비스 개발을 위한 소프트웨어 프레임워크 • 데이터 교환을 쉽게 하기 위한 목적 : XML, JSON, Protocol Buffers 등과 유사 • 최소의 부하로 이기종 언어간 Serialization 지원 • Thrift 도구를 통해 다양한 언어의 코드 자동 생성 • C++, Java, C#, PHP, Python • Ruby, Erlang, Perl, Haskell, Cocoa, Smalltalk, Ocaml 등 18
  • 21. CPU 부하 (%) 비교 21
  • 22. nginx • 트래픽이 많은 웹사이트를 위해 네트워크 확장성을 주목적으로 설계 한 경량 HTTP 서버 • 아파치 웹 서버를 대체할 대안으로 급부상 중 • 비동기 이벤트 기반 구조 (아파치는 스레드/프로세스 기반) • 사용하는 곳 • Facebook, NetFlix, WordPress, GitHub, Zynga, Sourceforge 등 • 한국에서는 네이버 첫 페이지, 카카오톡 공지사항 서버 Reference : http://nginx.org/en/docs/ 22
  • 23. Web Server 점유율 (2014년) 아파치 39%, IIS 29%, nginx 15% Reference : http://news.netcraft.com/archives/2014/05/07/may-2014-web-server-survey.html 23
  • 24. 이벤트 기반 구조 (1/2) Reference : http://www.iij.ad.jp/en/company/development/tech/mighttpd/ 24
  • 25. 이벤트 기반 구조 (2/2) • 아파치 웹 서버 • 스레드/프로세스 기반 구조 • 클라이언트의 요청이 들어오면 스레드를 생성 • 사용자가 많으면 많은 스레드 생성 : 메모리 및 CPU 낭비, Context-Switching Overhead 발생 • nginx • 비동기(async) 이벤트(ioctl, send, recv, epoll) 기반 구조 • 다수의 연결을 효과적으로 처리 • 대부분의 코어 모듈이 Apache보다 적은 리소스로 더 빠르게 동작 Reference : http://opentutorials.org/module/384/3462 25
  • 26. Redis • "REmote DIctionary System"의 약자로 메모리 기반의 
 Key/Value Store • 빠른 처리(read/write) 속도와 검증된 소프트웨어 안정성 
 제공 • 다양한 데이터 구조 저장 : String, hash, lists, sets, sorted set, bitmap 등 • 사용하는 곳 : 트위터, 핀터레스트, 인스타그램, 텀블러 등 Reference : http://redis.io/ 26
  • 27. HBase • 기존 Redis NoSQL 의 한계 • 많은 Memory 공간을 필요, 분산 저장 시스템이 아님 • 다양한 NoSQL 비교 : HBase, Cassandra, MongoDB • Benchmark 도구 : YCSB(Yahoo! Cloud Serving Benchmark), 자체 Benchmark 도구 이용 • 요구사항 : 각 시나리오에 따른 시간 제약, 
 read/write O(1), random reads O(n) 등 Reference : http://developers.linecorp.com/blog/?p=1420 27
  • 28. Kakao Talk • 메시지 전송 : HTTP 기반 json 전송 -> LOCO Protocol • 서버 : 루비온레일즈 -> C++ • 데이터베이스 : MySQL, MariaDB, TokuDB, 멤캐시드, 카 산드라
 
 
 Reference : http://blog.kakao.com/311 2011년 4월 ‘겁나빠른황소’ 프로젝트 28
  • 29. LOCO Procotol (1/2) • 3가지 타입의 패킷 • LocoSecureHandShakePacket : 서버와 통신을 위해 세 션을 여는 패킷(LOGIN 커맨드 패킷) • LocoSecureNormalPacket : LOGIN 커맨드 패킷을 AES encrypt 한 후 서버와 통신(세션 유지) • LocoPacket : 암호화가 적용되지 않는 패킷 Reference : https://www.bpak.org/blog/2012/12/ 29
  • 30. LOCO Procotol (2/2) • 패킷 아이디 : 패킷 구분 • 상태 코드 : 커맨드/패킷 상태 코드 • Method : 메시지 전달, 대화 상대 추 가, 차단, 채팅방 리스트 등 • Body Type, 길이, 내용 Reference : https://www.bpak.org/blog/2012/12/ 30
  • 31. DB 구성도 (1/2) •RDBMS •MySQL : 출시 초기 사용한 데이터베이스 •TokuDB : 로그를 쌓는데 활용 •NoSQL •MariaDB •MySQL과 동일한 코드 기반, 사용 방법과 구조가 동일, •MySQL과 99.99%의 바이너리 호환성을 제공 •초당쿼리처리 속도 2~10% 빠름 •쿼리 최적화, 서브쿼리 지원, 조인 작업 시 색인 사용률 등에서 성능 향상 효과 •memcached : 데이터 요청을 캐시에서 직접 서비스, 데이터베이스에 연결된 디스크 스토리지에 대 한 접근을 줄임 •Cassandra : 분석 데이터베이스로 활용 31 Reference : http://www.oss.kr/oss_repository10/517682
  • 32. DB 구성도 (2/2) 32 Reference : http://www.oss.kr/oss_repository10/517682
  • 34. 메신저 서버/클라이언트 구현 (1/3) • XMPP 기반 서버/클라이언트 • 서버 : Openfire, MySQL, JDK • 클라이언트 : Spark(PC client), 
 Smack(Java library), 
 aSmack(Smack on Android) 등
 
 
 
 Reference : http://www.igniterealtime.org/ 34
  • 35. 메신저 서버/클라이언트 구현 (2/3) References : http://www.igniterealtime.org/,http://nekomimi.tistory.com/660 PC 클라이언트 안드로이드 클라이언트 35
  • 36. 메신저 서버/클라이언트 구현 (3/3) Reference : http://www.oss.kr/index.php?document_srl=100642&category=69425&mid=oss_repository14 36