SlideShare une entreprise Scribd logo
1  sur  21
Télécharger pour lire hors ligne
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으로 연락주세요.

Contenu connexe

Tendances

처음배우는 자바스크립트, 제이쿼리 #2
처음배우는 자바스크립트, 제이쿼리 #2처음배우는 자바스크립트, 제이쿼리 #2
처음배우는 자바스크립트, 제이쿼리 #2성일 한
 
Python/Django를 이용한 쇼핑몰 구축(2018 4월 Django Girls Seoul)
Python/Django를 이용한 쇼핑몰 구축(2018 4월 Django Girls Seoul)Python/Django를 이용한 쇼핑몰 구축(2018 4월 Django Girls Seoul)
Python/Django를 이용한 쇼핑몰 구축(2018 4월 Django Girls Seoul)Youngil Cho
 
Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기성일 한
 
스프링시큐리티와 소셜연습 이해를 위한 글
스프링시큐리티와 소셜연습 이해를 위한 글스프링시큐리티와 소셜연습 이해를 위한 글
스프링시큐리티와 소셜연습 이해를 위한 글라한사 아
 
201803 파이썬 세미나
201803 파이썬 세미나201803 파이썬 세미나
201803 파이썬 세미나JeongHwan Kim
 
Aws ses 이메일 보내기 받기 송신 수신
Aws ses 이메일 보내기 받기 송신 수신Aws ses 이메일 보내기 받기 송신 수신
Aws ses 이메일 보내기 받기 송신 수신라한사 아
 
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축Youngil Cho
 
챗봇 시작해보기
챗봇 시작해보기챗봇 시작해보기
챗봇 시작해보기성일 한
 
JavaSript Template Engine
JavaSript Template EngineJavaSript Template Engine
JavaSript Template EngineOhgyun Ahn
 
현대고등학교 PHP 강의 - 7,8차시 (설리번 프로젝트)
현대고등학교 PHP 강의 - 7,8차시 (설리번 프로젝트)현대고등학교 PHP 강의 - 7,8차시 (설리번 프로젝트)
현대고등학교 PHP 강의 - 7,8차시 (설리번 프로젝트)Ukjae Jeong
 
아라한사의 스프링 시큐리티 정리
아라한사의 스프링 시큐리티 정리아라한사의 스프링 시큐리티 정리
아라한사의 스프링 시큐리티 정리라한사 아
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초Kwangyoun Jung
 
현대고등학교 PHP 강의 - 4차시 (설리번 프로젝트)
현대고등학교 PHP 강의 - 4차시 (설리번 프로젝트)현대고등학교 PHP 강의 - 4차시 (설리번 프로젝트)
현대고등학교 PHP 강의 - 4차시 (설리번 프로젝트)Ukjae Jeong
 
Go revel 컨셉_정리
Go revel 컨셉_정리Go revel 컨셉_정리
Go revel 컨셉_정리라한사 아
 
[하코사세미나] 한 시간 만에 배우는 Jquery
[하코사세미나] 한 시간 만에 배우는 Jquery[하코사세미나] 한 시간 만에 배우는 Jquery
[하코사세미나] 한 시간 만에 배우는 Jquery정석 양
 
처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4성일 한
 

Tendances (20)

플라스크 템플릿
플라스크 템플릿플라스크 템플릿
플라스크 템플릿
 
Django View Part 1
Django View Part 1Django View Part 1
Django View Part 1
 
처음배우는 자바스크립트, 제이쿼리 #2
처음배우는 자바스크립트, 제이쿼리 #2처음배우는 자바스크립트, 제이쿼리 #2
처음배우는 자바스크립트, 제이쿼리 #2
 
Python/Django를 이용한 쇼핑몰 구축(2018 4월 Django Girls Seoul)
Python/Django를 이용한 쇼핑몰 구축(2018 4월 Django Girls Seoul)Python/Django를 이용한 쇼핑몰 구축(2018 4월 Django Girls Seoul)
Python/Django를 이용한 쇼핑몰 구축(2018 4월 Django Girls Seoul)
 
Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기
 
