[테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

54
개개개개 개개개 개개개 개개개개개 개개개 개개개 2015-10-27 Youngjae KIM, Azure MVP

Transcript of [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

Page 1: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요2015-10-27

Youngjae KIM, Azure MVP

Page 2: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

저는요• 김영재• Azure MVP (2014~)• ㈜바풀 , 바로풀기 서비스 개발총괄• ( 전 ) 카이스트 디지털미디어연구소 연구원 • ( 전 ) 영국 Ubisense UK 기술컨설턴트 • ( 전 ) 일본 국립전자통신연구소 스마트홈 미들웨어 연구원

• 바로풀기 소개• 소셜서비스 스타트업 (23 억원 투자유치 , 12 명 직원 )• 중고등학생 학습 서비스 MAU 1 위

Page 3: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

먹고 자고 코딩하는거 좋아하는 개발자

Page 4: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

이 세션의 대상은

• 이득• 다른 솔루션 유저• 처음 관련된 시나리오의 제품을 만드시는 분• 어쩌다 들어오신 분

• 손해• 이미 오늘 소개할 Azure 서비스를 사용 중인분• 어떤 기술 앞에서도 시큰둥한 분• 절대로 클라우드를 도입할 가능성도 생각도 없으신 분

Page 5: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

???

Page 6: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

들어가는 이야기

Page 7: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

프로그래머란 ?

• 컴퓨터가 문제를 해결하도록 시스템을 만드는 사람• 저 수준의 데이터를 고 수준으로 바꾸는 사람

Page 8: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

흔한 인터넷 서비스 시나리오

유저가 앱으로 무엇인가를

하면백그라운드 작업 후에

잠시 후 푸시가 오고

Page 9: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

프로그래머가 할 일은

• 무엇인가를 정의• 작업에서 의미를 추출• 푸시로 다음 데이터 흐름을 유도

유저가 앱으로 무엇인가를 하면

백그라운드 작업 후에

잠시 후 푸시가 오고

이 외의 일에는 시간을 최소한으로 써야 한다 !

Page 10: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

판단• 돈 내고 쓰는 솔루션 vs. 서버를 직접 관리하는 자신감• 더 빨리 런칭할 수 있는가• 더 안정적으로 관리할 수 있는가• 더 확장에 대비할 수 있는가• 클라우드 사고방식 . 동의 못하면 의미 없음• 퍼포먼스는 확장성과 돈으로 커버 가능• 그 대신 시간과 운영 편의를 얻는다

Page 11: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

Azure 3 년 써보니…

• 2 년간 좋음• 좋은 이유는 좋게 만들었기 때문

Page 12: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

오늘 다룰 내용

• Azure 가 제공하는 Message Queue• Push Notification Hub 사용법• 이들을 이용한 WebJob 데모

Page 13: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

흔한 인터넷 서비스 시나리오

유저가 앱으로 무엇인가를

하면백그라운드 작업 후에

잠시 후 푸시가 오고

Page 14: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

흔한 구조

REST APIBack-

ground Worker

Push Noti-ficationServer

Message Queue

(MQ)

Page 15: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

Azure 대응 #1

Web Role Worker Role

Notifica-tion Hub

Service Bus

Page 16: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

Azure 대응 #2

WebSites WebJobs Notifica-tion Hub

Storage Queue

Page 17: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

소개할 Azure 구성요소• Azure Queue• Azure Service Bus• Azure WebJobs• Azure Push Notification Hub

Page 18: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

1. Message Queue

Page 19: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

MQ 의 조건• 중요도순• 안정성• 퍼포먼스 ( 초당 처리량 )• 확장성• API 편의성• 보안 : 주로 내부 통신용으로 사용

Page 20: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

Comparison

Azure Rabbit MQ안정성 ++ ++퍼포먼스 ++ +++확장성 +++ +API +++ ++

AWS SQS 와의 비교 ?- 두 클라우드는 무엇을 선택하든 성능 , 가격 , 안정성이 비슷합니다 . 가격은 Azure 가 좀 더 저렴 ( 후발주자니까 ?!)

가격 비교- 100 msg/sec 이상은 RabbitMQ + Large VM * 3 개 운영이 더 저렴 ($535 수준 ) [참고링크]- 시간비용까지 생각하면 200 msg/sec 정도를 기준으로 삼아도 될 듯

Page 21: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

“ 큐 (queue) 로 이벤트 처리하고 싶어요“

Azure Queue 로 쉽고 빠르게 만들기 Service Bus 로 발전적으로 만들기동작원리- Storage 의 응용판장점- 대용량 대응- Azure WebApp 의 WebJob 의 쉬운 바인딩단점- 큐 기능에만 충실할 뿐

동작원리- Service Bus 에 기록하면 Subscribe 로 작동장점- 더욱 풍부한 메시징 API, AMQP- 다양한 유형의 브로커 처리 (topic, relay, …)

단점- 저렴하다고 할 순 없음 .

두 기술의 차이 상세 설명• 스펙 비교 : https://azure.microsoft.com/ko-kr/documentation/articles/service-bus-azure-and-service-bus-queues-compared-contrasted/ • 코드 비교 : http://msdn.microsoft.com/en-us/magazine/jj159884.aspx

Page 22: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

1.1 Azure Queue (Storage)

Page 23: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

특징• Blob 기반 Database 인 Azure Storage 를 이용한 Queue• 그래서 가지는 특징은

• 대용량 큐 저장 가능• 빠르게 넣고 뺄 수 있음 (latency < 10ms)• 저렴한 가격• 메시지 단위 Lock

• 그래서 발생한 단점은• 순서 처리를 보장 안함• 트랜잭션 안됨• 폴링으로만 처리• AMQP 같은 고상한건 지원 안함

• 임의로 만든 점• 최대 7 일 저장 (TTL)

Page 24: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

Azure Queue 사용 예시

어딘가에서 입력

Azure Storage

Queue

Blob

Table

Web App

WebJob

Queue 는 입력받으면 WebJob 에서 자동으로 실행 , 결과는 Azure Table 등에 담을 수 있음 .

트리거사실은 Pollin

g 으로 동작

Page 25: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

솔직히…• 문서화가 너무 잘되어있어서 딱히 설명할 것이 없네요 !• API 사용법 : https://

azure.Microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-queues/

• 바로 데모 프로그램을 실행해봅시다

Page 26: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

Azure Queue 활용 예시• Azure WebJob 과 연동

• 콘솔프로그램을 만든 후 github 에 올리면 자동으로 Pull Compile Deploy 동작 .• 브라우저에서 테스트 및 로그 확인 가능 .• 자동 스케일링 지원 .• 트리거 , 계속 , 스케줄링 등 실행유형 지정 .

• 참고사항• 간단한 작업에 좋음

• 대표적인 예시 : 이미지 압축• 속도가 빠르진 않음

• 관련 문서• WebJob 시작하기• WebJob 관련 자료 모음

Queue 를 바인딩

Page 27: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

곁다리 지식 : Azure WebJobs 의 주요 특징• 병렬적 처리 : 16 개 ( 기본값 ) 의 큐를 벌크로 받아와서 처리• 멀티스레드로 동작 : 병렬 같은 병렬 아닌 동작• 그러므로 주의사항은 !

• 같은 메시지가 두 번 처리될 수도 있음 . 즉 , 같은 메시지에 대해 다른 결과가 나오도록 하면 안됨• Azure WebApp 의 인스턴스 수에 제약이 됨• 간단해서 쓰는거지 좋아서 쓰는거 아니다 !

• 이미지 리사이즈 등에 사용

Page 28: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

난데없이 퀴즈퀴즈 !

• 다음 중 Azure Queue Storage 가 제공하는 기능이 아닌 것은 ?1. 80GB 이상의 메시지 저장2. 5 일 이상의 TTL3. AMQP v1.04. WebJob 바인딩

Page 29: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

1.2 Service Bus

Page 30: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

Service Bus 개요• Push Notification Hub 도 Service Bus 중 Topic 의 응용 .• 구성• Queue• Topic• Relay• Notification Hub

요렇게 네가지

Page 31: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

Service Bus 간단 개념잡기• Queue

• 일명 ‘선입선출 (FIFO)’ 방식의 데이터 처리를 위한 대기열 .• 주로 이벤트 처리에 활용 .• OS 의 핵심 요소 중 하나 .

• Topic• Queue 의 확장판으로 분기해주는 switch 가 더해짐 .• 일명 Publisher-Subscriber 방식이라고도 함 .• 분산시스템의 핵심 요소 중 하나 .

• Relay• WCF 를 활용한 서비스 제공 모델 .• WCF 기반으로 서비스가 구축된 엔터프라이즈 환경에 적합 .• 참고 : WCF 는 REST 기반 웹 API 기능 외에 , 동기화 , 양방향성 , 세션처리 , 보안 등에 여지가 많음 .

Page 32: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

Service Bus Queue

단순한 구조인만큼 코드도 간단함 .http://azure.microsoft.com/en-us/documentation/articles/service-bus-dotnet-how-to-use-queues/

Page 33: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

Service Bus Topic

중요 개념 : 가상의 큐가 각 토픽마다 할당된 것과 마찬가지 .http://azure.microsoft.com/en-us/documentation/articles/service-bus-dotnet-how-to-use-topics-subscriptions/?fb=ko-kr

Page 34: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

코드 들여다보기• 바로풀기가 사용 중인 Service Bus Queue

Page 35: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

2. Azure Notification Hub

Page 36: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

그래서 많이 보이는 글

Page 37: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

Azure Push Notification Hub

• Azure ServiceBus 에 Token DB 와 push endpoint 를 추가한 형태• 퍼포먼스는 ServiceBus 에 종속적• 입력은 초당 2000 건• 하지만 출력은 모른다 !?

• 일종의 푸시 미들웨어• 다양한 토큰규격 , 핸드쉐이크 형태를 일원화하고 통합 ID 로 관리• 한 유저의 멀티디바이스에 대응하기 편리

Page 38: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

사용 형태

Device 1 RegisterGateway

Push Notification

Hub

RequestPush

NotificationHub

Device 1

Device 2

Device 3

1. 기기 등록

2. 전송reg_id

handle

Page 39: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

API Overview

• 등록 형태 : 단말 별로 템플릿을 등록하여 처리

Page 40: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

API Overview

• 전송은 단말 무관하게 코드 한 줄 .

Page 41: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

Notification Hub 작동 원리 ( 기본 )

어딘가에서 입력사용자 단말로 전송Google GCM

Apple APNS

Windows WNS

푸시 플랫폼 별 토큰을 이용하여 전송

Azure Topic 처리기

전송 결과 취득불량 전송 건에 대한 피드백 처리

Page 42: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

Notification Hub 작동 원리 ( 상세 )

어딘가에서 입력사용자 단말로 전송Google GCM

Apple APNS

Windows WNS

푸시 플랫폼 별 토큰을 이용하여 전송Azure Topic 처리기

전송 결과 취득불량 전송 건에 대한 피드백 처리

토픽 1+ 채널 +내용토픽 2+ 채널 +내용토픽 1

+ 내용

채널 + 토픽 1 등록

Topic & Channel Key-Values

1

2

4

5

63

Page 43: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

푸시 태그를 잘 생각해서 써야 한다• 태크는 Key 이며 , Key-Value 로 이루어진 값을 대상에게 전송합니다 .

• Service Bus 토픽이 곧 Push Notification 태그• 기본 활용 : 한 ID 의 단말에 보내고 싶다

• 태그명 : userId• 예시 : userId=Youngjae• 참고 : userId=Youngjae 로 등록된 모든 단말에 전송 ( 내 모든 단말 )

• Microsoft 를 “좋아요” 한 사람들에게 보내고 싶다 .• 태그명 : like• 예시 : like=Microsoft

• Microsoft 를 “좋아요” 한 한국어 유저들에게 보내고 싶다 .• 태그명 1: like, 태그명 2: locale• 예시 : like=Microsoft && locale=“ko-KR”

Page 44: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

실제로는 ?

1. 태그에만 맡기기에는 서비스가 보다 세밀하게 타겟팅 하길 원함2. 서비스가 워낙 변화무쌍하게 바뀌어서 푸시 DB 를 갱신하는 것은 비효율적3. 태그 DB 와 로직 DB 를 모두 관리해야 함잘 안쓰임 ! 그냥 ID/ 전체 보내는 방식으로 커버최소한의 카테고리를 태깅 : locale, userId, gender

Page 45: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

템플릿• 템플릿은 클라이언트에서 $(name) 과 같이 변수껍데기를 등록하면 보낼 때

name=“youngjae” 식으로 내용을 채워서 받을 수 있음 .• 사용 시나리오

• 한국어 유저의 폰 등록 Template = “$(Korean)”• 서버 전송 Korean=“ 안녕” , English=“hello”• 클라이언트는 푸시를 받을 때 “안녕“만 취득함 .

• 토픽과 적절히 섞어 쓰면 맞춤 푸시를 보낼 수 있음 .• 태그는 수신 대상을 규정• 템플릿은 해당 범위에 세부적인 맞춤 정보를 제공

• 적용시 중요 : 서비스에서 기획이 명확하게 잡혀있어야 효과가 좋음 .• 안그러면 땜빵 템플릿이 넘칠 수도 있음 .

Page 46: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

실용적인 팁• 항상 태그에 “ userId: 아이디“를 기본으로 적용하면 좋음 .• 해당 ID 에 맞추어 모든 기기로 전송됨 .• 어차피 보낼 때 태그가 없으면 모두에게 보냄 (broadcast)

장점이지만 대재앙이 될 수 있으니 서버에서 깐깐하게 처리할 것 .• 동일한 이름의 template 은 덮어쓰기됨 .• 별도의 업데이트 처리 불필요 .

• 푸시는 SMS 가 아니므로 시간차가 있을 수 있음 .• Free 버전일 경우 간헐적으로 몰아서 처리됨 ( 경험상 약 1~2 분 )

Page 47: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

또 난데없이 퀴즈퀴즈 !

• 다음 중 Azure Notification Hub 가 제공하는 기능이 아닌 것은 ?1. REST API2. MMS 전송3. 예약된 푸시 전송4. Amazon 디바이스 푸시

Page 48: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

실제 적용 사례

Page 49: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

바로풀기에 처음 사용했던 Azure 구성 (Apr. 2014)

Virtual Machine

WebApp

Mobile Service

Storage

Traffic Manager

Legend

MS-SQLDB

API EndPoint(Perfor-mance)

Spring F/W

+CentOS(Large

VM)Spring

F/W+CentOS

(Small VM)

Storage Ta-ble

Storage Queue

Storage Blob

Web Fron-tend

WorkerRole

Push

ElasticSearch

EhCacheBackup

DB Azure SQL

User

MongoDB

GeneralBackup

Page 50: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

바로풀기에 현재 사용하는 Azure 구성 (Oct. 2015)

Virtual Machine

WebApp

Push Notification

Storage

Traffic Manager

Legend

MS-SQLDB

API EndPoint(Perfor-mance)

ASP.NETWebApi

Storage Ta-ble

Service Bus

Storage Blob

Worker Role Push

Orient DB

BackupDB

Azure SQL

User

GeneralBackupAzure SQL

dJango (Web)WebJobs

Page 51: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

솔직히 써보자면…• Service Bus 는 안정성은 기대보다 높습니다

• Azure 에서도 가장 안정성에 공들이는 부분 .• 2 년간 Zero downtime• https://azure.Microsoft.com/en-us/support/legal/sla/service-bus/v1_0/ • 그래도 이중화는 하세요

• Storage 좋습니다• Azure 서비스 중 제일 좋아합니다

• WebJob 은 작년에 이어 아직도 추천하지 않습니다• WebRole 이 Deploy 가 느리다는 단점 외엔 더 믿을만합니다• NewRelic 이 지원 안됨 !

• 작년보다 PaaS 를 더 신뢰합니다• WebSites 추천합니다 . 특히 닷넷서버와 결합시 제로스트레스 ! 궁극의 PaaS!• 사용경험에 직접적인 Frontend 는 Traffic Manager 를 이용한 이중화 필수입니다

Page 52: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

Azure 꿀팁 몇가지• “Service Bus 를 쉽게 관리하는 툴 없나요 ?”

• Service Bus Explorer 를 써보세요 . 설명서, 다운로드 • 다운로드 받은 후 2.1.zip 파일을 압축 풀고 ServiceBusExplorer.exe 를 실행하세요 .

• “Azure Storage 를 탐색기처럼 관리하는 툴 없나요 ?”• Azure Storage Explorer를 써보세요 .• 더 전문적인 것 ( 유료 ): Azure Management Studio

필수 아이템 !

강추 !

Page 53: [테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요

Notification Hub 소스• 꼭 한 단계씩 차근차근 해주세요 .• http://

azure.microsoft.com/en-us/documentation/articles/notification-hubs-android-get-started/?fb=ko-kr

• 메시지 보내는 서버 소스• http://

blogs.msdn.com/b/azuremobile/archive/2014/04/08/push-notifications-using-notification-hub-and-net-backend.aspx

• 좋은 예시• https://github.com/sabbour/breakingnews• 안드로이드 프로그래머는 아래 링크 참조 .

• http://www.slideshare.net/agrocholski/google-devfest-mn-notification-hubs