본문 바로가기
반응형

개발 이야기/Django8

Django 에서 GROUP_CONCAT 커스텀 사용 시 order_by, separator 추가하기 class CustomConcat(Aggregate): function = 'GROUP_CONCAT' allow_distinct = True def __init__(self, expression, distinct=False, **extra): # order by = group_concat 의 정렬 기준 # separator = group_concat 의 구분자(default = ",") expr_separator = '' expr_order_by = '' order_by = extra.get('order_by') separator = extra.get('separator') if order_by: expr_order_by = f' ORDER BY {order_by} ' if separator: expr_.. 2024. 2. 27.
Gunicorn 에서 print() output 이 로깅 되지 않을 때 해결법 # myapp.service StandardOutput=journal StandardError=journal 을 추가하면 print() 문구가 노출된다 2023. 11. 22.
[Django] Replica DB 사용 시 읽기전용/쓰기전용 Database 분리하기 DB replica 를 사용할 때 읽기전용으로 replica를 사용하고, 쓰기전용으로 main(master) DB를 사용하도록 하는설정 replica_1, replica_2 를 settings.py의 DATABSES 에 선언했다고 가정 import random class DBRouter(object): def db_for_read(self, model, **hints): return random.choice(["replica_1", "replica_2"]) def db_for_write(self, model, **hints): return "default" def allow_relation(self, obj1, obj2, **hints): return True def allow_migrate(self, .. 2022. 9. 6.
uwsgi processes, threads 값을 조정하여 서버 성능 향상하기 uwsgi 실행을 위해 .ini 파일을 작성할 때, processes, threads 값을 조절하여 현재 서버가 요청을 동시에 얼마나 처리할지 결정할 수 있다. 기본적인 파일 예시는 아래와 같다. 이 값을 따로 만지지 않으면, 최저 사양으로 서버가 돌기 때문에, 코어 개수가 4대임에도 프로세스가 단 하나만 생성되어 동시 요청이 많이 들어오는 경우, 몇몇 요청은 TIMEOUT 에러를 받을 수 있다. 때문에, 서버의 사양에 맞춰서 적절한 프로세스, 스레드 개수를 설정하면 많은 동시 요청을 적절하게 대응하여 처리할 수 있다. [uwsgi] module = wsgi:app master = true processes = 8 threads = 16 enable-threads = true socket = :5050 .. 2021. 1. 13.
Request with Signature, Nonce by Using API Key & Secret pair & Validate Request API key와 Secret 을 활용하여 안전한 API 를 구현할 때 Signature와 Nonce의 원리를 이용하면 쉽게 구현할 수 있다. Nonce는 쉽게 생각하면 요청 ID로 생각할 수 있으며, 이전 요청의 Nonce값 보다 다음 요청의 Nonce 값이 커져야 한다. (가장 쉬운 방법은 아래 코드처럼 타임스탬프를 이용하면 된다.) Nonce가 필요한 이유는 공격자가 클라이언트의 요청을 훔쳐서 그대로 서버에 요청을 보내는 경우, Nonce 값이 커지지 않고 똑같기 때문에 서버가 두 번째 요청을 거절할 수 있다. 그럼 클라이언트의 요청을 훔쳐서 Nonce만 높여서 보내는 경우에는 탈취가 가능하지 않나? 맞다. 그렇기 때문에 Signature가 필요하다. 서버에서 API key와 Secret을 발급할 때.. 2020. 12. 30.
Django Custom User Model & Custom Authentication django의 기본 유저 모델을 사용하면 간단한 사이트 구현은 어렵지 않게 할 수 있으나, 세부적인 유저 정보들을 더 담고 싶고, 로그인 등의 인증 방식을 더 다양하게 만들고 싶은 경우에는 커스텀화된 모델과 authenticate 함수를 구현하는 것이 좋다. 이번 예제에서는 django.contrib.auth.models 에 정의된 User 관련 모델이 아니라 아예 다른 django.db.models 의 Model 만을 이용하여 로그인/로그아웃 등의 auth 플로우를 구현한다. 본 글은 django 1.11.4 기반으로 작성하였다. 프로젝트 구성 MyApp - MyApp - settings.py - urls.py - account - views.py - urls.py - models.py - tests... 2020. 12. 30.
반응형