Django
-
부하테스트 - Locust (설치 및 스크립트 작성)파이썬 2022. 5. 15. 22:14
들어가며 파이썬으로 작성된 Locust라는 툴을 설치해서 사용하는 방법을 알아보고 웹 애플리케이션에 부하 테스트를 적용해본다. 참고 사항: locust는 영어로 메뚜기라는 뜻인데, 이 툴에서 부하를 주는 것을 swarming(무리 짓기)이라고 표현한다. 왜 Locust? 우선 다른 부하 테스트 툴도 많지만 왜 이 Locust를 사용하면 어떤 이점이 있냐면, Jmeter, nGrinder,SOAP UI 등의 도구는 사용과 스케일링을 하는데 어려움이 있는 반면에, locust는 설치와 사용이 편리하고, 파이썬 스크립트로 작성을 하기 때문에 훨씬 빠르고 간편하게 부하 테스트를 해볼 수 있다. 설치 설치는 아주 간단하다. pip install locust # poetry를 사용한다면 poetry add locu..
-
[Django] DRF Router(라우터) 동작 원리파이썬/Django 2022. 2. 13. 22:42
들어가며 DRF의 대표 클래스(ViewSet, Serializer, Router)중 하나인 Router의 종류와 동작원리를 알아본다. Router는 간단하고 빠르게 자동으로 url 라우팅을 할 수 있도록 해준다. from rest_framework import routers from apps.account. import views router = routers.SimpleRouter() router.register(r'users', views.UserViewSet) urlpatterns = router.urls 위와 같은 코드를 작성하면 ^users/$ ^users/{int: lookup}/$ 의 url패턴이 자동으로 생성된다. DRF에는 SimpleRouter, DefaultRouter 두 가지를 제공..
-
[Django] DRF Serializer(시리얼라이저) 동작 원리파이썬/Django 2022. 1. 24. 22:44
들어가며 DRF에서 주요 클래스(ViewSet, Router, Serializer) 중 하나인 Serializer의 동작 원리를 살펴본다. Serializer의 기능은 세 가지가 있는데 다음과 같다. 모델 객체 → 파이썬 네이티브 타입인 dict 타입 객체로 직렬화 dict 타입의 데이터를 validation dict 타입 → 모델 객체로 역 직렬화 validation 기능은 주로 역 직렬화 전에 dict 타입의 데이터를 검증해주는 기능으로 사용된다. 이 Seirlaizer의 세 기능을 각각 어떻게 동작하는지 알아본다. 1. Model → dict class UserSerializer(serializers.Serializer): username = serializers.CharField() passwor..
-
[Django] Django의 동작 원리와 과정 파헤치기파이썬/Django 2021. 10. 20. 09:38
Django 동작과정 WSGI Application 생성 settings에서 정의한 settings.MIDDLEWARE 로드 WSGI(uwsgi, gunicorn)에서 applcation call WSGI environ(request data를 담은 딕셔너리)과 함께 WSGIRequest 인스턴스 생성 미들웨어 체인에 WSGIRequest 인스턴스와 함께 call 미들웨어를 모두 거쳐간 후 최종적으로 view에 request가 전달되어 개발자가 정의한 로직을 거친 후 최종적으로 Response 반환 상세 보기 우리가 만든 장고 프로젝트 wsgi.py의 application 변수에는 callable한 WSGIHandler의 인스턴스가 반환된다. 이때 settings에 정의한 미들웨어를 로드한다. WSGi가..
-
Gunicorn 동작 과정 알아보기파이썬/Django 2021. 10. 10. 14:15
파이썬 웹 애플리케이션과 웹 서버 사이에 위치하는 Gunicorn 이라는 WSGI가 어떻게 동작하는지 알아본다. WSGI? Web Server Gateway Interface의 약자로 파이썬의 WAS이다. 어떻게 Gunicorn이 내 장고 애플리케이션을 동작시키는지? WSGI서버와 이 WSGI로 동작하기 위한 애플리케이션 사이에 지켜지는 hook들이 있는데 이 hook을 가지고 wsgi서버가 애플리케이션을 실행시킴 import os from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_defaults.settings") application = get_wsgi_appli..
-
[Django] GenericForeignKey파이썬/Django 2021. 5. 23. 10:25
class Category(models.Model): name = models.CharField(max_length=100) class Meta: verbose_name_plural = 'Categories' class Hero(models.Model): name = models.CharField(max_length=100) category = models.ForeignKey('Category', on_delete=models.CASCADE) class Villian(models.Model): name = models.CharField(max_length=100) category = models.ForeignKey('Category', on_delete=models.CASCADE) 이렇게 두개의 모델을 ..
-
[Django] RestFramework 페이지네이션 종류파이썬/Django 2021. 5. 5. 23:32
모든 DRF Pagination 추상 클래스 BasePagination을 상속 받는다. 1. PageNumberPagination page_query_param과 page_size_query_param을 사용해서 페이지네이션하는 가장 기본적인 방법 기본적으로 장고의 Paginator를 사용한다. 주어진 쿼리셋에서 [(페이지넘버 - 1) * 페이지사이즈:(페이지넘버 - 1) * 페이지사이즈 + 페이지사이즈] 를 슬라이싱하여 페이지네이션된 쿼리셋을 반환한다. 데이터를 조회할 때 select * from article limit 10 offset 20 같은 식으로 조회를 한다. 따라서 쿼리에서 limit은 페이지사이즈가 되고 offset은 (페이지넘버 -1) * 페이지사이즈 가 된다. 2. LimitOffse..
-
[Django] Elastic Beanstalk에 AWS Elasticache Redis 사용하기파이썬/Django 2021. 4. 5. 13:25
Django Elastic Beanstalk 배포 환경에 AWS 레디스를 사용하는 방법을 소개해드리도록 하겠습니다! 1. Redis란?? Redis는 키-값 구조의 저장소로써 리스트, 해시, 셋 등 여러 자료구조를 지원하는 NoSQL입니다. 주로 RDBMS의 캐시 솔루션에 주로 사용됩니다. 자세한 특징은 여기에서 볼 수 있습니다. 2. AWS Elasticache Redis 클러스터 만들기 Elasticache 콘솔에 들어갑니다. Elasticache 대시보드의 Redis에 들어간 후 생성 버튼을 누릅니다. 엔진은 Redis를 사용하고 위치는 Amazon 클라우드를 선택합니다 이름과 설명을 써주시고 노드 유형는 저는 가장 싼 노드인 t2의 micro를 선택했습니다. 복제본은 1-5로 사용자가 알맞게 선택..