hoodpub 기술 발표
TRANSCRIPT
Hoodpub
Startup with Django
2006-2007 eWastecenter2008-2011 Posco ICT2011-2012 WindRiver2012-현재 !무직!
python 을 통해 새롭게 웹을 경험하는 장고 초보
최현민
www.hoodpub.com
2012.08 출생'같은 책을 읽은 다른 사람들과 어울릴 때, 책읽기의 기쁨은 두 배가 된다.'
책에 대한 관심사를 바탕으로 사람을 이어주는 작은 SNS.
HoodPub
순서
# 아이디어
# 사업성
# 기술
# 문제/개선요소
# 소감
아이디어
아이디어
즐겨 먹는 음식
입고 다니는 옷
언어 습관
같은 책을 읽은 친구들을 찾아주자는 간단한 생각에서 발단
내가 읽은 책 역시 나를 표현하는 막강한 수단이 될 수 있다.
표현수단
책 관심
사업성
- 비지니스 모델 : 네 가지
- 경쟁상대 : 국내 / 국외
- 홍보 : facebook, 유명인사
기술
- 개발
- 환경 ( 개발/운용)
- virtual env 사용
- 소스관리, bitbucket
- 배포, fabfile
- 편집기, emacs
- Django - 장고의 장점 (패키지, template tags)
- Package ( sorl.thumbnail, endless_pagination, djcelery, django_facebook ) - cron 이용하여 간단한 리포팅 결과 얻기
- register.inclusion_tag
- 외부 API
- facebook, - interpark
환경
개발
노트북Genuine Intel(R) CPU U4100 @ 1.30GHzLocal
운용
VPSIntel(R) Xeon(R) CPU E5504 @ 2.00GHzServer(just4fun.co.kr)
# Django를 호스팅하는 업체가 없어서 VPS(Virtual private server)가 필요했음.
# 위 업체는 직통연락처가 없어서 장애시 문제가 되나, 크게 저렴하다는게 매력
runserver Nginx
Gunicorn
Mysql
소스관리
소스 형상 관리툴 : github 쓰다가 변경* 항상 쓰는 명령어는 add, commit 그리고 push
; Fabric is a Python (2.5 or higher) library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks.
- 노가다에서 탈출하고 싶다면 반드시 사용(south급)
- 서로 다른 환경이라도 비교적 쉽게 customizing 가능
Virtualenv ; python 환경을 OS 완 분리시켜줌.- 서로다른 python 버젼 테스트에 유리- 패키지 관리 편리
Fabric
개발
편집기
Runserver; 개발화경에서 장고 실행기
- 표준 출력으로 실시간 로그 확인 가능
- 소스 수정후 파일 저장을 하면 바로 적용가능
pdb; python 의 gdb
- 굉장히 유용함.
패키지
Sorl-thumbnail ; thumbnail 처리를 도와줌
endless_pagination ; Twitter-style or Digg-style pagination
; Celery is an asynchronous task queue/job queue based on distributed message passing.dcelery
; Django Facebook enables your users to easily register using the Facebook API.
django_facebook
$ pip install django_facebook
django_facebook
# settings.pyFACEBOOK_APP_IDFACEBOOK_APP_SECRET
Features - Access the Facebook API
- Store likes, friends and user data locally
- Facebook FQL access
- OAuth 2.0 compliant
- Automated reauthentication
- Includes Open Facebook
다른 사이트의 OPEN API를 찾아
봤지만, 그 중에 인터파크가 가장 깔
끔하게 데이타를 내려줌.
Book data
yes24, 교보는 OPEN API를 찾을수
없었고, 국내 포탈 사이트는 항상 자
기 서비스를 거쳐가게 하려는 의도가
있어 만족할 수 없었음. # 인터파크 책 API ( link)
- 책검색 API
- 베스트셀러 API
- 추천도서 API
- 신간도서 API
책검색 API (search.api)
인터파크 책 목록
베스트 셀러 API(bestSeller.api)
추천도서API (recommend.api)
신간도서API (newBook.api)
http://book.interpark.com/api/search.api?key=interpark&query=대한민국
http://book.interpark.com/api/bestSeller.api?key=interpark&categoryId=100
http://book.interpark.com/api/recommend.api?key=interpark&categoryId=100
http://book.interpark.com/api/newBook.api?key=interpark&categoryId=100
페이지의 일부 영역에 MTV 개념을 적용하여 재사용 가능
register.inclusion_tag
@register.inclusion_tag('hoodpub/list_inc_book.html', takes_context = True )def list_inc_book(context, user_id): request = context['request'] books = _get_booklist(request, user_id, 4) return {'books': books }
@register.inclusion_tag('hoodpub/list_inc_user_info.html')def list_inc_user_info(user): return {'user': user }
TEMPLATE(html)<div class="index_row" style="min-height:70px;"> {% list_inc_user_info user %}</div> <div class="index_row "> {% list_inc_book user.get_profile.facebook_id %}</div>
#원하는 시간에 정해진 작업을 시키자!사용예
- 모니터링 결과메일로 받아보기 (일일 2회)
- 책 목록 받아오기 (매일)
- 킨들에 무료 신문 보내기 (매일)
cron
$ crontab -l00 02 * * * /bin/bash /home/hoodpub/web_project/web/lib/interpark/run_regularly.sh &>> /tmp/run_regular.log
20,50 * * * * /home/hoodpub/.virt_env/web/bin/python /home/hoodpub/web_project/web/lib/interpark/get_frequent_books.py &>> /tmp/run_regular.log
30 07,19 * * * /home/hoodpub/.virt_env/web/bin/python /home/hoodpub/web_project/web/lib/get_status.py &>> /tmp/send_monitor.log
# logging
# heroku
# google analytics
# email server setting ?
기타
문제/개선요소
디자인
App 화
서버 환경
아름답지 못하다.투박하다
예쁜 디자이너와 함께 작업해야함.
모바일 환경에 최적화 X
고민 필요(서비스 특성상 특별한 모바일 하드웨어 불필요)
가상서버 Intel(R) Xeon(R) CPU E5504 @ 2.00GHz
투자를 받고 싶어요.
소감
안도감 기술적으로 두려움이 컸으나, 방대한 장고 커뮤니티를 보고 나니 안심
맷집 단기간에 결과를 보기는 쉽지 않다.정신적, 경제적, 사회적으로 딴딴한 맷집이 필요
사람 기술, 돈, 능력 그 무엇보다도 사람이 우선
기타 최대한 빨리 피드백을 듣고 반복 수정하자.구글 프리젠테이션 'Research' 기능의 편리함.
질문과 응답