[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
Upcoming SlideShare
Loading in...5
×
 

[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?

on

  • 5,840 views

커빙의 Django, Celery, Azure Cloud, SNS 연동, 컨텐츠 수집 기술을 한눈에 볼 수 있도록 소개한 자료 입니다. ...

커빙의 Django, Celery, Azure Cloud, SNS 연동, 컨텐츠 수집 기술을 한눈에 볼 수 있도록 소개한 자료 입니다.

커빙을 처음 개발하면서 많은 어려움이 있었고,
또 많은 분들의 도움으로 좋은 결과를 얻을 수 있었습니다.

조금 더 깊은 내용을 다뤘으면 하는 아쉬움이 있지만,
다른 분들에게 조금이나마 도움이 되었으면 좋겠네요!

Statistics

Views

Total Views
5,840
Views on SlideShare
5,803
Embed Views
37

Actions

Likes
24
Downloads
56
Comments
1

1 Embed 37

https://twitter.com 37

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요? [커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요? Presentation Transcript

  • STACK UP YOUR SOCIAL LIFE 주식회사 내일비 / 최상호 / CTO sangho@gmail.com 2013/08/26 TECH STORY 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
  • 커빙? 추억을 기록하는 서비스! 온/오프라인에 산재되어 있는 사용자의 소셜 콘텐츠들을 수집하여 사용자만의 하나의 스토리를 만들 수 있는 서비스 Copyright © 2012-2013 NaleBe, All Rights Reserved.
  • 프롤로그 2012년 3월.. 기획/디자인/마케팅 4명, 개발자 2명이 커빙 기획/개발 시작 신입사원만 3년째 + 진짜 신입 개발자 뭘 어떻게 시작해야 하지? 맨-붕- Copyright © 2012-2013 NaleBe, All Rights Reserved.
  • 준비운동 영감 얻기 Tumblr, 99designs, Flickr, Pinterest 아키텍쳐 이것만은 꼭! 빠른 개발 수월한 문제해결 가능한 적은 언어와 기술기반 Python with Django and Celery on the Cloud 그리고 [모험]과 [도전]-! http://highscalability.com/blog/2012/2/13/tumblr-architecture-15-billion-page-views-a-month-and-harder.html http://99designs.com/tech-blog/blog/2012/01/30/infrastructure-at-99designs/ http://highscalability.com/flickr-architecture http://highscalability.com/blog/2012/2/16/a-short-on-the-pinterest-stack-for-handling-3-million-users.html Copyright © 2012-2013 NaleBe, All Rights Reserved.
  • 개발 스토리 Copyright © 2012-2013 NaleBe, All Rights Reserved. 2012년 3월 프로젝트 시작 6월 MS/KOTRA Smart Growth 1기 사업 선정 클로즈 베타 시작 7월 슈퍼 앱 코리아 최우수상-문화부 장관상 수상 9월 1차 오픈베타 시작, 안드로이드 앱 출시 GMIC SV G-Startup "runners-up(2nd prize)", "Platinum(특별상)" 수상 10월 실전창업리그-슈퍼스타V 최우수상 및 특별 상(엔젤투자상) 수상 11월 대규모 업데이트 12월 Microsoft와 Bizspark Plus 파트너쉽 체결 (국내 최초 MS 본사 협약) 2013년 2월 MS/KOTRA Smart Growth 2기 사업 선정 3월 Agile/Scrum 프로세스 도입 4월 2차 오픈베타 시작 7월 대규모 업데이트 싸이월드 수집 시작 윈도우 8 앱 출시
  • 전반적인 구조 Copyright © 2012-2013 NaleBe, All Rights Reserved. Azure Load Balancer RESTful + Json Azure Virtual Network Application Server Task Worker Azure Storages Cache Task Broker/Result Backend Database [Blob Storage] - PostgresSQL - File System은 Azure Blob Storage에 연결 - Replication을 통한 데이터 이중화 및 트래픽 분산 :: - NoSQL의 한 종류 - 대용량의 Structured data 서비스 - Notification 및 User Activity 저장소로 활용 - Python-Celery Worker - Common, Aggregation 그룹 - Celery Routing Method를 이용하여 분산 환경에서 비동기 Task 수행 :: :: - Python-Django - Front-end와의 직접적인 커뮤니케이션 - RESTful API 제공 - Redis: in-memory storage - Redis: in-memory storage [Table Storage] - Static Files, Image 등 binary 데이터 스토리지 - VM Filesystem Management/Monitoring [statsd/Graphite] [Ganglia][Django Admin] [Sentry] [Flower]
  • 장고(DJANGO) 와 친구들 Copyright © 2012-2013 NaleBe, All Rights Reserved. + 50+ 모듈 - celery - social-auth - tastypie - requests - sorl-thumbnail ..... many more - south - fabric - supervisor - gunicorn - rosetta - 파이썬 기반 경량 웹 프레임워크 - 다양한 확장 모듈 - MVT (Model -View -Template) 패턴 기반 - ORM (Object Relational Mapper) 기반의 쉽고 빠른 데이터 구성 및 접근 - 훌륭한 성공사례 (Pinterest, Instagram, Disqus 등) - Stack Overflow와 Quora의 수많은 사용자와 질의응답 안정적인 기술, 빠른 개발, 손쉬운 배포 => 생산성 증가 =
  • 소셜 서비스와 연결하기 Copyright © 2012-2013 NaleBe, All Rights Reserved. Django Social Auth url(r'^login/(?P<backend>[^/]+)/$') url(r'^disconnect/(?P<backend>[^/]+)/$') Service Backends Authentication Pipeline Django Social Auth View oAuth 1.0 oAuth 2.0 OpenID oAuth 2.0 oAuth 1.0 oAuth 2.0 (SK Planet 제공) is ready! Default Default Custom Default Server-side Authentication - Monkey patch 방식으로 기존 소스 수정 없이 커스터마이즈 할 수 있음. - oAuth 1/2, OpenID 방식의 서비스는 비교적 쉽게 추가 가능. Exception Middleware
  • 몽키패치 (MONKEY PATCH) Copyright © 2012-2013 NaleBe, All Rights Reserved. 런타임 환경에서 기존 코드의 변경 없이 기능 변경 및 확장하는 방법 Python, Ruby와 같은 동적인 언어에서 지원. 특히 3rd-party 모듈의 Customize 및 패치에 유용 Case 1. Sorl thumbnail에서 GIF 이미지 Resizing 허용 from sorl.thumbnail import base base.EXTENSIONS.update({'GIF': 'gif'}) Case 2. Django-debug-toolbar bug patch import thread from debug_toolbar.middleware import DebugToolbarMiddleware def monkey_process_view(self, request, view_func, view_args, view_kwargs): __traceback_hide__ = True toolbar = self.__class__.debug_toolbars.get(thread.get_ident()) if not toolbar: return result = None for panel in toolbar.panels: response = panel.process_view(request, view_func, view_args, view_kwargs) if response: result = response return result DebugToolbarMiddleware.process_view = monkey_process_view http://blog.naver.com/PostView.nhn?blogId=ez_&logNo=140164112218 https://github.com/django-debug-toolbar/django-debug-toolbar/commit/c9d3f34757e6a926dab9b37f33df36c1755ee05c [wikipedia]
  • 셀러리(CELERY) 개요 Copyright © 2012-2013 NaleBe, All Rights Reserved. Python으로 구현된 메시지 기반의 단순하고 유연하며 신뢰할 수 있는 비동기, 분산Task/Job Queue 시스템 [homepage] Broker Worker 1 Worker N ... Message Message Pulling Task 1 Task 2 Task 3 Task 1 Task 4 Task 5 Router Job/Task Queue Message -Task/Job에 대한 정보, 속성, 결과 등 (name, uuid, args, etc, uuid, result, etc,.) - pickle, json, yaml 등의 형태 Broker - Message가 적절한 Worker에게 전달될 수 있도록 중계 - RabbitMQ, Redis, MognDB 등으로 운영 Worker - Celery Worker Process - Broker로 부터 전달받은 Message를 해석하여 적절한 Task/Job을 수행 Tasks - Python Class로 구현되며Task/Job의 실행 단위 - Group, Chain, Chord, Map, Chunks등의 요소를 통해 비동기/분산 환경에서Task를 유연하게 활용할 수 있음
  • Router Celery Worker Group 소셜 컨텐츠 모아오기 Copyright © 2012-2013 NaleBe, All Rights Reserved. Aggregation Initializer Facebook Handler Twitter Handler Cyworld Handler [Task Broker] [Result Backend] [FB-1] [TW-1] [CY-1] [FB-2] Name: fb-1 Queue: aggr_fb, aggr_default Concurrency: 400 N: fb-2 Q: aggr_fb, aggr_default C: 400 N: tw-1 Q: aggr_tw, aggr_default C: 400 N: cy-1 Q: aggr_cy, aggr_default C: 400 class AggregationRouter(object): def route_for_task(self, task, args=None, kwargs=None): if task in ['aggregation.v0_5.facebook.trigger', 'aggregation.v0_5.facebook.posts.start', 'aggregation.v0_5.facebook.posts.save', 'aggregation.v0_5.facebook.albums.start', 'aggregation.v0_5.facebook.albums.folder', 'aggregation.v0_5.facebook.photo.save', 'aggregation.v0_5.facebook.request']: return {'queue': 'aggr_fb', 'exchange': 'aggr_fb', 'exchange_type': 'topic', 'routing_key': 'aggregation.facebook.tasks'} <JSON message> <JSON message> <JSON message> <JSON message> Django Social Auth PlanetXAPI.get_cy_photo_albums(user) Requests Wrapper
  • MS 윈도우 애져(AZURE) Copyright © 2012-2013 NaleBe, All Rights Reserved. Linux VM (Virtual Machine) - Scale up/out이 비교적 간단함 - File Storage를 Blob Storage와 연동하여VM 환경의 가용성 바깥에서 발생하는 문제를 효과적으로 대응할 수 있음 -Visual Studio와 Power Shell같은 강력한 AzureVM 원격 관리 환경이 윈도우에서만 제공되는점은 아쉬움 Virtual Network - 사용하는 서버 군을 동일한 가상 네트워크에 할당 함으로서 분산 환경에서의 통신 및 관리 효율을 극대화 할 수 있음 Blob Storage - Binary 파일 저장소로 CDN(Content delivery network) 제공 Table Storage - NoSQL 타입의 저장소로서 Restful API를 사용하여 구조화된 데이터를 비교적 빠르고 쉽게 저장하 고 질의할 수 있음 MS에서 제공하는 클라우드 서비스 Linux/WindowsVM, Cloud Storage, MSSql, NoSQL 등의 각종 서비스를 IaaS 혹은 PaaS 형태로 제공 Azure Dashboard Menu
  • 애져에서 장고 운영하기 Copyright © 2012-2013 NaleBe, All Rights Reserved. LinuxVM과 장고 서비스를 운영하기에 비교적 안정적이며, BizSpark 파트너쉽과 연계하여 국내 스타트업이 처음 도입하기에 수월 Django Filesystem과 Blob Storage의 연동 - MS에서 공식적으로 Azure Python 라이브러리 제공 - Django-storages 모듈에서 Blob Storage 지원 (>= 1.1.7) - 커빙이 처음 Azure에 올라갔을 때에는 AzureStorage 모듈이 없어 자체 구현 (Blob storage의 기본 content-type이 application/octet-stream이며 라이브러리에서 수동으로 설정 하도록 되어 있어 MIME type 기반으로 자동 설정 하도록 함) Table Storage의 활용 - Django Storage와 Django Model Query-set을 참조하여 CRUD Wrapper(insert, delete, update, filter method) 자체 구현 - 특히 filter의 경우 Django Model Query-set과 유사항 형태로 구현 - 커빙에서는 비동기 Notification을 위한 noti-storage로 활용 애져에서 장고 운영하기는 전체적으로 무난 - Storage 외에는 OpenStack 계열이나 Amazon ec2의VM 서비스와 큰 차이는 없음 - Azure Python 라이브러리는 잘 제공되고 있으나 문서화는 부족한 편. 주석이 워낙 잘 적혀 있고 코드도 공개되어 있어 특별 히 문제가 되지는 않음. 특히, 최근 라이브러리나 문서들이 빠른 속도로 업데이트 되고 있음 - Redis나 PostgresSQL처럼 Start-up들이 최근 많이 사용하는 솔루션을 기본 서비스로 제공하지 않지만 LinuxVM에서 운영 하는데 무리가 없음 [BizSpark]
  • 서비스 배포: FABRIC Copyright © 2012-2013 NaleBe, All Rights Reserved. Python 기반의 command-line 도구로서 ssh 기반의 원격 command 제공 fab command args or kwargs: Simple command fab run_server -> 로컬 서버 가동 Command with arguments fab run_server:prod.live -> live 모드 서버 로 가동 Command with keyword arguments fab collect_static:mode=prod.live,options=-c -> static 파일(image, css, js) 배포 Command Channing fab app reload_gunicorn -> 모든 원격 app 서버의 gunicorn 재시동 fab app collect deploy -> 모든 원격 app 서버 업데이트, static 파일 배포 및 재시동 fab worker deploy -> 모든 원격 celery worker 서버 업데이트 및 재시동 fab aggregator reload_celery -> 원격 aggregation worker 서버만 celery 재시동 [homepage] * fabfile.py에 정의
  • 장고 관리페이지 (DJANGO ADMIN) Copyright © 2012-2013 NaleBe, All Rights Reserved. Django Model 기반으로 자동 생성되는 관리페이지 제공 [Django Admin] [Django Admin with Grappelli] Django ORM 기반 - Model Definition에 따라 CRUD가 편리한 FORM 및 Validation 자동 제공 권한과 그룹 - 관리자 타입(staff, superuser)과 사용자 그룹 정의, 그룹에 따른 권한을 모델별로 할당 함으로서 필요한 관리자에게 적 절한 정보 접근 권한을 분배할 수 있음 Customize - Action, Form,Template 등 거의 대부분의 요소에 대하여 비교적 쉽게 커스터마이즈 해서 사용할 수 있음 Django Grappelli [homepage] - 3rd-party로 제공되는 admin interface로서 기본 UI보다 유 려하고 동적이며 직관적인 UI 및 커스터마이즈 기능 제공
  • 관리자 페이지 기반 이메일 발송 시스템 Copyright © 2012-2013 NaleBe, All Rights Reserved. + [Django Admin] [Admin Actions] 수신자 model 메일 컨텐츠 model 메일 발송 model 발송 내역 model + + Django Admin을 사용하면 사내의 비 개발팀(경영지원, 마케팅 등)에 필요한 프로그램을 손쉽게 개발할 수 있어 사내 업무효율 향상에 큰 도움이 됨 1. 수신자 등록 (지속적으로 관리) 2. 메일 컨텐츠 등록 3. 메일 발송 건 등록 (수신자와 발송할 메일 컨텐츠 선택) 4. 테스트 메일 발송 및 리뷰 5. 발송준비 완료 처리 6. 메일 발송 (이전 단계가 처리가 되어있지 않으면 발송 불가)
  • 모니터링 및 로깅 Copyright © 2012-2013 NaleBe, All Rights Reserved. Ganglia 분산 자원 통합 모니터링 시스템 다양한 플러그인 제공 statsd + Graphite statsd: 단순한 stat 전송 client graphite: 수집된 stat을Visualization 시켜주는 시스템 커빙에서는 사용자 request 통계(메뉴별, 성별별 등)에 활용 Flower Web 기반 Celery 모니터링 및 관리 시스템 Task, Queue 모니터링 및 상태 조회/변경 제공 특히 언제 어디서나 Worker 상태를 확인할 수 있고 디버깅에도 유용하다 는 것이 큰 장점 Sentry Disqus 팀에서 Django를 기반으로 개발한 실시간 로깅/오류 레포팅 시스템 사용자 관리, 이메일 노티, 비교적 상세한 Stacktrace 제공하며 다양한 개발 환경 지원
  • 애자일 방법론 (AGILE METHODOLOGIES) Copyright © 2012-2013 NaleBe, All Rights Reserved. 기획 디자인 구현 마케팅 2주 고객 제품 주인 임직원 제품 백로그 우선순위 할당 Story 추가 Sprint 1 Sprint 2 Sprint 3 모든 절차 필요 디자인 불필요 기획 불필요 구현만 필요 전 직원이 제품 기획에 참여하고 디자인과 구현, 마케팅이 짧은 주기 단위로 반복되어 소수의 인원 이지만 최고의 생산성을 발휘
  • 에필로그 Copyright © 2012-2013 NaleBe, All Rights Reserved. 2013년 8월.. 정식 서비스 개시 Thanks to 스마트스터디 CTO 박현우 님 한국MS 박승호 부장님, 이건복 차장님 코트라 Smart Growth 사업팀 전 세계의 오픈소스 개발자 그리고, 내일비 식구들!!!
  • 감사합니다-! http://www.cubbying.com/
  • Copyright © 2012-2013 NaleBe, All Rights Reserved. 커빙은 열정 가득한 구성원들이 만듭니다! 함께 하실 분은 james@nalebe.com으로 연락주세요.