2016. 9. 27. 21:24 Web/Django

Django Celery 사용법

설치

  • pip install -U Celery

  • pip install django-celery

  • 데이터베이스 migration 필요. [djcelery를 위해]

Django 설정

  • settings.py에 아래 내용을 추가한다.

import djcelery

djcelery.setup_loader()

BROKER_URL = "amqp://guest:guest@localhost:5672//"

  • settings.py 파일에 추가

INSTALLED_APPS = (

'djcelery',

'myapp',

)

    • 두 가지를 추가해야 한다. myapp은 개발하고 있는 app의 이름이 되겠다.

Task 생성

from djcelery import celery

@celery.task(name='tasks.add')

def add(x,y):

 return x + y


@celery.task(name='tasks.sleeptask')

def sleeptask(i):

 from time import sleep

 sleep(i)

 return i

  • 테스트 목적으로 두 개의 task를 만들었다. 하나는 즉시 값을 리턴하는 add함수와 10초 뒤에 task를 반환하는 sleeptask 함수이다.

View 만들기

  • django app의 views.py에 아래의 내용을 추가

from django.http import HttpResponse

from myapp import tasks


def test_celery(request):

   result = tasks.sleeptask.delay(2)

   result2 = tasks.add.delay(2,5)

   return HttpResponse("this is task test (id : %s)"%result.id)


이렇게 view 만들어놓고 url view 호출할 있도록 해야한다.


urlpattern 아래 내용을 추가해준다.


import views as taskview


urlpatterns = patterns(

                      ...

                      url(r'^test$',taskview.test_celery),

                      )

가동

  • python manage.py celeryd -l info

직렬화

Consumer

주의 사항

  • 15672는 웹 포트다. 5672 포트로 연결해야 한다.

  • 연결이 RabbitMQ에서 끊어질 시에는 RabbitMQ 관리 웹 페이지에서 Can access virtual hosts가 설정되어있는 계정인지 확인해볼 것.

  • tasks로 만들어 던지는 함수에 req를 바로 던질 수 없다. pickle 가능한 object만 던져야 한다. 즉 파라미터들을 꺼내서 던져야 한다는 의미.

  user_no = int(req.session['user_no'])

  return tasks.celery.delay(user_no)

참고


'Web > Django' 카테고리의 다른 글

Django Celery 사용법  (0) 2016.09.27
Django 사용법 정리  (0) 2016.09.27
웹서버 중에서 Django를 선택한 이유  (0) 2016.09.27
Posted by 엘키 엘키

댓글을 달아 주세요

2016. 9. 27. 21:17 Web/Django

Django 사용법 정리

Django

Django package

python

python package


'Web > Django' 카테고리의 다른 글

Django Celery 사용법  (0) 2016.09.27
Django 사용법 정리  (0) 2016.09.27
웹서버 중에서 Django를 선택한 이유  (0) 2016.09.27
Posted by 엘키 엘키

댓글을 달아 주세요

TCP 서버

  • 장점

    • 성능이 좋다. (=빠르다)

    • 커넥션 기반

    • stateful 기반

      • 가용성을 확보하기 어려움.

      • 코딩은 용이함.

    • notify가 가능. (클라이언트의 요청없이 서버가 패킷 전달)

  • 단점

    • 커넥션 기반이라, 커넥션 유실/복구 이슈

    • 로직간 결합도가 높아지는 경우가 자주 발생한다.

    • 서버 크래시에 대한 높은 리스크.

웹 서버

  • 장점

    • stateless 기반

      • 가용성 확보가 쉬움.

      • state는 모두 db에 존재.

    • 오픈소스 프레임워크가 많고, 검증되어있음.

    • 프레임워크 내에서도, 다양한 기능들이 오픈소스로 배포되고 쉽게 사용 가능.

    • 로직간 결합도가 낮다.

      • state가 없음으로

    • 서버 크래시에도 큰 장애는 없다.

      • 어지간해서는 서버 크래시도 없다.

        • 부하로 인한 timeout이나, 스크립트 오류가 발생할 뿐.

  • 단점

    • 모든 데이터는 요청마다 db를 조회해야해서 성능이 떨어진다.

    • notify가 어려움. (1-request, 1-response 구조)

    • 다른 피어와 통신용으로 사용하기 위해선 polling이 필요하다. [like ajax]


Posted by 엘키 엘키

댓글을 달아 주세요