Light Tutorial Django
Light Tutorial DjangoLight Tutorial Django
Light Tutorial Django
 
스프링시큐리티와 소셜연습 이해를 위한 글
스프링시큐리티와 소셜연습 이해를 위한 글스프링시큐리티와 소셜연습 이해를 위한 글
스프링시큐리티와 소셜연습 이해를 위한 글
 
201803 파이썬 세미나
201803 파이썬 세미나201803 파이썬 세미나
201803 파이썬 세미나
 
Aws ses 이메일 보내기 받기 송신 수신
Aws ses 이메일 보내기 받기 송신 수신Aws ses 이메일 보내기 받기 송신 수신
Aws ses 이메일 보내기 받기 송신 수신
 
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
 
챗봇 시작해보기
챗봇 시작해보기챗봇 시작해보기
챗봇 시작해보기
 
JavaSript Template Engine
JavaSript Template EngineJavaSript Template Engine
JavaSript Template Engine
 
현대고등학교 PHP 강의 - 7,8차시 (설리번 프로젝트)
현대고등학교 PHP 강의 - 7,8차시 (설리번 프로젝트)현대고등학교 PHP 강의 - 7,8차시 (설리번 프로젝트)
현대고등학교 PHP 강의 - 7,8차시 (설리번 프로젝트)
 
아라한사의 스프링 시큐리티 정리
아라한사의 스프링 시큐리티 정리아라한사의 스프링 시큐리티 정리
아라한사의 스프링 시큐리티 정리
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초
 
현대고등학교 PHP 강의 - 4차시 (설리번 프로젝트)
현대고등학교 PHP 강의 - 4차시 (설리번 프로젝트)현대고등학교 PHP 강의 - 4차시 (설리번 프로젝트)
현대고등학교 PHP 강의 - 4차시 (설리번 프로젝트)
 
Go revel 컨셉_정리
Go revel 컨셉_정리Go revel 컨셉_정리
Go revel 컨셉_정리
 
Handlebars
HandlebarsHandlebars
Handlebars
 
[하코사세미나] 한 시간 만에 배우는 Jquery
[하코사세미나] 한 시간 만에 배우는 Jquery[하코사세미나] 한 시간 만에 배우는 Jquery
[하코사세미나] 한 시간 만에 배우는 Jquery
 
처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4
 

En vedette

Node.js Cloud Service Publish
Node.js Cloud Service PublishNode.js Cloud Service Publish
Node.js Cloud Service PublishHyun Jin Moon
 
Pycon2011 android programming-using_python
Pycon2011 android programming-using_pythonPycon2011 android programming-using_python
Pycon2011 android programming-using_pythonGeorge Goh
 
Go로 push agent 개선하기
Go로 push agent 개선하기Go로 push agent 개선하기
Go로 push agent 개선하기동철 박
 
메시지 발송 브로커를 만들어보자
메시지 발송 브로커를 만들어보자메시지 발송 브로커를 만들어보자
메시지 발송 브로커를 만들어보자Bongki Seo
 
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)Sang Don Kim
 
파이썬을 만난지 100일♥ 째
파이썬을 만난지 100일♥ 째파이썬을 만난지 100일♥ 째
파이썬을 만난지 100일♥ 째혜선 최
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131Yong Joon Moon
 
Django ORM 왜 어렵게 느껴질까?
Django ORM 왜 어렵게 느껴질까?Django ORM 왜 어렵게 느껴질까?
Django ORM 왜 어렵게 느껴질까?Kyoung Up Jung
 
텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 Yong Joon Moon
 
라면공장패턴
라면공장패턴라면공장패턴
라면공장패턴Darion Kim
 
IT 이노베이션 센터 이야기 - AWS Lambda를 활용한 개발 스폰서십 확보편
IT 이노베이션 센터 이야기 - AWS Lambda를 활용한 개발 스폰서십 확보편IT 이노베이션 센터 이야기 - AWS Lambda를 활용한 개발 스폰서십 확보편
IT 이노베이션 센터 이야기 - AWS Lambda를 활용한 개발 스폰서십 확보편Darion Kim
 
