Python 113

[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

[배포] CGI vs ASGI vs WSGI 비교

Python Web Framework들은 Web Server와 효율적으로 통신하기 위해 잘 정의된 인터페이스가 필수적이다. 해당 Interface는 CGI => WSGI => ASGI 순으로 발전 해 왔으며 최근 파이썬 프레임워크 들은 ASGI를 지원한다. Web Server란? Webserver는 하드웨어 적인 의미와 소프트웨어 적인 의미를 함께 가지고 있으며 Client의 요청을 최초 수신하여 Web Applicaton 과 상호 소통 하고, Response를 전달해주는 역할을 한다. 대표적으로는 Apache HTTP Server와 Nginx가 있다. CGI (Common Gateway Interface ~2003) 서버와 웹 애플리케이션 간에 데이터 교환에 대한 표준 컨벤션 CGI 동작 순서 1) W..

Python/Deployment 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

[Python Utils] Python 코드 정리 Tool (Black, isort)

Black (코드 정리 Tool) 최근 파이썬 커뮤니티에서 가장 널리 쓰이고 있는 있는 Code Formatter로, Setting의 여지가 적어 포맷팅 규칙을 강요 받긴 함. 그러나 팀 내에 코드 스타일이 협의되고 표준화 되는 과정에 대한 시간적 소요를 줄여주고, 일관성 있는 코드 작성을 가능하게 함. https://black.readthedocs.io/en/stable/getting_started.html Getting Started - Black 22.3.0 documentation Previous The (future of the) Black code style black.readthedocs.io $ pip install black $ black # ex) black code/a.py isort..

Python/Utils 2022.06.30