Django

  • 장점

    • 굉장히 쉽게 배울 수 있는 프로그램 언어인 Python을 기반으로 한다.

    • 인증, 관리와 같이 거의 대부분의 사이트에서 사용하는 기능들이 기본 모듈로 제공된다.

    • 성공적인 도입 사례가 있습니다.(Instagram 등)

    • 높은 코드 완성도를 유지할 수 있다.

      • python의 강제된 indent가 코드 완성도에는 일조함.

    • IDE 지원이 훌륭한 편이다.(Pycharm, Visual Studio 등)

    • AWS, Google Cloud, Azure등에서 전폭적으로 초기 단계부터 지원한 프레임워크다.

      • deploy 및 운용에 대한 개발 비용을 크게 아낄 수 있다.

  • 단점

    • 한글 문서가 아주 풍부한 편은 아니다.

    • typeless 언어의 약점은 그대로 보유하고 있다.

    • python에 대한 높은 이해도가 필요하다.

      • Django는 문제를 python으로 해결하는 편이다. (프레임워크 특화 기능보다)

    • 성능 문제에서 자유롭지 못하다.

      • python은 ruby보다 빠를 뿐이다.

        • Django도 rails보다 빠를 뿐이다.

node.js

  • 장점

    • V8 엔진을 기반으로 한 성능이 뛰어납니다.

    • 오픈소스 문화권하에 있어서만은 아닌, 풍부한 모듈 지원. (유독 많다. 그것도 짧은 기간내에 급속히 증가)

    • C++로 필요한 모듈 작성 가능.

    • 싱글스레드, 비동기 IO 처리에 기반한 빠른 속도

    • 파일 I/O나 네트워크 처리를 이벤트 드리븐 방식으로 처리하기 때문에 빠른 처리가 가능함

    • CPU의 대기시간을 최소화 할 수 있음.

    • CPU 부하가 적고, 많은 커넥션을 동시에 처리해야 하는 구조에 적합.

    • 자바스크립트를 이용해서 개발할 수 있기 때문에 프론트엔드 개발자의 진입장벽이 낮음.

    • 기존 Java 서버에 비해 생산성이 높음

  • 단점

    • 싱글스레드 모델이기 때문에 하나의 작업에 시간이 오래걸리면 시스템 전체의 성능이 급격하게 떨어짐

    • 에러가 발생할 경우 프로세스 자체가 죽어버리므로 주의해야 함(watch dog 등으로 처리 가능)

    • 멀티코어 활용을 위해서 cluster 모듈을 이용해야 하고, 세션을 공유할 경우 부가적인 작업이 필요함

    • 불편한 비동기 프로그래밍 모델

      • 다음 할 일을 계속 콜백(callback) 함수로 넘기는 스타일로 코딩을 하다 보니 Pyramid of Doom이라 불리는 중첩 코드가 나오기 쉽상.

      • 이 문제를 해결하기 위해 비동기 제어 흐름을 좀 더 쉽게 표현하기 위한 async 모듈, underscore 등도 사용했지만, 이러한 프로그래밍 스타일은 Django나 Ruby on Rails에 비교해서 코드의 가독성을 현저히 떨어진다.

    • 초급 프로그래머라도 쉽게 할 수 있다 얘기는 거짓말.

      • 학습 난이도가 높은 편이다.

    • 시스템 관리자에게 쉽지 않은 아키텍쳐.

    • 자바스크립트로 로직을 구현하는 것은 어울리지 않다.

      • typeless 언어가 가져야하는 코드 가독성이 javascript는 부족하기 때문.

rails

  • 장점

    • ruby언어의 장점을 근간으로한 뛰어난 가독성, 그리고 표현력.

    • twitter, github, redmine 이라는 성공적인 도입 사례.

    • 검증된 빠른 개발 속도.

      • rails로 서비스를 개발한 후, 서비스 트래픽이 높아지는 단계에서 다른 플랫폼으로 갈아타는 사례가 많다는 것이 이를 입증함.

    • MVC 모델을 온전히 구현하고 있다.

    • github로 공개된 기능 패키지 수 3위 권을 다 년간 유지하고 있다.

      • 가져다 쓸 수 있는 기능이 아주 많다는 의미.

  • 단점

    • 비동기 API가 너무나 부족함.

    • GIL과 부족한 비동기 API로 인한 성능 이슈가 크게 대두 됨.

      • python 보다도 느림

        • 성능 문제로 인한 최적화 한계를, 다른 플랫폼으로 풀었다는 것은, rails의 미래에 대한 큰 숙제다.

      • 이로 인해, 고도화 과정이 반드시 필요하며, 고도화 과정은 rails 이외의 영역에 대한 높은 이해도가 필요한 경우가 많다.

    • 과도한 수준의 추상화로, 원리를 이해하는 데에는 여타 플랫폼보다 더 큰 시간이 든다.