Tombelaneige Adamo (2)
Tombelaneige  Adamo (2)Tombelaneige  Adamo (2)
Tombelaneige Adamo (2)germeen
 
Renaissance period an overview
Renaissance period an overviewRenaissance period an overview
Renaissance period an overviewSir Joy
 
Personal Branding for Massage Therapists
Personal Branding for Massage TherapistsPersonal Branding for Massage Therapists
Personal Branding for Massage TherapistsLouisa Chan 陈毅信
 
Arthur Hash /engraving
Arthur Hash /engravingArthur Hash /engraving
Arthur Hash /engravingArthur Hash
 

En vedette (20)

Node.js Cloud Service Publish
Node.js Cloud Service PublishNode.js Cloud Service Publish
Node.js Cloud Service Publish
 
Pycon2011 android programming-using_python
Pycon2011 android programming-using_pythonPycon2011 android programming-using_python
Pycon2011 android programming-using_python
 
Go로 push agent 개선하기
Go로 push agent 개선하기Go로 push agent 개선하기
Go로 push agent 개선하기
 
메시지 발송 브로커를 만들어보자
메시지 발송 브로커를 만들어보자메시지 발송 브로커를 만들어보자
메시지 발송 브로커를 만들어보자
 
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
 
파이썬을 만난지 100일♥ 째
파이썬을 만난지 100일♥ 째파이썬을 만난지 100일♥ 째
파이썬을 만난지 100일♥ 째
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
 
Django ORM 왜 어렵게 느껴질까?
Django ORM 왜 어렵게 느껴질까?Django ORM 왜 어렵게 느껴질까?
Django ORM 왜 어렵게 느껴질까?
 
텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 텐서플로우 기초 이해하기
텐서플로우 기초 이해하기
 
라면공장패턴
라면공장패턴라면공장패턴
라면공장패턴
 
IT 이노베이션 센터 이야기 - AWS Lambda를 활용한 개발 스폰서십 확보편
IT 이노베이션 센터 이야기 - AWS Lambda를 활용한 개발 스폰서십 확보편IT 이노베이션 센터 이야기 - AWS Lambda를 활용한 개발 스폰서십 확보편
IT 이노베이션 센터 이야기 - AWS Lambda를 활용한 개발 스폰서십 확보편
 
Why EMail Marketing Works
Why EMail Marketing Works Why EMail Marketing Works
Why EMail Marketing Works
 
Anthro Pln
Anthro PlnAnthro Pln
Anthro Pln
 
Tombelaneige Adamo (2)
Tombelaneige  Adamo (2)Tombelaneige  Adamo (2)
Tombelaneige Adamo (2)
 
Marziale Dicembre 09
Marziale Dicembre 09Marziale Dicembre 09
Marziale Dicembre 09
 
Renaissance period an overview
Renaissance period an overviewRenaissance period an overview
Renaissance period an overview
 
Slideshare turkey
Slideshare turkeySlideshare turkey
Slideshare turkey
 
Personal Branding for Massage Therapists
Personal Branding for Massage TherapistsPersonal Branding for Massage Therapists
Personal Branding for Massage Therapists
 
Arthur Hash /engraving
Arthur Hash /engravingArthur Hash /engraving
Arthur Hash /engraving
 
Sweden final report
Sweden final reportSweden final report
Sweden final report
 

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

서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 
Gae와cloud sql을이용한 전자결재 개발
Gae와cloud sql을이용한 전자결재 개발Gae와cloud sql을이용한 전자결재 개발
Gae와cloud sql을이용한 전자결재 개발지헌 선
 
SW1차 프로젝트 Hive 최종발표
SW1차 프로젝트 Hive 최종발표SW1차 프로젝트 Hive 최종발표
SW1차 프로젝트 Hive 최종발표Sinhyub Kim
 
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST_NHNent
 
