SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
모바일 메신저 아키텍쳐
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
모바일 메신저 아키텍쳐 소개

Mais conteúdo relacionado

Mais procurados

Microservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaMicroservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaAraf Karsh Hamid
 
Ceph scale testing with 10 Billion Objects
Ceph scale testing with 10 Billion ObjectsCeph scale testing with 10 Billion Objects
Ceph scale testing with 10 Billion ObjectsKaran Singh
 
Apache Camel K - Copenhagen v2
Apache Camel K - Copenhagen v2Apache Camel K - Copenhagen v2
Apache Camel K - Copenhagen v2Claus Ibsen
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker, Inc.
 
An Introduction to Apache Kafka
An Introduction to Apache KafkaAn Introduction to Apache Kafka
An Introduction to Apache KafkaAmir Sedighi
 
Docker and kubernetes_introduction
Docker and kubernetes_introductionDocker and kubernetes_introduction
Docker and kubernetes_introductionJason Hu
 
[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민NAVER D2
 
Distributed and Scalable JMeter
Distributed and Scalable JMeterDistributed and Scalable JMeter
Distributed and Scalable JMeterHepsiburada
 
Building CI/CD Pipelines with Jenkins and Kubernetes
Building CI/CD Pipelines with Jenkins and KubernetesBuilding CI/CD Pipelines with Jenkins and Kubernetes
Building CI/CD Pipelines with Jenkins and KubernetesJanakiram MSV
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)Brian Hong
 
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...OpenStack Korea Community
 
GitOps with ArgoCD
GitOps with ArgoCDGitOps with ArgoCD
GitOps with ArgoCDCloudOps2005
 
plProxy, pgBouncer, pgBalancer
plProxy, pgBouncer, pgBalancerplProxy, pgBouncer, pgBalancer
plProxy, pgBouncer, pgBalancerelliando dias
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해중선 곽
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영NAVER D2
 
Distributed applications using Hazelcast
Distributed applications using HazelcastDistributed applications using Hazelcast
Distributed applications using HazelcastTaras Matyashovsky
 
협업도구 및 주요 Agile practices 적용사례 v1.0
협업도구 및 주요 Agile practices 적용사례 v1.0협업도구 및 주요 Agile practices 적용사례 v1.0
협업도구 및 주요 Agile practices 적용사례 v1.0Sangcheol Hwang
 

Mais procurados (20)

Microservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaMicroservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and Saga
 
Ceph scale testing with 10 Billion Objects
Ceph scale testing with 10 Billion ObjectsCeph scale testing with 10 Billion Objects
Ceph scale testing with 10 Billion Objects
 
Graylog for open stack 3 steps to know why
Graylog for open stack    3 steps to know whyGraylog for open stack    3 steps to know why
Graylog for open stack 3 steps to know why
 
Apache Camel K - Copenhagen v2
Apache Camel K - Copenhagen v2Apache Camel K - Copenhagen v2
Apache Camel K - Copenhagen v2
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016
 
An Introduction to Apache Kafka
An Introduction to Apache KafkaAn Introduction to Apache Kafka
An Introduction to Apache Kafka
 
Nginx
NginxNginx
Nginx
 
Docker and kubernetes_introduction
Docker and kubernetes_introductionDocker and kubernetes_introduction
Docker and kubernetes_introduction
 
[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민
 
Distributed and Scalable JMeter
Distributed and Scalable JMeterDistributed and Scalable JMeter
Distributed and Scalable JMeter
 
Building CI/CD Pipelines with Jenkins and Kubernetes
Building CI/CD Pipelines with Jenkins and KubernetesBuilding CI/CD Pipelines with Jenkins and Kubernetes
Building CI/CD Pipelines with Jenkins and Kubernetes
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
 
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...
 
GitOps with ArgoCD
GitOps with ArgoCDGitOps with ArgoCD
GitOps with ArgoCD
 
plProxy, pgBouncer, pgBalancer
plProxy, pgBouncer, pgBalancerplProxy, pgBouncer, pgBalancer
plProxy, pgBouncer, pgBalancer
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영
 
Distributed applications using Hazelcast
Distributed applications using HazelcastDistributed applications using Hazelcast
Distributed applications using Hazelcast
 
Apache kafka
Apache kafkaApache kafka
Apache kafka
 
협업도구 및 주요 Agile practices 적용사례 v1.0
협업도구 및 주요 Agile practices 적용사례 v1.0협업도구 및 주요 Agile practices 적용사례 v1.0
협업도구 및 주요 Agile practices 적용사례 v1.0
 

Destaque

[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
클라우드 인프라 기반 서비스 개발 - ChatONJay 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
 

Destaque (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을 운영하고 있을까?
 

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

[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 ArchitectureSeong-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 FirefoxMatt Shin
 

Semelhante a 모바일 메신저 아키텍쳐 소개 (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