Python/Django 41

[Django] Query Profiling Tool (2) - Custom Decorator & Logger

Query Debugger Custom Decorator 형식의 Query Debugger로 전체 API 동작간 호출 된 Query의 갯수, 전체 걸린 시간을 체크할 수 있다. (ex. Testcode에서 함수 위에 설정해서 실행해도 동작한다) from django.db import connection, reset_queries import time import functools def query_debugger(func): @functools.wraps(func) def inner_func(*args, **kwargs): reset_queries() start_queries = len(connection.queries) start = time.perf_counter() result = func(*arg..

Python/Django 2022.08.12

[Django] Queryset 최적화 기법 (select, prefetch, F, Indexing 등)

사전 학습 내용 https://yubi5050.tistory.com/60 // ORM 이란? https://yubi5050.tistory.com/83 // ORM Queryset API https://yubi5050.tistory.com/130 // ORM Queryset 특징 QuerySet 최적화 기법 (1) select_related & prefetch_related 일반적으로 조회(GET)시 or Serailization 과정에서 많이 발생 ORM의 Lazy Loading 특성에서 발생하는 N+1 Problem 등 의 문제를 극복하기 위해 Eager Loading (즉시 로딩) 진행 📁 select_related ForeignKey(1:M)의 1입장에서, OneToOne 관계 등에서 사용 가능 S..

Python/Django 2022.08.11

[Django] ORM Queryset 특징

사전 학습 내용 https://yubi5050.tistory.com/60 // ORM 이란? https://yubi5050.tistory.com/83 // ORM Queryset API QuerySet 특징 1 . LazyLoading (지연 로딩) 정말 필요한 시점에 데이터를 로드 진행 반복(Iteration), 슬라이싱 (Slicing) 피클링 / 캐싱 (Pickling/Caching) repr(), len(), list(), bool() 정말 필요한 만큼만 로드 진행함 위의 문제는 N+1 Problem 과 같은 문제 발생 QuerySet 특징 2. Caching 기존에 호출했던 Query 결과에 대해 cache를 가지고 있음 QuerySet의 캐싱을 통해 Query 문이 덜 호출되도록 하는 것이 중..

Python/Django 2022.08.08

[Django] django-dotenv 설정

.env 는 환경변수를 .env 파일(unicode 된 것 저장 가능)에 저장 및 로드하는 의존성 모듈로, 개발 과정 중 서버 주소, 고유 API KEY 값, id, pwd 등 필요한 정보들 저장한다. 용도에 따라 다음과 같이 분류 할 수 있다. - .local.env : local 개발환경에서의 env - .dev.env : demo 환경에 대한 env - .prod.env. : production에 대한 env 아래 예제는 Django Project Key / AWS IP Key등을 셋팅하기 위에서 .env 파일을 만들어 활용한다. 📌 1. Django dot-env 패키지 설치 $ pip install django-dotenv 📌 2. .env 파일 작성 ## Django Key SECRET_KEY..

Python/Django 2022.08.08

[Django] 채팅 시스템 (3) UUID가 포함된 URL을 Channels Websocket이 수신하는 법

관련 글 Django Channel 라이브러리와 적용 전/후의 구조 비교 (링크) Django Channel을 이용한 채팅 시스템 구현 (링크) Trouble Shooting Django Channels을 이용하여 채팅 시스템을 구현 하던 중 웹 소켓 API에 UUID를 넣어서 전송하게 되면 아래와 같은 오류가 나오게 된다. 문제점 : "WebSocket connection to 'ws://127.0.0.1:8000/ws/chat/6647dbe4-2e61-4e78-8b8c-8ebc6676626b/ ' failed" 해결 방법 : Django의 routings.py (or urls.py) 에서 uuid를 받을 수 있는 정규식으로 변환 (두번째줄) 해 주면 된다. from django.urls import ..

Python/Django 2022.07.22

[Django] Timezone 한국 시간으로 설정하기

Django나 왠만한 서버(인프라)는 다 시간대가 기본적으로 UTC로 되어있다. 이를 한국 시간대로 바꾸고 싶으면 아래와 같이 수정하면 된다. Django settings.py📌 Timezone 한국 시간대로 설정# settings.pyTIME_ZONE = 'Asia/Seoul'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = False # 원래 True, 현재 DB값들 KOREA Time으로 바꾸기 위해 False로 설정 DockerfileDockerfile에 시간대 설정을 포함하는 방법. 혹은 도커 실행 명령어에도 포함 가능하다.# dockerfileENV TZ=Asia/SeoulRUN sudo ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/lo..

Python/Django 2022.07.17

[Django] 채팅 시스템 (2) 코드 구현하기 (with. FE, BE)

이전 글에서는 Django Channel 라이브러리와 적용 전/후의 구조 비교에 대해 알아보았었다. 이번 글에서는 Django Channel을 이용한 채팅 시스템 구현을 해보려고 한다. (+추가 트러블슈팅) Channels Websocket UUID가 포함된 URL 수신하는 법 (링크) 📌 Django Channel 동작 Flow 📌 Channel layer란? channel layer는 쉽게 말해 의사소통 시스테므로, 많은 소비자들(client)들이 다른 client와 의사소통을 할 수 있게 해줌 개념 1. channel - 각 메시지가 전달될 수 있는 우체통 - 각 channel은 이름을 가지며, 다른 channel에게 메시지 전송 가능 개념 2. group - 연관된 channel들의 group -..

Python/Django 2022.07.15

[Django] 채팅 시스템 (1) Channels 적용 전/후 구조 비교

이번 글에서는 Django Channel 라이브러리와 적용 전/후의 구조에 대해 알아보았었다. 다음 글에서는 Django Channel을 이용한 채팅 시스템 구현을 해보려고 한다. (+추가 트러블슈팅) Channels Websocket UUID가 포함된 URL 수신하는 법 (링크) Django Channels 이란? ASGI를 기반으로 만들어진 프로젝트로 Django 3.0 이상에서 Channels 기능을 제공 HTTP 프로토콜 외에 WebSocket(채팅), IoT 프로토콜 등 긴 연결 시간/많은 연결을 갖는 프로토콜 처리 가능 Django의 동기적으로 작동하는 Core 하위에 비동기 코드 작성 https://github.com/django/channels GitHub - django/channels:..

Python/Django 2022.07.15

[Django, AWS] EC2 에서 Nginx + Gunicorn + Django 배포하기

Nginx + Gunicorn 필요 이유 Django는 기본적으로 runserver 라는 개발용 내장 서버를 탑재하고 있으나, 실제 서비스용 (Production Level) 으로 사용하기에는 성능의 한계, 보안 이슈 등 다양한 문제점이 존재하여, Gunicorn을 통해 배포한다. Gunicorn 은 Django 로 작성한 Web Application 에 HTTP 요청을 전달해주는 역할의 WSGI HTTP Server 로서 사용하며, worker process 의 개수와 worker class(async 방식인 Gevent, Tornado 등)를 설정하여 요청 처리 성능을 높일 수 있다. Nginx는 Free OpenSource Webserver 소프트웨어로 가벼우면서도 높은 성능을 내며, Bufferi..

Python/Django 2022.07.12