asp.net

  • 장점

    • C# 사용 가능

    • Visual Studio 위에서 개발 가능

    • MVC 패턴을 제대로 지원함.

      • Model, View, Controller로 프로그램이 분할되어 복잡성을 다루기 쉬워집니다.

      • ViewState, 서버 기반 폼(server-based form)을 사용하지 않아서, Web 응용 프로그램에 대한 완전한 제어를 원하는 개발자들에게 이상적인 환경입니다. (WebForm에 비해서 MVC는 추상화의 수준이 낮습니다. WebForm의 경우, WebForm만 알아도 어떻게든 돌아가는 Website를 만들 수 있지만, MVC는 그게 안 됩니다. 그러다 보니 1강에서처럼 그렇게 많은 선수 과목이 필요하게 되었습니다. )

      • Website의 흐름을 마음대로 제어할 수 있습니다. 과거 WebForm에서는 blog.net/posts/23 같은 주소로 글을 접근할 수 있게 하려면, IIS를 건드려야 했지만, MVC에서는 매우 쉽게 이 문제를 해결할 수 있습니다.

      • 테스트 주도 개발(Test-Driven Development, TDD)을 하기에 좋습니다.

      • 큰 팀에서 많은 개발자와 디자이너들이 Web 응용 프로그램에 높은 수준의 제어를 원한다면 추천할만합니다.  

  • 단점

    • 윈도우 서버 위에서만 온전히 동작.

    • 개발자 풀이 좁음.

    • 오픈소스권 문화가 아니라서 MS가 제공하지 않는 기능은 .NET 플랫폼 지원언어로 개발해야함.

spring [java]

  • 장점

    • 크기와 부하의 측면에서 경량.

    • 제어 역행(IoC)이라는 기술을 통해 애플리케이션의 느슨한 결합을 도모.

    • 관점지향(AOP) 프로그래밍을 위한 풍부한 지원을 함.

    • 애플리케이션 객체의 생명 주기와 설정을 포함하고 관리한다는 점에서 일종의 컨테이너(Container)라고 할 수 있음.

    • 간단한 컴포넌트로 복잡한 애플리케이션을 구성하고 설정할 수 있음.

    • 대한민국 전자정부 표준 프레임워크의 기반 기술

  • 단점

    • 설정이 복잡한 편이다.

    • 컴포넌트가 다양한 건 사실이나, 컴포넌트로 존재하지 않는 기능을 사용할 경우에 개발 공수가 크다.

play [play]

  • 장점

    • 국내의 많은 교육기관에서 가르치고 있는 Java 기반 프레임워크인 만큼 누구나 쉽게 접근할 수 있습니다.

    • 웹 서버를 내장하고 있어 별도로 서버를 세팅할 필요가 없다.

    • 일반적인 Java 어플리케이션은 빌드하는데 굉장히 오랜 시간이 소모되지만, Play의 경우 변경된 내역에 대해 자동으로 빠르게 빌드하기 때문에 개발 및 테스트 시간을 크게 줄일 수 있습니다.

    • 가장 훌륭한 IDE인 Eclipse와 Intellij에서 Play!를 완벽하게 지원합니다.

  • 단점

    • 한글로 된 문서가 거의 없습니다. 진행중이던 문서화 작업이 중단되었으며, 관련 서적과 블로그를 통해 제공되는 강좌들은 오래되어 Play! 최신 버전과 맞지 않습니다.

    • 번들이라고 하는 서드파티 모듈들이 많지 않고 그나마 있는 것들도 프레임워크 버전에 맞춰서 버전업이 되지 않아 활용 가치가 매우 낮습니다.

    • Twitter의 Rails나 Instagram의 Django와 같은 성공적인 도입 사례가 아직까지 없습니다.

    • Java와 Scala를 골라서 개발할 수 있다고 이야기하지만 실제로 Scala를 공부하지 않으면 개발을 진행하기 어려울 정도로 Scala의 비중이 높습니다.

code igniter [php]

  • 장점

    • PHP 기반 full stack framework 중에서 성능이 매우 뛰어납니다.(Phalcon과 Slim은 경량 프레임워크)

    • 서비스가 성장하여 개발 인력을 늘려야 할 때 비교적 쉽게 관련 기술 보유자를 구할 수 있습니다.

  • 단점

    • RESTful 서비스에 적합한 구조가 아닙니다.

    • Session 처리가 안정적이지 않고, DB Session 만을 지원하기 때문에 File이나 Memory 기반의 Session을 사용하기 위해서는 별도의 개발이 필요합니다.

    • PHP 언어 특성상 구조적으로 깔끔한 코드 작성이 어렵습니다.

    • ORM 기반의 Model이 아니라 코드를 통해 스키마를 파악하기 어렵습니다.


'Web > Django' 카테고리의 다른 글

Django Celery 사용법  (0) 2016.09.27
Django 사용법 정리  (0) 2016.09.27
웹서버 중에서 Django를 선택한 이유  (0) 2016.09.27
Posted by 엘키 엘키

댓글을 달아 주세요

이전버튼 1 이전버튼

블로그 이미지
Software Engineer
엘키

공지사항

Yesterday31
Today27
Total1,605,481

달력

 « |  » 2016.9
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

글 보관함