Python/Django(23)
-
[Django] django-model-utils
해당 글은 django-model-utils 라이브러리를 사용하면서 정리와 장단점을 비교한 글입니다. Github: https://github.com/jazzband/django-model-utils GitHub - jazzband/django-model-utils: Django model mixins and utilities.Django model mixins and utilities. Contribute to jazzband/django-model-utils development by creating an account on GitHub.github.com 설치 방법pip install django-model-utils FieldsStatusField모델에서 상태 집합 중 하나를 선택해서 필드를 ..
2024.10.29 -
[Django] PostgreSQL 파티셔닝(django-postgres-extra)
Django를 사용하면서 PotgreSQL의 테이블을 파티셔닝하는 방법을 정리한 글입니다. Django는 PostgreSQL을 사용할 경우 django-postgres-extra라는 라이브러리를 활용하여 파티셔닝이 가능하다. 특징파티셔닝이 되어있는 모델도 일반 모델과 동일하게 사용이 가능하다.정해둔 key를 기반으로 테이블을 서칭ex) 날짜를 기반으로 파티셔닝 했다면 filter를 date=2020.01.01로 할때 2020년도 파티셔닝 테이블을 조회한다.테스트테스트는 오래전에 진행하여... 기록이 존재하지않음.. 문서https://django-postgres-extra.readthedocs.io/en/master/table_partitioning.html
2024.07.05 -
[Django] CPU 사용량 증가 원인 파악(FilterSet model)
목차 이슈 상황 FilterSet의 Meta에 model을 추가하게 되면 해당 모델의 FK(Foreign Key)가 fields에 포함되면 CPU사용량이 급격하게 증가하는 상황이 발생 CPU가 높은 AWS EC2를 사용하게되면 문제가 되지 않지만 docker로 동작하게되면 cpu가 적어 timeout이 발생하거나 속도가 매우 느려짐 FilterSet 검증 1. 문제의 FilterSet class StudnetFilterSet(FilterSet): class Meta: model = Student fields = [ 'id', 'status', 'name', 'parent', # FK ] CPU 사용정도 38478ms = 38.478s 2. Meta의 model 제거 시 class StudnetFilte..
2024.02.16 -
[Django] 스로틀링(Throttling) - 요청 속도 제어
목차스로틀링(Throttling) 이란? 클라이언트가 API에 보낼 수 있는 요청 속도를 제어 할 수 있게 해준다. Request가 안정적인 상태의 요청 속도 및 버스트 한도를 초과할 경우, 요청을 실패시키고 "429 Too Many Requests" 오류 응답을 클라이언트에 반환한다. Throttling이 필요한 이유는 시스템에 과부화를 막거나, 악의적으로 과도한 요청을 보내는 공격에 대해서 프로세서를 보호하고 해당 시스템에 과열 문제가 있음을 사용자에게 알리기 위함이다. Django Throttling 특징여러 개의 Throttle을 설정해두고, API별로 나누어 설정이 가능하다.공식 문서에서는 DoS(Denial-of-Service)공격의 방어책으로 사용하지말라고 경고하고 있다.DoS 공격을 방지하..
2024.01.12 -
[Django] annotate DateTimeField 지난 달 구하기
목차 설명 Django ORM에서 annotate를 사용해 기존 필드의 지난 달을 구하는 방법입니다. 전체 ORM Model.objects.annotate( last_month=ExpressionWrapper( TruncMonth( F('created_date'), output_field=DateTimeField() )-timedelta(days=1), output_field=DateTimeField() ), ).annotate( last_month_yymm=Func( F('last_month'), Value('YYMM'), function='to_char', output_field=CharField() ) ) 부분 설명 1. 해당 월의 1일 구하기 ex) 2023-12-12 -> 2023-12-01 T..
2024.01.05 -
[Django] Cache(캐시)
목차캐싱이란?무언가를 캐시 한다는 것은 비용이 많이 드는 계산 결과를 저장하여 다음에 계산을 수행할 필요가 없도록 하는 것이다.Django Cache 종류종류설명django.core.cache.backends.db.DatabaseCache캐시된 데이터를 데이터베이스 테이블에 저장합니다. 데이터베이스 액세스가 빠르고 효율적인 프로젝트에 적합합니다django.core.cache.backends.filebased.FileBasedCache캐시된 데이터는 파일 시스템에 저장됩니다. 파일 시스템에 쉽게 액세스할 수 있는 소규모 프로젝트나 시나리오에 적합합니다.django.core.cache.backends.memcached.MemcachedCacheMemcached 분산 메모리 캐싱 시스템을 사용합니다. Mem..
2024.01.03 -
[Django] Django model on_delete 종류
목차on_delete란? ForeignKey의 on_delete 옵션은 참조되는 객체가 삭제되면 Django 인수에 의해 지정된 SQL 제약 조건의 동작이다. on_delete 종류1. CASCADE: 참조된 객체가 삭제 될 때 해당 객체도 함께 삭제된다.from django.db import modelsclass RelatedModel(models.Model): pass class TestModel(models.Model): test = models.ForeignKeyField(RelatedModel, on_delete=models.CASCADE)2. PROTECT: 참조된 객체가 삭제 될 때 ProtectedError를 발생시킨다. 참조된 객체 삭제 시 해당 객체 먼저 삭제를 선행해야..
2023.12.20 -
simple history 이력 확인
목차 내용 Django 사용 시에 Model의 이력관리를 위해 simple history를 사용하는 경우가 많다. simple history를 이용해 실수로 삭제를 해서 object를 조회하기 힘든 경우에도 조회나 복구가 가능하다. simple history https://django-simple-history.readthedocs.io/en/latest/ django-simple-history — django-simple-history 3.5.0.post4+g4d39103 documentation © Copyright 2013, Corey Bertram. Revision 4d39103e. django-simple-history.readthedocs.io 설치방법 1. Install $ pip insta..
2023.10.16