주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기Yeonhee Kim
 
Pg day seoul 2016 session_02_v1.0_ff
Pg day seoul 2016 session_02_v1.0_ffPg day seoul 2016 session_02_v1.0_ff
Pg day seoul 2016 session_02_v1.0_ffPgDay.Seoul
 
혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 웹 플랫폼 서비스 구현(삽질) 후...
혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 웹 플랫폼 서비스 구현(삽질) 후...혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 웹 플랫폼 서비스 구현(삽질) 후...
혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 웹 플랫폼 서비스 구현(삽질) 후...Tae-Seong Park
 
제품소개서 (Pastel editor)
제품소개서 (Pastel editor)제품소개서 (Pastel editor)
제품소개서 (Pastel editor)Kevin Hyun
 
제품소개서( Pastel Editor)
제품소개서( Pastel Editor)제품소개서( Pastel Editor)
제품소개서( Pastel Editor)Kevin Hyun
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기YoungSu Son
 
기술적 변화를 이끌어가기
기술적 변화를 이끌어가기기술적 변화를 이끌어가기
기술적 변화를 이끌어가기Jaewoo Ahn
 
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...문기 박
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyondJae Sung Park
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page ApplicationSangmin Yoon
 
웹 2.0 기술 소개 (2006)
웹 2.0 기술 소개 (2006)웹 2.0 기술 소개 (2006)
웹 2.0 기술 소개 (2006)Channy Yun
 
올챙이 현재와 미래
올챙이 현재와 미래올챙이 현재와 미래
올챙이 현재와 미래cho hyun jong
 
Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.효근 박
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기KwangSeob Jeong
 
라즈베리파이로 슬랙 봇 개발하기
라즈베리파이로 슬랙 봇 개발하기라즈베리파이로 슬랙 봇 개발하기
라즈베리파이로 슬랙 봇 개발하기YunSeop Song
 

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

서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
Gae와cloud sql을이용한 전자결재 개발
Gae와cloud sql을이용한 전자결재 개발Gae와cloud sql을이용한 전자결재 개발
Gae와cloud sql을이용한 전자결재 개발
 
SW1차 프로젝트 Hive 최종발표
SW1차 프로젝트 Hive 최종발표SW1차 프로젝트 Hive 최종발표
SW1차 프로젝트 Hive 최종발표
 
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
 
주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기
 
Pg day seoul 2016 session_02_v1.0_ff
Pg day seoul 2016 session_02_v1.0_ffPg day seoul 2016 session_02_v1.0_ff
Pg day seoul 2016 session_02_v1.0_ff
 
혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 웹 플랫폼 서비스 구현(삽질) 후...
혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 웹 플랫폼 서비스 구현(삽질) 후...혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 웹 플랫폼 서비스 구현(삽질) 후...
혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 웹 플랫폼 서비스 구현(삽질) 후...
 
제품소개서 (Pastel editor)
제품소개서 (Pastel editor)제품소개서 (Pastel editor)
제품소개서 (Pastel editor)
 
제품소개서( Pastel Editor)
제품소개서( Pastel Editor)제품소개서( Pastel Editor)
제품소개서( Pastel Editor)
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
기술적 변화를 이끌어가기
기술적 변화를 이끌어가기기술적 변화를 이끌어가기
기술적 변화를 이끌어가기
 
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyond
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page Application
 
웹 2.0 기술 소개 (2006)
웹 2.0 기술 소개 (2006)웹 2.0 기술 소개 (2006)
웹 2.0 기술 소개 (2006)
 
올챙이 현재와 미래
올챙이 현재와 미래올챙이 현재와 미래
올챙이 현재와 미래
 
Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
 
라즈베리파이로 슬랙 봇 개발하기
라즈베리파이로 슬랙 봇 개발하기라즈베리파이로 슬랙 봇 개발하기
라즈베리파이로 슬랙 봇 개발하기
 

Dernier

MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 

Dernier (6)

MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 

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

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