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

7,362 views

Published on

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

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

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

Published in: Technology
1 Comment
37 Likes
Statistics
Notes
No Downloads
Views
Total views
7,362
On SlideShare
0
From Embeds
0
Number of Embeds
51
Actions
Shares
0
Downloads
83
Comments
1
Likes
37
Embeds 0
No embeds

No notes for slide

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

  1. 1. STACK UP YOUR SOCIAL LIFE 주식회사 내일비 / 최상호 / CTO sangho@gmail.com 2013/08/26 TECH STORY 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
  2. 2. 커빙? 추억을 기록하는 서비스! 온/오프라인에 산재되어 있는 사용자의 소셜 콘텐츠들을 수집하여 사용자만의 하나의 스토리를 만들 수 있는 서비스 Copyright © 2012-2013 NaleBe, All Rights Reserved.
  3. 3. 프롤로그 2012년 3월.. 기획/디자인/마케팅 4명, 개발자 2명이 커빙 기획/개발 시작 신입사원만 3년째 + 진짜 신입 개발자 뭘 어떻게 시작해야 하지? 맨-붕- Copyright © 2012-2013 NaleBe, All Rights Reserved.
  4. 4. 준비운동 영감 얻기 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.
  5. 5. 개발 스토리 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 앱 출시
  6. 6. 전반적인 구조 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]
  7. 7. 장고(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의 수많은 사용자와 질의응답 안정적인 기술, 빠른 개발, 손쉬운 배포 => 생산성 증가 =
  8. 8. 소셜 서비스와 연결하기 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
  9. 9. 몽키패치 (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]
  10. 10. 셀러리(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를 유연하게 활용할 수 있음
  11. 11. 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
  12. 12. 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
  13. 13. 애져에서 장고 운영하기 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]
  14. 14. 서비스 배포: 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에 정의
  15. 15. 장고 관리페이지 (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 및 커스터마이즈 기능 제공
  16. 16. 관리자 페이지 기반 이메일 발송 시스템 Copyright © 2012-2013 NaleBe, All Rights Reserved. + [Django Admin] [Admin Actions] 수신자 model 메일 컨텐츠 model 메일 발송 model 발송 내역 model + + Django Admin을 사용하면 사내의 비 개발팀(경영지원, 마케팅 등)에 필요한 프로그램을 손쉽게 개발할 수 있어 사내 업무효율 향상에 큰 도움이 됨 1. 수신자 등록 (지속적으로 관리) 2. 메일 컨텐츠 등록 3. 메일 발송 건 등록 (수신자와 발송할 메일 컨텐츠 선택) 4. 테스트 메일 발송 및 리뷰 5. 발송준비 완료 처리 6. 메일 발송 (이전 단계가 처리가 되어있지 않으면 발송 불가)
  17. 17. 모니터링 및 로깅 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 제공하며 다양한 개발 환경 지원
  18. 18. 애자일 방법론 (AGILE METHODOLOGIES) Copyright © 2012-2013 NaleBe, All Rights Reserved. 기획 디자인 구현 마케팅 2주 고객 제품 주인 임직원 제품 백로그 우선순위 할당 Story 추가 Sprint 1 Sprint 2 Sprint 3 모든 절차 필요 디자인 불필요 기획 불필요 구현만 필요 전 직원이 제품 기획에 참여하고 디자인과 구현, 마케팅이 짧은 주기 단위로 반복되어 소수의 인원 이지만 최고의 생산성을 발휘
  19. 19. 에필로그 Copyright © 2012-2013 NaleBe, All Rights Reserved. 2013년 8월.. 정식 서비스 개시 Thanks to 스마트스터디 CTO 박현우 님 한국MS 박승호 부장님, 이건복 차장님 코트라 Smart Growth 사업팀 전 세계의 오픈소스 개발자 그리고, 내일비 식구들!!!
  20. 20. 감사합니다-! http://www.cubbying.com/
  21. 21. Copyright © 2012-2013 NaleBe, All Rights Reserved. 커빙은 열정 가득한 구성원들이 만듭니다! 함께 하실 분은 james@nalebe.com으로 연락주세요.

×