본문 바로가기
반응형

프로그래밍/Django10

Django ORM 최적화: GenericForeignKey를 활용한 데이터 모델링 문제 사항커뮤니티 관련 사이드 프로젝트를 진행하면서 모델링에서 발생한 문제를 정리해보려고 합니다.예를 들어, 댓글 기능을 글, 사진, 비디오 등 다양한 콘텐츠에 적용할 수 있는 서비스를 만든다고 가정해봅시다.이 경우, 댓글을 저장하는 테이블이 있고, 이를 각각의 콘텐츠(글, 사진, 비디오) 테이블과 개별적으로 연결해야 하는 문제가 발생합니다.즉, 매번 새로운 콘텐츠 모델을 추가할 때마다 댓글 테이블과 별도의 관계(ForeignKey)를 설정해야 하는 불편함이 생깁니다.이 문제를 해결할 방법을 고민하던 중, Django의 GenericRelation을 활용하면 유연한 설계가 가능하다는 것을 발견했습니다.이번 글에서는 GenericRelation을 적용하기 전 테스트했던 코드와 함께, 어떻게 더 효율적으로 .. 2025. 2. 19.
View가 깔끔해지는 Django 필터링 전략! get_queryset() vs filter_queryset() 문제 상황새로운 프로젝트를 진행하던 중, 회사의 레거시 프로젝트를 살펴볼 기회가 있었다.기존 방식대로 문제를 해결할 수도 있었지만, 개인적으로는 View에 모든 비즈니스 로직이 집중되면 가독성과 유지보수성이 떨어진다고 판단했다.따라서 Django의 filter를 활용하여 파라미터별로 필요한 조건을 동적으로 적용할 수 있도록 구현하는 것이 더 적절하다고 결정했다. 사실 위의 내용들은 각각 쿼리 파라미터의 값들에 맞춰서 적절하게 조건이 나눠지면 된다. 해결 방안from django_filters.rest_framework import filterset, filtersclass UserFilter(filterset.FilterSet): locations = filters.CharFilter(method=.. 2025. 2. 18.
Django 대량의 list 요청시 Cursor-based Pagination Django를 사용하다보면 기본적으로 사용하는 DRF Pagination을 사용해왔다. 그러나 대량의 데이터를 페이지네이션을 하게되면, 퍼포먼스 및 최적화 관점에서 좋지 않다.Pagination의 종류구현 방법오프셋 기반 페이지네이션(Offset-based Pagination)커서 기반 페이지네이션(Cursor-based Pagination)문제 상황기존의 오프셋 기반 페이지네이션과 커서 기반의 페이지네이션의 차이는 무엇이고 왜 대용량의 페이지를 처리할때는 오프셋 기반보다 커서 기반으로 처리하는것이 좋은걸까?기본적으로 많이 사용하는 Pagination은 Offset 기반의 Pagination이다.Offset을 MySQL에서라면 간단하게 LIMIT 쿼리에 콤마를 붙여 ‘건너 뛸’ row 숫자를 지정하면 된.. 2025. 2. 18.
[Django]filter_fields로 URL 파라미터 사용하기 시작 CRUD에서 GET을 통한 작업은 매우 필수적이다. Django는 원하는 정보만을 필터링해서 데이터를 읽어올 수 있는 Filter_Fields를 제공한다. [Request URL] http://127.0.0.1:8000/users?email=test@admin.co&username=test 위와 같이 API를 통해서 요청을 보낼때, 파라미터에 값을 정해주고 내가 원하는 값을 얻고자 할때 주로 사용이 된다. 조금 더 시각화를 돕기 위해서 swagger의 기능을 사용하여, 이해하려고 한다. swagger 모델을 따로 만들어서 하기는 귀찮았기 때문에,,, 기본적으로 제공되는 Django의 User 모델을 사용하여 연습해보자!😀 위의 캡쳐는 Swagger를 통해서 나의 API가 어떻게 구성되어 있는지 확인.. 2022. 5. 13.
[Django] 멀티 DB 라우터설정 및 연동하기 계기 개인 프로젝트를 여러개 하다보니 DB 포트가 겹치기도 하고, 가끔 필요한 데이터를 이미 만들어둔 경우에 재사용을 하고 싶어서 시작하게 되었다. 기술스팩 일단 기본적으로 DB는 도커를 사용하여 MySQL을 사용하였다. 연동 1. Django 프로젝트의 setting.py를 열고 'DATABASES={}'를 설정해준다. 기본적으로 아래와 같이 설정되어 있을것이다. DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } 기본적으로 DATABASES의 키 값이 default로 설정되어 있는데, 현재 프로젝트에선 각각의 DB를 분리하기 위해서 아래과 같이 변경하였다. DATABA.. 2022. 5. 11.
[Django][에러노트]raise ValueError, "No frame marked with %s." % fname 에러사항 Django 프로젝트에서 환경변수(.env)를 읽어오는 라이브러리 'environ'을 사용했을 때 에러가 발생했다. (하위 라이브러리 import 예시) import environ [설치] $ pip install environ 위의 방식으로 설치했을 경우 에러가 발생한다. 때문에 위의 방식이 아닌 다른 방식으로 설치를 해주어야지 에러를 피할 수 있다. 해결방안 $ pip install django-environ 2022. 5. 7.
반응형