Django FilterSet에 대한 분석
·
Backend/Django
서론Django REST Framework를 사용하면서 filterset_class를 설정하고 필터링을 적용하는 건 매우 흔한 일이다. 필터셋을 통해 URL 파라미터만으로 복잡한 조건 필터링을 쉽게 구현할 수 있고, django-filter 라이브러리를 활용하면 필드 단위, 메서드 단위로 커스텀 필터도 자유롭게 정의할 수 있다. 필자 또한 filterset_class에 커스텀 메서드를 정의하여 필터링을 적용했다.하지만 API 성능을 점검해보는 과정에서, 단일 응답에 수백 개의 SQL 쿼리가 발생하는 문제를 발견했다.해당 문제를 아래 흐름으로 살펴보며 구체적인 원인을 파악해보고자 한다.filterset은 정확히 어떤 시점에 동작하는가?filterset 내부에서 Model.objects.filter()를 ..
DRF Serializer Validation 로직
·
Backend/Django
서론DRF(Django REST Framework)를 사용하여 개발을 할 때, 시리얼라이저를 커스텀하는 것은 빈번한 일이다.나 또한 마찬가지로 개발을 진행하던 중 DRF 시리얼라이저를 커스텀하였는데, 예상과 다른 동작이 일어났다. 입력값은 엑셀 파일에서 단일 행으로 제공되고, 이를 여러 모델로 정규화하여 나누는 과정에서 문제가 발생하였다. 보다 구체적으로 설명하면, A 시리얼라이저는 B, C, D, E라는 네 개의 모델 시리얼라이저를 포함하며,B 모델은 F 모델을 외래키로 참조하고 있는 상황이다. 이러한 구조 때문에 A 시리얼라이저의 입력값은 프리픽스를 활용해 각 모델로 분류하여 처리하도록 구현하였다.class BSerializer(serializers.ModelSerializer): f_ids =..
Django의 Request Lifecycle
·
Backend/Django
서론Django를 통해 WAS 서버를 구성하다 보면 당연시하며 사용하는 것이 있다. 바로 'request(요청)' 객체가 이에 해당된다.너무나도 당연시하며 사용하곤 있었지만 어떻게 이 'request' 객체가 생성되는지 흐름을 알고 있진 못하였다. 따라서 본 글에서는 WSGI 서버와 Django(장고) 사이에서 어떻게 'request' 객체가 생성되고,비즈니스 로직이 담겨있는 뷰(View)를 거쳐 'response(응답)' 객체로 반환되는지를 알아보고자 한다.  본론중국의 딥시크(R1) 모델의 발표로 인해 그 위상이 약간은 추락하신 Chat GPT 님께 자문을 구하였다.Django에서 클라이언트의 요청이 들어와 실제 뷰(View)에 전달되기까지의 흐름을 간단히 요약하면 아래와 같습니다.1. 클라이언트 (..
쿠키(Cookie)의 종류 구분 [Session vs Persistent]
·
Backend/Django
서론근래 사내 시스템을 서비스하던 중, 놀라우면서도 생각해 보면 당연한 오류 사항을 제보받았다.자동 로그인이 컴퓨터 재부팅을 하게 되면 풀린다. 기이한 일이었다. 분명 이전에 글로 정리하였듯이 백엔드 단에서 쿠키를 자동으로 재발급하고 자동 로그인 기능을 구현하였으니 말이다. Django JWT 인증 자동화하기 [DRF Simple JWT]서론근래 사내 서비스를 개발하던 중 프론트엔드 팀의 업무 부담이 증가하면서 JWT 관련 인증 기능을 백엔드에서 전적으로 처리해야 하는 상황이 발생하였다. 본 글에서는 JWT 인증의 일련 과정no-intellectual.tistory.com 그간 나는 쿠키가 세션 방식과 비교되는 만큼 무의식적으로 당연히 쿠키는 영구적으로(만료 전까지) 보관될 것이라 생각하였다.때문에 컴퓨..
API 아키텍처 비교 [REST API vs GraphQL vs gRPC]
·
Backend/ETC
서론근래 취업을 준비함에 있어 다양한 회사들의 기술 스택들을 살펴보았다.이 과정에서 GraphQL, gRPC 등 들어본 적은 있으나 사용한 적은 없던 API 아키텍처들이 빈번하게 사용되고 있음을 발견하였다.  그러나 필자는 REST API에만 익숙했기에 다른 API 아키텍처에 대한 이해가 부족하다고 판단하였다.이에 본 글에서는 REST API, GraphQL, gRPC의 주요 특징과 장단점을 중심으로 비교하고자 한다. 본 글에선 각 아키텍처 간의 '비교'를 중점적으로 다룰 것이기에 각 아키텍처들에 대해 이론적인 설명이 부족할 수 있으니 양해 바란다.  본론여김 없이 전지전능하신 ChatGPT님께 자문을 구하였다.REST API는 HTTP 프로토콜과 URL을 기반으로 동작하며 간단하고 표준화된 방식으로 브..
Django JWT 인증 자동화하기 [DRF Simple JWT]
·
Backend/Django
서론근래 사내 서비스를 개발하던 중 프론트엔드 팀의 업무 부담이 증가하면서 JWT 관련 인증 기능을 백엔드에서 전적으로 처리해야 하는 상황이 발생하였다. 본 글에서는 JWT 인증의 일련 과정을 Django 프레임워크를 기반으로 하여 자동화하고자 한다. 일련의 과정이라 함은 '인증 > 토큰 발급 > 헤더 설정> 검증'으로 이루어지는 JWT 토큰 인증 절차를 의미한다. 본론인증마찬가지로 전지전능하신 ChatGPT님께 JWT 토큰 인증방식에 대해 고견을 구하였다. JWT (JSON Web Token) 인증 방식은 클라이언트와 서버 간에 인증 정보를 안전하게 전송하기 위한 방법 중 하나로, 토큰 기반 인증 시스템입니다. JWT는 사용자의 신원을 확인하기 위해 주로 사용되며, 인증이 성공한 후 클라이언트에게 발..
Web Server VS WAS with Nginx
·
Backend/ETC
서론Nginx(엔진엑스)에 대해 찾아보는 와중 기존 내가 알고 있던 웹 서버(Web Server)에 대한 개념이 상충하는 것이 있어 이를 정리하고자 한다. 본 글에서는 Web Server와 WAS의 개념 비교부터 시작하여 가장 보편적으로 사용되는 Web Server 엔진 및 실제 사용될 수 있는 프로젝트 구성을 Docker-compose를 통해 구성해보고자 한다. 본론Web Server위키백과에 정의된 웹 서버에 대한 정의는 다음과 같다 웹 서버(Web server)는 다음의 두 가지 뜻 가운데 하나이다.1. 웹 서버: 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램2. 웹 서버 (하드웨어): 위에 언급한 기능을 제공하는 컴퓨터 ..